<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[forum.rcl-radio.ru &mdash; atmega8_in-16]]></title>
	<link rel="self" href="http://forum.rcl-radio.ru/extern.php?action=feed&amp;tid=528&amp;type=atom" />
	<updated>2024-01-07T05:52:43Z</updated>
	<generator>PunBB</generator>
	<id>http://forum.rcl-radio.ru/viewtopic.php?id=528</id>
		<entry>
			<title type="html"><![CDATA[Re: atmega8_in-16]]></title>
			<link rel="alternate" href="http://forum.rcl-radio.ru/viewtopic.php?pid=9126#p9126" />
			<content type="html"><![CDATA[<p>Нет</p>]]></content>
			<author>
				<name><![CDATA[liman324]]></name>
				<uri>http://forum.rcl-radio.ru/profile.php?id=2</uri>
			</author>
			<updated>2024-01-07T05:52:43Z</updated>
			<id>http://forum.rcl-radio.ru/viewtopic.php?pid=9126#p9126</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: atmega8_in-16]]></title>
			<link rel="alternate" href="http://forum.rcl-radio.ru/viewtopic.php?pid=9124#p9124" />
			<content type="html"><![CDATA[<p>Здравствуйте! Скажите, а подсветка на адресных или РЖБ светодиодах будет разрабатываться?</p>]]></content>
			<author>
				<name><![CDATA[Mich76]]></name>
				<uri>http://forum.rcl-radio.ru/profile.php?id=2297</uri>
			</author>
			<updated>2024-01-07T04:54:46Z</updated>
			<id>http://forum.rcl-radio.ru/viewtopic.php?pid=9124#p9124</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: atmega8_in-16]]></title>
			<link rel="alternate" href="http://forum.rcl-radio.ru/viewtopic.php?pid=7092#p7092" />
			<content type="html"><![CDATA[<p>Вывод температуры ds3231 при нажатии UP или DW</p><div class="codebox"><pre><code>#define ADDR_DS3231   0b1101000
#define CPU_F         12000000 // Clock Speed 
#define SCL_F         100000 // // I2C Speed
#define TEMP_CALL     -200   // 2 ГРАДУСА

unsigned long times_sec,millis_time;
int i,segm,times,hh,mm;
byte a[4],an,sec,min,hour,set;

void setup() {
  TWBR = (((CPU_F)/(SCL_F)-16 )/2) ;
  TWSR = 0;
  DDRB &amp;=~(1 &lt;&lt; PB0);DDRD &amp;=~(1&lt;&lt;PD6)|(1&lt;&lt;PD7);
  DDRB |= (1 &lt;&lt; PB1);// pin 15 output pwm
  DDRB |= (1 &lt;&lt; PB2);// pin 16 output second in-3
  DDRC |= (1 &lt;&lt; PC0)|(1 &lt;&lt; PC1)|(1 &lt;&lt; PC2)|(1 &lt;&lt; PC3);// H0-H3 ANOD
  DDRD |= (1 &lt;&lt; PD0)|(1 &lt;&lt; PD1)|(1 &lt;&lt; PD2)|(1 &lt;&lt; PD3);// 1 2 4 8 K155ID1
  PORTB |= (1 &lt;&lt; PB0);PORTD |= (1 &lt;&lt; PD6)|(1 &lt;&lt; PD7);
// F=12000000/512/1/1=23437.5 Hz
  TCCR1A = 0;
  TCCR1B = 0;
  TCNT1 = 0;
  TCCR1A |= (1&lt;&lt;COM1A1);
  TCCR1B |= (1&lt;&lt;WGM12);
  TCCR1A |= (1&lt;&lt;WGM11);
  TCCR1B |= (1 &lt;&lt; CS10); 
  ICR1 = 511; 
  OCR1A = 506; //  Ureg_180V 
// (12000000/((233+1)x256))=200.32051282051 Hz
  OCR2 = 233;
  TCCR2 |= (1 &lt;&lt; WGM21); 
  TCCR2 |= (1 &lt;&lt; CS22) | (1 &lt;&lt; CS21);
  TIMSK |= (1 &lt;&lt; OCIE2);
// set time
 //  set_time(21,1,12,26,8,9,0);// год 00-99, ДН 1-7 (1=ВС), месяц 1-12, дата 1-31, час 0-23, минуты 0-59, секунды 0-59  
}


void loop(){
/// read time  
   sec =  (i2c_read_1bit(ADDR_DS3231,0) &amp; 0x0F) + (((i2c_read_1bit(ADDR_DS3231,0) &amp; 0x70) &gt;&gt; 4) * 10);
   min =  (i2c_read_1bit(ADDR_DS3231,1) &amp; 0x0F) + (((i2c_read_1bit(ADDR_DS3231,1) &amp; 0x70) &gt;&gt; 4) * 10);
   hour = ((i2c_read_1bit(ADDR_DS3231,2) &amp; 0x0F) + ((i2c_read_1bit(ADDR_DS3231,2) &amp; 0x70) &gt;&gt; 4) * 10);
   int temper = (i2c_read_1bit(ADDR_DS3231,0x11)*100 + ((i2c_read_1bit(ADDR_DS3231,0x12) &amp; 0b11000000) &gt;&gt; 6)*25)+TEMP_CALL;  

/// set time
  hh=hour;mm=min;
  if(((PINB &gt;&gt; PB0) &amp; 1) == 0){set++;if(set&gt;2){set=0;}_delay_ms(200);}  
   if(set==1&amp;&amp;((PIND &gt;&gt; PD6)&amp;1)==0){hh++;if(hh&gt;23){hh=23;}set_time(21,1,12,26,hh,mm,0);_delay_ms(100);}
   if(set==1&amp;&amp;((PIND &gt;&gt; PD7)&amp;1)==0){hh--;if(hh&lt;0){hh=0;}set_time(21,1,12,26,hh,mm,0);_delay_ms(100);}
   if(set==2&amp;&amp;((PIND &gt;&gt; PD6)&amp;1)==0){mm++;if(mm&gt;59){mm=59;}set_time(21,1,12,26,hh,mm,0);_delay_ms(100);}
   if(set==2&amp;&amp;((PIND &gt;&gt; PD7)&amp;1)==0){mm--;if(mm&lt;0){mm=0;}set_time(21,1,12,26,hh,mm,0);_delay_ms(100);}

/// output sec in-3  
  if(millis_time-times_sec&lt;100){PORTB |= (1 &lt;&lt; PB2);}
  if(millis_time-times_sec&gt;=100){PORTB &amp;=~(1 &lt;&lt; PB2);}
  if(millis_time-times_sec&gt;200){times_sec=millis_time;}

  times = hour*100+min;
  if(set==0&amp;&amp;((PIND &gt;&gt; PD7)&amp;1)==0){times = temper;PORTB |= (1 &lt;&lt; PB2);}
  if(set==0&amp;&amp;((PIND &gt;&gt; PD6)&amp;1)==0){times = temper;PORTB |= (1 &lt;&lt; PB2);}

  if(min == 30 &amp;&amp; sec &lt; 10 &amp;&amp; set == 0){
    switch(sec){
      case 0: times=0;break;
      case 1: times=1111;break;
      case 2: times=2222;break;
      case 3: times=3333;break;
      case 4: times=4444;break;
      case 5: times=5555;break;
      case 6: times=6666;break;
      case 7: times=7777;break;
      case 8: times=8888;break;
      case 9: times=9999;break;
      }
    }
  
  a[0]=times/1000%10;
  a[1]=times/100%10;
  a[2]=times/10%10;
  a[3]=times%10;
  
//_delay_ms(50);
}

void segment(){
  switch(segm){                                                                 
    case 0: PORTD &amp;= ~(1 &lt;&lt; PD3);PORTD &amp;=~ (1 &lt;&lt; PD2);PORTD &amp;= ~(1 &lt;&lt; PD1);PORTD &amp;= ~(1 &lt;&lt; PD0);break;     // DEC 0 = 0b0000
    case 1: PORTD &amp;= ~(1 &lt;&lt; PD3);PORTD &amp;=~ (1 &lt;&lt; PD2);PORTD &amp;= ~(1 &lt;&lt; PD1);PORTD |=(1 &lt;&lt; PD0); break;    // DEC 1 = 0b0001
    case 2: PORTD &amp;= ~(1 &lt;&lt; PD3);PORTD &amp;=~ (1 &lt;&lt; PD2);PORTD |= (1 &lt;&lt; PD1);PORTD &amp;= ~(1 &lt;&lt; PD0);break;    // DEC 2 = 0b0010
    case 3: PORTD &amp;= ~(1 &lt;&lt; PD3);PORTD &amp;=~ (1 &lt;&lt; PD2);PORTD |= (1 &lt;&lt; PD1);PORTD |= (1 &lt;&lt; PD0);break;   // DEC 3 = 0b0011
    case 4: PORTD &amp;= ~(1 &lt;&lt; PD3);PORTD |= (1 &lt;&lt; PD2);PORTD &amp;= ~(1 &lt;&lt; PD1);PORTD &amp;= ~(1 &lt;&lt; PD0);break;    // DEC 4 = 0b0100
    case 5: PORTD &amp;= ~(1 &lt;&lt; PD3);PORTD |= (1 &lt;&lt; PD2);PORTD &amp;= ~(1 &lt;&lt; PD1);PORTD |= (1 &lt;&lt; PD0);break;   // DEC 5 = 0b0101
    case 6: PORTD &amp;= ~(1 &lt;&lt; PD3);PORTD |= (1 &lt;&lt; PD2);PORTD |= (1 &lt;&lt; PD1);PORTD &amp;= ~(1 &lt;&lt; PD0);break;   // DEC 6 = 0b0110
    case 7: PORTD &amp;= ~(1 &lt;&lt; PD3);PORTD |= (1 &lt;&lt; PD2);PORTD |= (1 &lt;&lt; PD1);PORTD |= (1 &lt;&lt; PD0);break;  // DEC 7 = 0b0111
    case 8: PORTD |= (1 &lt;&lt; PD3);PORTD &amp;=~ (1 &lt;&lt; PD2);PORTD &amp;= ~(1 &lt;&lt; PD1);PORTD &amp;= ~(1 &lt;&lt; PD0);break;    // DEC 8 = 0b1000
    case 9: PORTD |= (1 &lt;&lt; PD3);PORTD &amp;=~ (1 &lt;&lt; PD2);PORTD &amp;= ~(1 &lt;&lt; PD1);PORTD |= (1 &lt;&lt; PD0);break;   // DEC 9 = 0b1001
  }}

void anod(){
  switch(an){                                                             
    case 0: PORTC |= (1 &lt;&lt; PC0);PORTC &amp;= ~(1 &lt;&lt; PC1);PORTC &amp;= ~(1 &lt;&lt; PC2);PORTC &amp;= ~(1 &lt;&lt; PC3);break;    
    case 1: PORTC &amp;= ~(1 &lt;&lt; PC0);PORTC |= (1 &lt;&lt; PC1);PORTC &amp;= ~(1 &lt;&lt; PC2);PORTC &amp;= ~(1 &lt;&lt; PC3);break;   
    case 2: PORTC &amp;= ~(1 &lt;&lt; PC0);PORTC &amp;= ~(1 &lt;&lt; PC1);PORTC |= (1 &lt;&lt; PC2);PORTC &amp;= ~(1 &lt;&lt; PC3);break;   
    case 3: PORTC &amp;= ~(1 &lt;&lt; PC0);PORTC &amp;= ~(1 &lt;&lt; PC1);PORTC &amp;= ~(1 &lt;&lt; PC2);PORTC |= (1 &lt;&lt; PC3);break;   
  }}

void cl(){PORTC &amp;= ~(1 &lt;&lt; PC0);PORTC &amp;= ~(1 &lt;&lt; PC1);PORTC &amp;= ~(1 &lt;&lt; PC2);PORTC &amp;= ~(1 &lt;&lt; PC3);}  

ISR(TIMER2_COMP_vect){
  switch(i){
    case 0: segm=a[0]; an=0; cl(); if(set==2){_delay_ms(5);}_delay_ms(1); segment();anod();break;
    case 1: segm=a[1]; an=1; cl(); if(set==2){_delay_ms(5);}_delay_ms(1); segment();anod();break;
    case 2: segm=a[2]; an=2; cl(); if(set==1){_delay_ms(5);}_delay_ms(1); segment();anod();break;
    case 3: segm=a[3]; an=3; cl(); if(set==1){_delay_ms(5);}_delay_ms(1); segment();anod();break;
    }
    i++;if(i&gt;3){i=0;}
    millis_time++;
  }

int i2c_read_i2c_2bit(byte i2c_addr, byte i2c_reg){
   TWCR = (1&lt;&lt;TWINT)|(1&lt;&lt;TWSTA)|(1&lt;&lt;TWEN);  // START
  while (!(TWCR &amp; (1&lt;&lt;TWINT)));
   TWDR = i2c_addr &lt;&lt; 1;
   TWCR = (1&lt;&lt;TWINT) | (1&lt;&lt;TWEN);
  while (!(TWCR &amp; (1&lt;&lt;TWINT)));
   TWDR = i2c_reg;
   TWCR = (1&lt;&lt;TWINT) | (1&lt;&lt;TWEN);
  while (!(TWCR &amp; (1&lt;&lt;TWINT)));
 
   TWCR = (1&lt;&lt;TWINT)|(1&lt;&lt;TWSTA)|(1&lt;&lt;TWEN);  // START
  while (!(TWCR &amp; (1&lt;&lt;TWINT))); 
   TWDR = (i2c_addr &lt;&lt; 1) | 1;
   TWCR = (1&lt;&lt;TWINT) | (1&lt;&lt;TWEN);
  while (!(TWCR &amp; (1&lt;&lt;TWINT)));
 
   TWCR=(1&lt;&lt;TWINT)|(1&lt;&lt;TWEN)|(1&lt;&lt;TWEA); 
  while(~TWCR&amp;(1&lt;&lt;TWINT));
   int i2c_data0 = TWDR; 
 
   TWCR = (1&lt;&lt;TWINT) | (1&lt;&lt;TWEN);
  while(~TWCR&amp;(1&lt;&lt;TWINT));
  int i2c_data1 = TWDR; 
 
   TWCR = (1&lt;&lt;TWINT)|(1&lt;&lt;TWEN)|(1&lt;&lt;TWSTO); // СТОП
  int i2c_data = (i2c_data0&lt;&lt;8)+i2c_data1;
  return i2c_data;
  }  

int i2c_read_1bit(byte i2c_addr, byte i2c_reg){
   TWCR = (1&lt;&lt;TWINT)|(1&lt;&lt;TWSTA)|(1&lt;&lt;TWEN);  // START
  while (!(TWCR &amp; (1&lt;&lt;TWINT)));
   TWDR = i2c_addr &lt;&lt; 1;
   TWCR = (1&lt;&lt;TWINT) | (1&lt;&lt;TWEN);
  while (!(TWCR &amp; (1&lt;&lt;TWINT)));
   TWDR = i2c_reg;
   TWCR = (1&lt;&lt;TWINT) | (1&lt;&lt;TWEN);
  while (!(TWCR &amp; (1&lt;&lt;TWINT)));
 
   TWCR = (1&lt;&lt;TWINT)|(1&lt;&lt;TWSTA)|(1&lt;&lt;TWEN);  // START
  while (!(TWCR &amp; (1&lt;&lt;TWINT))); 
   TWDR = (i2c_addr &lt;&lt; 1) | 1;
   TWCR = (1&lt;&lt;TWINT) | (1&lt;&lt;TWEN);
  while (!(TWCR &amp; (1&lt;&lt;TWINT)));
 
   TWCR = (1&lt;&lt;TWINT)|(1&lt;&lt;TWEN)|(1&lt;&lt;TWEA); 
  while(~TWCR&amp;(1&lt;&lt;TWINT));
    byte i2c_data = TWDR; 
  TWCR = (1&lt;&lt;TWINT) | (1&lt;&lt;TWEN);
  while (!(TWCR &amp; (1&lt;&lt;TWINT)));
 
   TWCR = (1&lt;&lt;TWINT)|(1&lt;&lt;TWEN)|(1&lt;&lt;TWSTO); // СТОП
  return i2c_data;
  }   

 void i2c_write(byte i2c_addr, byte i2c_reg, byte i2c_dat){
   TWCR = (1&lt;&lt;TWINT)|(1&lt;&lt;TWSTA)|(1&lt;&lt;TWEN);  // START
  while (!(TWCR &amp; (1&lt;&lt;TWINT)));
   TWDR = i2c_addr &lt;&lt; 1;
   TWCR = (1&lt;&lt;TWINT) | (1&lt;&lt;TWEN);
  while (!(TWCR &amp; (1&lt;&lt;TWINT)));
   TWDR = i2c_reg;
   TWCR = (1&lt;&lt;TWINT) | (1&lt;&lt;TWEN);
  while (!(TWCR &amp; (1&lt;&lt;TWINT)));
   TWDR = i2c_dat;
   TWCR = (1&lt;&lt;TWINT) | (1&lt;&lt;TWEN);
  while (!(TWCR &amp; (1&lt;&lt;TWINT)));
   TWCR = (1&lt;&lt;TWINT)|(1&lt;&lt;TWEN)|(1&lt;&lt;TWSTO); // СТОП
  } 

 void i2c_write_1bit(byte i2c_addr, byte i2c_reg){
   TWCR = (1&lt;&lt;TWINT)|(1&lt;&lt;TWSTA)|(1&lt;&lt;TWEN);  // START
  while (!(TWCR &amp; (1&lt;&lt;TWINT)));
   TWDR = i2c_addr &lt;&lt; 1;
   TWCR = (1&lt;&lt;TWINT) | (1&lt;&lt;TWEN);
  while (!(TWCR &amp; (1&lt;&lt;TWINT)));
   TWDR = i2c_reg;
   TWCR = (1&lt;&lt;TWINT) | (1&lt;&lt;TWEN);
  while (!(TWCR &amp; (1&lt;&lt;TWINT)));
   TWCR = (1&lt;&lt;TWINT)|(1&lt;&lt;TWEN)|(1&lt;&lt;TWSTO); // СТОП
  }   

void set_time(byte years, byte days, byte monts, byte datas, byte hours ,byte minute, byte second){
    if(second &lt; 255){i2c_write(ADDR_DS3231,0x00,(second/10&lt;&lt;4)+second%10);}
    if(minute &lt; 255){i2c_write(ADDR_DS3231,0x01,(minute/10&lt;&lt;4)+minute%10);} 
    if(hours &lt; 255){i2c_write(ADDR_DS3231,0x02,(hours/10&lt;&lt;4)+hours%10);}
    if(days &lt; 255){i2c_write(ADDR_DS3231,0x03,days);}
    if(datas &lt; 255){i2c_write(ADDR_DS3231,0x04,(datas/10&lt;&lt;4)+datas%10);}
    if(monts &lt; 255){i2c_write(ADDR_DS3231,0x05,(monts/10&lt;&lt;4)+monts%10);}
    if(years &lt; 255){i2c_write(ADDR_DS3231,0x06,(years/10&lt;&lt;4)+years%10);}
  }      </code></pre></div>]]></content>
			<author>
				<name><![CDATA[liman324]]></name>
				<uri>http://forum.rcl-radio.ru/profile.php?id=2</uri>
			</author>
			<updated>2022-11-30T09:01:55Z</updated>
			<id>http://forum.rcl-radio.ru/viewtopic.php?pid=7092#p7092</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[atmega8_in-16]]></title>
			<link rel="alternate" href="http://forum.rcl-radio.ru/viewtopic.php?pid=7090#p7090" />
			<content type="html"><![CDATA[<p><span class="postimg"><img src="http://forum.rcl-radio.ru/uploads/images/2022/11/aa2ea82d0242098a4f47cca71503d039.gif" alt="http://forum.rcl-radio.ru/uploads/images/2022/11/aa2ea82d0242098a4f47cca71503d039.gif" /></span> </p><br /><div class="codebox"><pre><code>#define ADDR_DS3231   0b1101000
#define CPU_F         12000000 // Clock Speed 
#define SCL_F         100000 // // I2C Speed


unsigned long times_sec,millis_time;
int i,segm,times,hh,mm;
byte a[4],an,sec,min,hour,set;

void setup() {
  TWBR = (((CPU_F)/(SCL_F)-16 )/2) ;
  TWSR = 0;
  DDRB &amp;=~(1 &lt;&lt; PB0);DDRD &amp;=~(1&lt;&lt;PD6)|(1&lt;&lt;PD7);
  DDRB |= (1 &lt;&lt; PB1);// pin 15 output pwm
  DDRB |= (1 &lt;&lt; PB2);// pin 16 output second in-3
  DDRC |= (1 &lt;&lt; PC0)|(1 &lt;&lt; PC1)|(1 &lt;&lt; PC2)|(1 &lt;&lt; PC3);// H0-H3 ANOD
  DDRD |= (1 &lt;&lt; PD0)|(1 &lt;&lt; PD1)|(1 &lt;&lt; PD2)|(1 &lt;&lt; PD3);// 1 2 4 8 K155ID1
  PORTB |= (1 &lt;&lt; PB0);PORTD |= (1 &lt;&lt; PD6)|(1 &lt;&lt; PD7);
// F=12000000/512/1/1=23437.5 Hz
  TCCR1A = 0;
  TCCR1B = 0;
  TCNT1 = 0;
  TCCR1A |= (1&lt;&lt;COM1A1);
  TCCR1B |= (1&lt;&lt;WGM12);
  TCCR1A |= (1&lt;&lt;WGM11);
  TCCR1B |= (1 &lt;&lt; CS10); 
  ICR1 = 511; 
  OCR1A = 505; //  Ureg_180V 
// (12000000/((233+1)x256))=200.32051282051 Hz
  OCR2 = 233;
  TCCR2 |= (1 &lt;&lt; WGM21); 
  TCCR2 |= (1 &lt;&lt; CS22) | (1 &lt;&lt; CS21);
  TIMSK |= (1 &lt;&lt; OCIE2);
// set time
 //  set_time(21,1,12,26,8,9,0);// год 00-99, ДН 1-7 (1=ВС), месяц 1-12, дата 1-31, час 0-23, минуты 0-59, секунды 0-59  
}


void loop(){
/// read time  
   sec =  (i2c_read_1bit(ADDR_DS3231,0) &amp; 0x0F) + (((i2c_read_1bit(ADDR_DS3231,0) &amp; 0x70) &gt;&gt; 4) * 10);
   min =  (i2c_read_1bit(ADDR_DS3231,1) &amp; 0x0F) + (((i2c_read_1bit(ADDR_DS3231,1) &amp; 0x70) &gt;&gt; 4) * 10);
   hour = ((i2c_read_1bit(ADDR_DS3231,2) &amp; 0x0F) + ((i2c_read_1bit(ADDR_DS3231,2) &amp; 0x70) &gt;&gt; 4) * 10);
// temper = (i2c_read_1bit(ADDR_DS3231,0x11)*100 + ((i2c_read_1bit(ADDR_DS3231,0x12) &amp; 0b11000000) &gt;&gt; 6)*25) ;  

/// set time
  hh=hour;mm=min;
  if(((PINB &gt;&gt; PB0) &amp; 1) == 0){set++;if(set&gt;2){set=0;}_delay_ms(200);}  
   if(set==1&amp;&amp;((PIND &gt;&gt; PD6)&amp;1)==0){hh++;if(hh&gt;23){hh=23;}set_time(21,1,12,26,hh,mm,0);_delay_ms(100);}
   if(set==1&amp;&amp;((PIND &gt;&gt; PD7)&amp;1)==0){hh--;if(hh&lt;0){hh=0;}set_time(21,1,12,26,hh,mm,0);_delay_ms(100);}
   if(set==2&amp;&amp;((PIND &gt;&gt; PD6)&amp;1)==0){mm++;if(mm&gt;59){mm=59;}set_time(21,1,12,26,hh,mm,0);_delay_ms(100);}
   if(set==2&amp;&amp;((PIND &gt;&gt; PD7)&amp;1)==0){mm--;if(mm&lt;0){mm=0;}set_time(21,1,12,26,hh,mm,0);_delay_ms(100);}

/// output sec in-3  
  if(millis_time-times_sec&lt;100){PORTB |= (1 &lt;&lt; PB2);}
  if(millis_time-times_sec&gt;=100){PORTB &amp;=~(1 &lt;&lt; PB2);}
  if(millis_time-times_sec&gt;200){times_sec=millis_time;}

  times = hour*100+min;

  if(min == 30 &amp;&amp; sec &lt; 10 &amp;&amp; set == 0){
    switch(sec){
      case 0: times=0;break;
      case 1: times=1111;break;
      case 2: times=2222;break;
      case 3: times=3333;break;
      case 4: times=4444;break;
      case 5: times=5555;break;
      case 6: times=6666;break;
      case 7: times=7777;break;
      case 8: times=8888;break;
      case 9: times=9999;break;
      }
    }
  
  a[0]=times/1000%10;
  a[1]=times/100%10;
  a[2]=times/10%10;
  a[3]=times%10;
  
//_delay_ms(50);
}

void segment(){
  switch(segm){                                                                 
    case 0: PORTD &amp;= ~(1 &lt;&lt; PD3);PORTD &amp;=~ (1 &lt;&lt; PD2);PORTD &amp;= ~(1 &lt;&lt; PD1);PORTD &amp;= ~(1 &lt;&lt; PD0);break;     // DEC 0 = 0b0000
    case 1: PORTD &amp;= ~(1 &lt;&lt; PD3);PORTD &amp;=~ (1 &lt;&lt; PD2);PORTD &amp;= ~(1 &lt;&lt; PD1);PORTD |=(1 &lt;&lt; PD0); break;    // DEC 1 = 0b0001
    case 2: PORTD &amp;= ~(1 &lt;&lt; PD3);PORTD &amp;=~ (1 &lt;&lt; PD2);PORTD |= (1 &lt;&lt; PD1);PORTD &amp;= ~(1 &lt;&lt; PD0);break;    // DEC 2 = 0b0010
    case 3: PORTD &amp;= ~(1 &lt;&lt; PD3);PORTD &amp;=~ (1 &lt;&lt; PD2);PORTD |= (1 &lt;&lt; PD1);PORTD |= (1 &lt;&lt; PD0);break;   // DEC 3 = 0b0011
    case 4: PORTD &amp;= ~(1 &lt;&lt; PD3);PORTD |= (1 &lt;&lt; PD2);PORTD &amp;= ~(1 &lt;&lt; PD1);PORTD &amp;= ~(1 &lt;&lt; PD0);break;    // DEC 4 = 0b0100
    case 5: PORTD &amp;= ~(1 &lt;&lt; PD3);PORTD |= (1 &lt;&lt; PD2);PORTD &amp;= ~(1 &lt;&lt; PD1);PORTD |= (1 &lt;&lt; PD0);break;   // DEC 5 = 0b0101
    case 6: PORTD &amp;= ~(1 &lt;&lt; PD3);PORTD |= (1 &lt;&lt; PD2);PORTD |= (1 &lt;&lt; PD1);PORTD &amp;= ~(1 &lt;&lt; PD0);break;   // DEC 6 = 0b0110
    case 7: PORTD &amp;= ~(1 &lt;&lt; PD3);PORTD |= (1 &lt;&lt; PD2);PORTD |= (1 &lt;&lt; PD1);PORTD |= (1 &lt;&lt; PD0);break;  // DEC 7 = 0b0111
    case 8: PORTD |= (1 &lt;&lt; PD3);PORTD &amp;=~ (1 &lt;&lt; PD2);PORTD &amp;= ~(1 &lt;&lt; PD1);PORTD &amp;= ~(1 &lt;&lt; PD0);break;    // DEC 8 = 0b1000
    case 9: PORTD |= (1 &lt;&lt; PD3);PORTD &amp;=~ (1 &lt;&lt; PD2);PORTD &amp;= ~(1 &lt;&lt; PD1);PORTD |= (1 &lt;&lt; PD0);break;   // DEC 9 = 0b1001
  }}

void anod(){
  switch(an){                                                             
    case 0: PORTC |= (1 &lt;&lt; PC0);PORTC &amp;= ~(1 &lt;&lt; PC1);PORTC &amp;= ~(1 &lt;&lt; PC2);PORTC &amp;= ~(1 &lt;&lt; PC3);break;    
    case 1: PORTC &amp;= ~(1 &lt;&lt; PC0);PORTC |= (1 &lt;&lt; PC1);PORTC &amp;= ~(1 &lt;&lt; PC2);PORTC &amp;= ~(1 &lt;&lt; PC3);break;   
    case 2: PORTC &amp;= ~(1 &lt;&lt; PC0);PORTC &amp;= ~(1 &lt;&lt; PC1);PORTC |= (1 &lt;&lt; PC2);PORTC &amp;= ~(1 &lt;&lt; PC3);break;   
    case 3: PORTC &amp;= ~(1 &lt;&lt; PC0);PORTC &amp;= ~(1 &lt;&lt; PC1);PORTC &amp;= ~(1 &lt;&lt; PC2);PORTC |= (1 &lt;&lt; PC3);break;   
  }}

void cl(){PORTC &amp;= ~(1 &lt;&lt; PC0);PORTC &amp;= ~(1 &lt;&lt; PC1);PORTC &amp;= ~(1 &lt;&lt; PC2);PORTC &amp;= ~(1 &lt;&lt; PC3);}  

ISR(TIMER2_COMP_vect){
  switch(i){
    case 0: segm=a[0]; an=0; cl(); if(set==2){_delay_ms(5);}_delay_ms(1); segment();anod();break;
    case 1: segm=a[1]; an=1; cl(); if(set==2){_delay_ms(5);}_delay_ms(1); segment();anod();break;
    case 2: segm=a[2]; an=2; cl(); if(set==1){_delay_ms(5);}_delay_ms(1); segment();anod();break;
    case 3: segm=a[3]; an=3; cl(); if(set==1){_delay_ms(5);}_delay_ms(1); segment();anod();break;
    }
    i++;if(i&gt;3){i=0;}
    millis_time++;
  }

int i2c_read_i2c_2bit(byte i2c_addr, byte i2c_reg){
   TWCR = (1&lt;&lt;TWINT)|(1&lt;&lt;TWSTA)|(1&lt;&lt;TWEN);  // START
  while (!(TWCR &amp; (1&lt;&lt;TWINT)));
   TWDR = i2c_addr &lt;&lt; 1;
   TWCR = (1&lt;&lt;TWINT) | (1&lt;&lt;TWEN);
  while (!(TWCR &amp; (1&lt;&lt;TWINT)));
   TWDR = i2c_reg;
   TWCR = (1&lt;&lt;TWINT) | (1&lt;&lt;TWEN);
  while (!(TWCR &amp; (1&lt;&lt;TWINT)));
 
   TWCR = (1&lt;&lt;TWINT)|(1&lt;&lt;TWSTA)|(1&lt;&lt;TWEN);  // START
  while (!(TWCR &amp; (1&lt;&lt;TWINT))); 
   TWDR = (i2c_addr &lt;&lt; 1) | 1;
   TWCR = (1&lt;&lt;TWINT) | (1&lt;&lt;TWEN);
  while (!(TWCR &amp; (1&lt;&lt;TWINT)));
 
   TWCR=(1&lt;&lt;TWINT)|(1&lt;&lt;TWEN)|(1&lt;&lt;TWEA); 
  while(~TWCR&amp;(1&lt;&lt;TWINT));
   int i2c_data0 = TWDR; 
 
   TWCR = (1&lt;&lt;TWINT) | (1&lt;&lt;TWEN);
  while(~TWCR&amp;(1&lt;&lt;TWINT));
  int i2c_data1 = TWDR; 
 
   TWCR = (1&lt;&lt;TWINT)|(1&lt;&lt;TWEN)|(1&lt;&lt;TWSTO); // СТОП
  int i2c_data = (i2c_data0&lt;&lt;8)+i2c_data1;
  return i2c_data;
  }  

int i2c_read_1bit(byte i2c_addr, byte i2c_reg){
   TWCR = (1&lt;&lt;TWINT)|(1&lt;&lt;TWSTA)|(1&lt;&lt;TWEN);  // START
  while (!(TWCR &amp; (1&lt;&lt;TWINT)));
   TWDR = i2c_addr &lt;&lt; 1;
   TWCR = (1&lt;&lt;TWINT) | (1&lt;&lt;TWEN);
  while (!(TWCR &amp; (1&lt;&lt;TWINT)));
   TWDR = i2c_reg;
   TWCR = (1&lt;&lt;TWINT) | (1&lt;&lt;TWEN);
  while (!(TWCR &amp; (1&lt;&lt;TWINT)));
 
   TWCR = (1&lt;&lt;TWINT)|(1&lt;&lt;TWSTA)|(1&lt;&lt;TWEN);  // START
  while (!(TWCR &amp; (1&lt;&lt;TWINT))); 
   TWDR = (i2c_addr &lt;&lt; 1) | 1;
   TWCR = (1&lt;&lt;TWINT) | (1&lt;&lt;TWEN);
  while (!(TWCR &amp; (1&lt;&lt;TWINT)));
 
   TWCR = (1&lt;&lt;TWINT)|(1&lt;&lt;TWEN)|(1&lt;&lt;TWEA); 
  while(~TWCR&amp;(1&lt;&lt;TWINT));
    byte i2c_data = TWDR; 
  TWCR = (1&lt;&lt;TWINT) | (1&lt;&lt;TWEN);
  while (!(TWCR &amp; (1&lt;&lt;TWINT)));
 
   TWCR = (1&lt;&lt;TWINT)|(1&lt;&lt;TWEN)|(1&lt;&lt;TWSTO); // СТОП
  return i2c_data;
  }   

 void i2c_write(byte i2c_addr, byte i2c_reg, byte i2c_dat){
   TWCR = (1&lt;&lt;TWINT)|(1&lt;&lt;TWSTA)|(1&lt;&lt;TWEN);  // START
  while (!(TWCR &amp; (1&lt;&lt;TWINT)));
   TWDR = i2c_addr &lt;&lt; 1;
   TWCR = (1&lt;&lt;TWINT) | (1&lt;&lt;TWEN);
  while (!(TWCR &amp; (1&lt;&lt;TWINT)));
   TWDR = i2c_reg;
   TWCR = (1&lt;&lt;TWINT) | (1&lt;&lt;TWEN);
  while (!(TWCR &amp; (1&lt;&lt;TWINT)));
   TWDR = i2c_dat;
   TWCR = (1&lt;&lt;TWINT) | (1&lt;&lt;TWEN);
  while (!(TWCR &amp; (1&lt;&lt;TWINT)));
   TWCR = (1&lt;&lt;TWINT)|(1&lt;&lt;TWEN)|(1&lt;&lt;TWSTO); // СТОП
  } 

 void i2c_write_1bit(byte i2c_addr, byte i2c_reg){
   TWCR = (1&lt;&lt;TWINT)|(1&lt;&lt;TWSTA)|(1&lt;&lt;TWEN);  // START
  while (!(TWCR &amp; (1&lt;&lt;TWINT)));
   TWDR = i2c_addr &lt;&lt; 1;
   TWCR = (1&lt;&lt;TWINT) | (1&lt;&lt;TWEN);
  while (!(TWCR &amp; (1&lt;&lt;TWINT)));
   TWDR = i2c_reg;
   TWCR = (1&lt;&lt;TWINT) | (1&lt;&lt;TWEN);
  while (!(TWCR &amp; (1&lt;&lt;TWINT)));
   TWCR = (1&lt;&lt;TWINT)|(1&lt;&lt;TWEN)|(1&lt;&lt;TWSTO); // СТОП
  }   

void set_time(byte years, byte days, byte monts, byte datas, byte hours ,byte minute, byte second){
    if(second &lt; 255){i2c_write(ADDR_DS3231,0x00,(second/10&lt;&lt;4)+second%10);}
    if(minute &lt; 255){i2c_write(ADDR_DS3231,0x01,(minute/10&lt;&lt;4)+minute%10);} 
    if(hours &lt; 255){i2c_write(ADDR_DS3231,0x02,(hours/10&lt;&lt;4)+hours%10);}
    if(days &lt; 255){i2c_write(ADDR_DS3231,0x03,days);}
    if(datas &lt; 255){i2c_write(ADDR_DS3231,0x04,(datas/10&lt;&lt;4)+datas%10);}
    if(monts &lt; 255){i2c_write(ADDR_DS3231,0x05,(monts/10&lt;&lt;4)+monts%10);}
    if(years &lt; 255){i2c_write(ADDR_DS3231,0x06,(years/10&lt;&lt;4)+years%10);}
  }      </code></pre></div>]]></content>
			<author>
				<name><![CDATA[liman324]]></name>
				<uri>http://forum.rcl-radio.ru/profile.php?id=2</uri>
			</author>
			<updated>2022-11-29T07:59:46Z</updated>
			<id>http://forum.rcl-radio.ru/viewtopic.php?pid=7090#p7090</id>
		</entry>
</feed>
