<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[forum.rcl-radio.ru &mdash; Часы на игп-17 (разработка)]]></title>
		<link>http://forum.rcl-radio.ru/viewtopic.php?id=450</link>
		<atom:link href="http://forum.rcl-radio.ru/extern.php?action=feed&amp;tid=450&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «Часы на игп-17 (разработка)».]]></description>
		<lastBuildDate>Sat, 03 Feb 2024 10:35:47 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: Часы на игп-17 (разработка)]]></title>
			<link>http://forum.rcl-radio.ru/viewtopic.php?pid=9363#p9363</link>
			<description><![CDATA[<p>Здравствуйте, Александр. Хотелось бы Вас попросить вот о чем:<br />1. Внести изменения под датчик температуры и давления BMP180.<br />2. Убрать показ даты.<br />3. Чтоб смена показа температуры менялась на показания давления каждые, скажем, 15 секунд.<br />С уважением.</p>]]></description>
			<author><![CDATA[null@example.com (Lexx7)]]></author>
			<pubDate>Sat, 03 Feb 2024 10:35:47 +0000</pubDate>
			<guid>http://forum.rcl-radio.ru/viewtopic.php?pid=9363#p9363</guid>
		</item>
		<item>
			<title><![CDATA[Re: Часы на игп-17 (разработка)]]></title>
			<link>http://forum.rcl-radio.ru/viewtopic.php?pid=9317#p9317</link>
			<description><![CDATA[<p>мерцание также не пропало, значит, единственный вариант выносного датчика - LM75.<br />Большое спасибо за интересный и красивый проект, индикатор выглядит шикарно. Надеюсь на дальнейшее развитие проекта</p>]]></description>
			<author><![CDATA[null@example.com (aprdetali)]]></author>
			<pubDate>Sun, 21 Jan 2024 15:03:12 +0000</pubDate>
			<guid>http://forum.rcl-radio.ru/viewtopic.php?pid=9317#p9317</guid>
		</item>
		<item>
			<title><![CDATA[Re: Часы на игп-17 (разработка)]]></title>
			<link>http://forum.rcl-radio.ru/viewtopic.php?pid=9316#p9316</link>
			<description><![CDATA[<div class="codebox"><pre><code>// ATMEGA8535 16 MHZ
#define ADDR    0x68
#define CPU_F   16000000 // Clock Speed
#define SCL_F   400000 // // I2C Speed
#define TEMP_KORR 20 // -2гр.Цельсия

#include &lt;avr/io.h&gt;
#include &lt;util/delay.h&gt;

byte a[16],an,segm,i;
bool w=1,w1;
byte sec,min_,hour,datat,mont,year;
int temper,sett,times;
int set_hour,set_min,set_sec,set_datat,set_mont,set_year;


void setup() {
  DDRA = 0xFF;
  DDRB = 0xFF;
  DDRC = 0xFF;
  DDRD |= (1 &lt;&lt; PD6)|(1 &lt;&lt; PD7);
  PORTD |= (1 &lt;&lt; PD2)|(1 &lt;&lt; PD3)|(1 &lt;&lt; PD4);
  TWBR = (((CPU_F)/(SCL_F)-16 )/2) ;
  TWSR = 0;
  DDRD |= (1 &lt;&lt; PD5); // PWM +180V TIMER_1
  cli();
// TIMER_2  F = 16000000/128/100=1250 Hz (800 uS)
  OCR2 = 100;
  TCCR2 |= (1 &lt;&lt; WGM21);
  TCCR2 |= (1 &lt;&lt; CS22) | (1 &lt;&lt; CS20);
  TIMSK |= (1 &lt;&lt; OCIE2);
  sei();
 // set_time(22,2,2,4,22,23,0);// год 00-99, ДН 1-7 (1=ВС), месяц 1-12, дата 1-31, час 0-23, минуты 0-59, секунды 0-59
  _delay_ms(200); 
}   

void loop() { 
  datat = ((i2c_read(ADDR,4) &amp; 0x0F) + ((i2c_read(ADDR,4) &amp; 0x70) &gt;&gt; 4) * 10);
  mont = ((i2c_read(ADDR,5) &amp; 0x0F) + ((i2c_read(ADDR,5) &amp; 0x70) &gt;&gt; 4) * 10);
  year = ((i2c_read(ADDR,6) &amp; 0x0F) + ((i2c_read(ADDR,6) &amp; 0x70) &gt;&gt; 4) * 10); 
  hour = (i2c_read(ADDR,2) &amp; 0x0F) + (((i2c_read(ADDR,2) &amp; 0x70) &gt;&gt; 4) * 10);
  min_ =  (i2c_read(ADDR,1) &amp; 0x0F) + (((i2c_read(ADDR,1) &amp; 0x70) &gt;&gt; 4) * 10);
  if(sec==10||sec==40) {temper = read_temp()-TEMP_KORR ;}
  sec =  (i2c_read(ADDR,0) &amp; 0x0F) + (((i2c_read(ADDR,0) &amp; 0x70) &gt;&gt; 4) * 10);
  set_year = year;set_mont = mont;set_datat = datat;set_hour = hour;set_min = min_;set_sec = sec;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

/// BUTTON /////////////  
  if(((PIND &gt;&gt; PD2) &amp; 1) == 0){sett++;times=0;if(sett&gt;6){sett=0;}wr();_delay_ms(300);}
  
  if(((PIND &gt;&gt; PD3) &amp; 1) == 0 &amp;&amp; sett==1){set_hour++;w1=1; if(set_hour&gt;23){set_hour=23;} set_time(set_year,0,set_mont,set_datat,set_hour,set_min,set_sec);wr();_delay_ms(300);}
  if(((PIND &gt;&gt; PD4) &amp; 1) == 0 &amp;&amp; sett==1){set_hour--;w1=1; if(set_hour&lt;0){set_hour=0;} set_time(set_year,0,set_mont,set_datat,set_hour,set_min,set_sec);wr();_delay_ms(300);}

  if(((PIND &gt;&gt; PD3) &amp; 1) == 0 &amp;&amp; sett==2){set_min++;w1=1; if(set_mont&gt;59){set_min=59;} set_time(set_year,0,set_mont,set_datat,set_hour,set_min,set_sec);wr();_delay_ms(300);}
  if(((PIND &gt;&gt; PD4) &amp; 1) == 0 &amp;&amp; sett==2){set_min--;w1=1; if(set_mont&lt;0){set_min=0;} set_time(set_year,0,set_mont,set_datat,set_hour,set_min,set_sec);wr();_delay_ms(300);}

  if(((PIND &gt;&gt; PD3) &amp; 1) == 0 &amp;&amp; sett==3){set_sec=0;w1=1; set_time(set_year,0,set_mont,set_datat,set_hour,set_min,set_sec);wr();_delay_ms(300);}
  if(((PIND &gt;&gt; PD4) &amp; 1) == 0 &amp;&amp; sett==3){set_sec=0;w1=1; set_time(set_year,0,set_mont,set_datat,set_hour,set_min,set_sec);wr();_delay_ms(300);}

  if(((PIND &gt;&gt; PD3) &amp; 1) == 0 &amp;&amp; sett==4){set_datat++;w1=1; if(set_datat&gt;31){set_datat=31;} set_time(set_year,0,set_mont,set_datat,set_hour,set_min,set_sec);wr();_delay_ms(300);}
  if(((PIND &gt;&gt; PD4) &amp; 1) == 0 &amp;&amp; sett==4){set_datat--;w1=1; if(set_datat&lt;0){set_datat=0;} set_time(set_year,0,set_mont,set_datat,set_hour,set_min,set_sec);wr();_delay_ms(300);}

  if(((PIND &gt;&gt; PD3) &amp; 1) == 0 &amp;&amp; sett==5){set_mont++;w1=1; if(set_mont&gt;12){set_mont=12;} set_time(set_year,0,set_mont,set_datat,set_hour,set_min,set_sec);wr();_delay_ms(300);}
  if(((PIND &gt;&gt; PD4) &amp; 1) == 0 &amp;&amp; sett==5){set_mont--;w1=1; if(set_mont&lt;0){set_mont=0;} set_time(set_year,0,set_mont,set_datat,set_hour,set_min,set_sec);wr();_delay_ms(300);} 

  if(((PIND &gt;&gt; PD3) &amp; 1) == 0 &amp;&amp; sett==6){set_year++;w1=1; if(set_year&gt;50){set_year=50;} set_time(set_year,0,set_mont,set_datat,set_hour,set_min,set_sec);wr();_delay_ms(300);}
  if(((PIND &gt;&gt; PD4) &amp; 1) == 0 &amp;&amp; sett==6){set_year--;w1=1; if(set_year&lt;22){set_year=22;} set_time(set_year,0,set_mont,set_datat,set_hour,set_min,set_sec);wr();_delay_ms(300);}      
 
 if(sett==0){
 if(min_==30&amp;&amp;sec&lt;10){a[0]=sec%10+20;a[1]=sec%10+20;a[2]=sec%10+20;a[3]=sec%10+20;a[4]=sec%10+20;a[5]=sec%10+20;a[6]=sec%10+20;a[7]=sec%10+20;
  a[8]=sec%10+20;a[9]=sec%10+20;a[10]=sec%10+20;a[11]=sec%10+20;a[12]=sec%10+20;a[13]=sec%10+20;a[14]=sec%10+20;a[15]=sec%10+20;}
 else{ 
  if((sec&gt;=10&amp;&amp;sec&lt;=20)||(sec&gt;=40&amp;&amp;sec&lt;=50)){
  a[0]=14;
  a[1]=13;
  a[2]=temper%10;
  a[3]=temper/10%10+20;
  a[4]=temper/100;
  a[5]=10;
  a[6]=12;  
  }
  else{
  a[0]=10;
  a[1]=year%10;
  a[2]=year/10;
  a[3]=mont%10+20;
  a[4]=mont/10;
  a[5]=datat%10+20;
  a[6]=datat/10;
  }
  a[7]=10;
  a[8]=sec%10;
  a[9]=sec/10;
  a[10]=11;
  a[11]=min_%10;
  a[12]=min_/10;
  a[13]=11;
  a[14]=hour%10;
  a[15]=hour/10;
}
}// sett=0

 if(sett&gt;0){
  a[0]=10;
  if(sett==6){if(times&lt;=500||w1==1){w1=0;a[1]=year%10+20;a[2]=year/10;}else{a[1]=11;a[2]=11;}}
  if(sett==5){if(times&lt;=500||w1==1){w1=0;a[3]=mont%10+20;a[4]=mont/10;}else{a[3]=11;a[4]=11;}}
  if(sett==4){if(times&lt;=500||w1==1){w1=0;a[5]=datat%10+20;a[6]=datat/10;}else{a[5]=11;a[6]=11;}}
  a[7]=10;
  if(sett==3){if(times&lt;=500||w1==1){w1=0;a[8]=sec%10;a[9]=sec/10;}else{a[8]=11;a[9]=11;}}
  a[10]=11;
  if(sett==2){if(times&lt;=500||w1==1){w1=0;a[11]=min_%10;a[12]=min_/10;}else{a[11]=11;a[12]=11;}}
  a[13]=11;
  if(sett==1){if(times&lt;=500||w1==1){w1=0;a[14]=hour%10;a[15]=hour/10;}else{a[14]=11;a[15]=11;}}
  if(sett!=3){a[8]=sec%10;a[9]=sec/10;}
}// sett&gt;0

if(sett==0){_delay_ms(100);}
 }

void wr(){a[0]=10;a[1]=year%10; a[2]=year/10;a[3]=mont%10+20;a[4]=mont/10;a[5]=datat%10+20;a[6]=datat/10;a[7]=10;a[8]=sec%10;
a[9]=sec/10;a[10]=11;a[11]=min_%10;a[12]=min_/10;a[13]=11;a[14]=hour%10;a[15]=hour/10;}


ISR(TIMER2_COMP_vect){
  switch(i){
    case 0:  segm=a[0];  an=16;  anod(); _delay_us(600); segment(); if(a[0]==10)an=16;else an=0;  anod(); break;
    case 1:  segm=a[1];  an=16;  anod(); _delay_us(600); segment(); if(a[1]==10)an=16;else an=1;  anod(); break;
    case 2:  segm=a[2];  an=16;  anod(); _delay_us(600); segment(); if(a[2]==10)an=16;else an=2;  anod(); break;
    case 3:  segm=a[3];  an=16;  anod(); _delay_us(600); segment(); if(a[3]==10)an=16;else an=3;  anod(); break;
    case 4:  segm=a[4];  an=16;  anod(); _delay_us(600); segment(); if(a[4]==10)an=16;else an=4;  anod(); break;
    case 5:  segm=a[5];  an=16;  anod(); _delay_us(600); segment(); if(a[5]==10)an=16;else an=5;  anod(); break;
    case 6:  segm=a[6];  an=16;  anod(); _delay_us(600); segment(); if(a[6]==10)an=16;else an=6;  anod(); break;
    case 7:  segm=a[7];  an=16;  anod(); _delay_us(600); segment(); if(a[7]==10)an=16;else an=7;  anod(); break;
    case 8:  segm=a[8];  an=16;  anod(); _delay_us(400); segment(); an=8;  anod(); break;
    case 9:  segm=a[9];  an=16;  anod(); _delay_us(400); segment(); an=9;  anod(); break;
   case 10:  segm=a[10]; an=16;  anod(); _delay_us(400); segment(); an=10; anod(); break;
   case 11:  segm=a[11]; an=16;  anod(); _delay_us(400); segment(); an=11; anod(); break;
   case 12:  segm=a[12]; an=16;  anod(); _delay_us(400); segment(); an=12; anod(); break;
   case 13:  segm=a[13]; an=16;  anod(); _delay_us(400); segment(); an=13; anod(); break;
   case 14:  segm=a[14]; an=16;  anod(); _delay_us(400); segment(); an=14; anod(); break;
   case 15:  segm=a[15]; an=16;  anod(); _delay_us(400); segment(); an=15; anod(); break;
    }i++;if(i&gt;15){i=0;}times++;if(times&gt;600){times=0;}}

void segment(){                                                                
   switch(segm){                                                                 
             //       GECDXBFA
    case 0: PORTA = 0b01110111;break; 
    case 1: PORTA = 0b00100100;break; 
    case 2: PORTA = 0b11010101;break; 
    case 3: PORTA = 0b10110101;break; 
    case 4: PORTA = 0b10100110;break; 
    case 5: PORTA = 0b10110011;break; 
    case 6: PORTA = 0b11110011;break; 
    case 7: PORTA = 0b00100101;break; 
    case 8: PORTA = 0b11110111;break;          
    case 9: PORTA = 0b10110111;break;
              //       GECDXBFA
    case 20: PORTA = 0b01111111;break; 
    case 21: PORTA = 0b00101100;break; 
    case 22: PORTA = 0b11011101;break; 
    case 23: PORTA = 0b10111101;break; 
    case 24: PORTA = 0b10101110;break; 
    case 25: PORTA = 0b10111011;break; 
    case 26: PORTA = 0b11111011;break; 
    case 27: PORTA = 0b00101101;break; 
    case 28: PORTA = 0b11111111;break;          
    case 29: PORTA = 0b10111111;break;
              //       GECDXBFA
    case 10: PORTA = 0b00000000;break; // пусто 
    case 11: PORTA = 0b10000000;break; // -
    case 12: PORTA = 0b11010010;break; // t
    case 13: PORTA = 0b10000111;break; // гр
    case 14: PORTA = 0b01010011;break; // C
  }}
    

void anod(){
 switch(an){                                                             
    case 0: PORTC &amp;=~(1&lt;&lt;PC7);PORTB |=(1&lt;&lt;PB0);break;
    case 1: PORTB &amp;=~(1&lt;&lt;PB0);PORTB |=(1&lt;&lt;PB1);break; 
    case 2: PORTB &amp;=~(1&lt;&lt;PB1);PORTB |=(1&lt;&lt;PB2);break; 
    case 3: PORTB &amp;=~(1&lt;&lt;PB2);PORTB |=(1&lt;&lt;PB3);break; 
    case 4: PORTB &amp;=~(1&lt;&lt;PB3);PORTB |=(1&lt;&lt;PB4);break; 
    case 5: PORTB &amp;=~(1&lt;&lt;PB4);PORTB |=(1&lt;&lt;PB5);break; 
    case 6: PORTB &amp;=~(1&lt;&lt;PB5);PORTB |=(1&lt;&lt;PB6);break; 
    case 7: PORTB &amp;=~(1&lt;&lt;PB6);PORTB |=(1&lt;&lt;PB7);break;  
    case 8: PORTB &amp;=~(1&lt;&lt;PB7);PORTD |=(1&lt;&lt;PD6);break;
    case 9: PORTD &amp;=~(1&lt;&lt;PD6);PORTD |=(1&lt;&lt;PD7);break; 
   case 10: PORTD &amp;=~(1&lt;&lt;PD7);PORTC |=(1&lt;&lt;PC2);break; 
   case 11: PORTC &amp;=~(1&lt;&lt;PC2);PORTC |=(1&lt;&lt;PC3);break; 
   case 12: PORTC &amp;=~(1&lt;&lt;PC3);PORTC |=(1&lt;&lt;PC4);break; 
   case 13: PORTC &amp;=~(1&lt;&lt;PC4);PORTC |=(1&lt;&lt;PC5);break; 
   case 14: PORTC &amp;=~(1&lt;&lt;PC5);PORTC |=(1&lt;&lt;PC6);break; 
   case 15: PORTC &amp;=~(1&lt;&lt;PC6);PORTC |=(1&lt;&lt;PC7);break;       
   case 16: PORTB &amp;=~(1&lt;&lt;PB0);PORTB &amp;=~(1&lt;&lt;PB1);PORTB &amp;=~(1&lt;&lt;PB2);PORTB &amp;=~(1&lt;&lt;PB3);PORTB &amp;=~(1&lt;&lt;PB4);PORTB &amp;=~(1&lt;&lt;PB5);PORTB &amp;=~(1&lt;&lt;PB6);PORTB &amp;=~(1&lt;&lt;PB7);
   PORTD &amp;=~(1&lt;&lt;PD6);PORTD &amp;=~(1&lt;&lt;PD7);PORTC &amp;=~(1&lt;&lt;PC2);PORTC &amp;=~(1&lt;&lt;PC3);PORTC &amp;=~(1&lt;&lt;PC4);PORTC &amp;=~(1&lt;&lt;PC5);PORTC &amp;=~(1&lt;&lt;PC6);PORTC &amp;=~(1&lt;&lt;PC7);break;                                                     
  }} 

byte i2c_read(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);
  while (!(TWCR &amp; (1&lt;&lt;TWINT)));
   byte i2c_data = TWDR;  
   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 set_time(byte years, byte days, byte monts, byte datas, byte hours ,byte minute, byte second){
    if(second &lt; 255){i2c_write(ADDR,0x00,(second/10&lt;&lt;4)+second%10);}
    if(minute &lt; 255){i2c_write(ADDR,0x01,(minute/10&lt;&lt;4)+minute%10);} 
    if(hours &lt; 255){i2c_write(ADDR,0x02,(hours/10&lt;&lt;4)+hours%10);}
    if(days &lt; 255){i2c_write(ADDR,0x03,days);}
    if(datas &lt; 255){i2c_write(ADDR,0x04,(datas/10&lt;&lt;4)+datas%10);}
    if(monts &lt; 255){i2c_write(ADDR,0x05,(monts/10&lt;&lt;4)+monts%10);}
    if(years &lt; 255){i2c_write(ADDR,0x06,(years/10&lt;&lt;4)+years%10);}
  } 

// reset
uint8_t therm_reset(){
    uint8_t i;
    PORTD &amp;= ~(1 &lt;&lt; PD0);
    DDRD |= (1 &lt;&lt; PD0);
    _delay_us(480);  
    DDRD &amp;= ~(1 &lt;&lt; PD0);
    _delay_us(60);
    i=((PIND &gt;&gt; PD0) &amp; 1);
    _delay_us(420);
    return i;
}
// write bit
void therm_write_bit(uint8_t bit){
    PORTD &amp;= ~(1 &lt;&lt; PD0);
    DDRD |= (1 &lt;&lt; PD0);
    _delay_us(1);
    if(bit) DDRD &amp;= ~(1 &lt;&lt; PD0);
    _delay_us(60);
    DDRD &amp;= ~(1 &lt;&lt; PD0);
}
// read bit
uint8_t therm_read_bit(void){
    uint8_t bit=0;
    PORTD &amp;= ~(1 &lt;&lt; PD0);
    DDRD |= (1 &lt;&lt; PD0);
    _delay_us(1);
    DDRD &amp;= ~(1 &lt;&lt; PD0);
    _delay_us(14);
    if(PIND &amp; (1 &lt;&lt; PD0)) bit=1;
    _delay_us(45);
    return bit;
}
 
// read byte
uint8_t therm_read_byte(void){
    uint8_t i=8, n=0;
    while(i--){n&gt;&gt;=1;n|=(therm_read_bit()&lt;&lt;7);}
    return n;
}
 
// write byte
void therm_write_byte(uint8_t byte){
    uint8_t i=8;
    while(i--){therm_write_bit(byte&amp;1);byte &gt;&gt;= 1;
    }
}

// read temp
int read_temp(){
    uint8_t temperature[2];
    float temper;
    therm_reset();
    therm_write_byte(0xCC);
    therm_write_byte(0x44);
    while(!therm_read_bit());
    therm_reset();
    therm_write_byte(0xCC);
    therm_write_byte(0xBE);
    temperature[0]=therm_read_byte();
    temperature[1]=therm_read_byte();
    therm_reset();
    temper = (temperature[1] &lt;&lt; 8 | temperature[0])/1.60;
    return (int)temper;
}</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (liman324)]]></author>
			<pubDate>Sun, 21 Jan 2024 14:46:41 +0000</pubDate>
			<guid>http://forum.rcl-radio.ru/viewtopic.php?pid=9316#p9316</guid>
		</item>
		<item>
			<title><![CDATA[Re: Часы на игп-17 (разработка)]]></title>
			<link>http://forum.rcl-radio.ru/viewtopic.php?pid=9315#p9315</link>
			<description><![CDATA[<p>Увы, чуда не случилось<br />Может, эту попробуем:<br /><a href="http://forum.rcl-radio.ru/viewtopic.php?pid=9263#p9263">http://forum.rcl-radio.ru/viewtopic.php?pid=9263#p9263</a></p>]]></description>
			<author><![CDATA[null@example.com (aprdetali)]]></author>
			<pubDate>Sun, 21 Jan 2024 14:43:24 +0000</pubDate>
			<guid>http://forum.rcl-radio.ru/viewtopic.php?pid=9315#p9315</guid>
		</item>
		<item>
			<title><![CDATA[Re: Часы на игп-17 (разработка)]]></title>
			<link>http://forum.rcl-radio.ru/viewtopic.php?pid=9314#p9314</link>
			<description><![CDATA[<div class="codebox"><pre><code>// ATMEGA8535 16 MHZ
#define ADDR    0x68
#define CPU_F   16000000 // Clock Speed
#define SCL_F   400000 // // I2C Speed
#define TEMP_KORR 20 // -2гр.Цельсия

#include &lt;OneWire.h&gt;            // http://rcl-radio.ru/wp-content/uploads/2018/07/OneWire.zip
#include &lt;avr/io.h&gt;
#include &lt;util/delay.h&gt;
OneWire  ds(8); // Вход датчика 18b20  PD8 PIN_14

byte a[16],an,segm,i;
bool w=1,w1;
byte sec,min_,hour,datat,mont,year;
int temper,sett,times;
int set_hour,set_min,set_sec,set_datat,set_mont,set_year;


void setup() {
  DDRA = 0xFF;
  DDRB = 0xFF;
  DDRC = 0xFF;
  DDRD |= (1 &lt;&lt; PD6)|(1 &lt;&lt; PD7);
  PORTD |= (1 &lt;&lt; PD2)|(1 &lt;&lt; PD3)|(1 &lt;&lt; PD4);
  TWBR = (((CPU_F)/(SCL_F)-16 )/2) ;
  TWSR = 0;
  DDRD |= (1 &lt;&lt; PD5); // PWM +180V TIMER_1
  cli();
// TIMER_2  F = 16000000/128/100=1250 Hz (800 uS)
  OCR2 = 100;
  TCCR2 |= (1 &lt;&lt; WGM21);
  TCCR2 |= (1 &lt;&lt; CS22) | (1 &lt;&lt; CS20);
  TIMSK |= (1 &lt;&lt; OCIE2);

  sei();
 // set_time(22,2,2,4,22,23,0);// год 00-99, ДН 1-7 (1=ВС), месяц 1-12, дата 1-31, час 0-23, минуты 0-59, секунды 0-59
  _delay_ms(200); 
}   

void loop() { 
  datat = ((i2c_read(ADDR,4) &amp; 0x0F) + ((i2c_read(ADDR,4) &amp; 0x70) &gt;&gt; 4) * 10);
  mont = ((i2c_read(ADDR,5) &amp; 0x0F) + ((i2c_read(ADDR,5) &amp; 0x70) &gt;&gt; 4) * 10);
  year = ((i2c_read(ADDR,6) &amp; 0x0F) + ((i2c_read(ADDR,6) &amp; 0x70) &gt;&gt; 4) * 10); 
  hour = (i2c_read(ADDR,2) &amp; 0x0F) + (((i2c_read(ADDR,2) &amp; 0x70) &gt;&gt; 4) * 10);
  min_ =  (i2c_read(ADDR,1) &amp; 0x0F) + (((i2c_read(ADDR,1) &amp; 0x70) &gt;&gt; 4) * 10);
  if(sec==10||sec==40) {temper = dsRead(0)-TEMP_KORR ;}
  sec =  (i2c_read(ADDR,0) &amp; 0x0F) + (((i2c_read(ADDR,0) &amp; 0x70) &gt;&gt; 4) * 10);
  set_year = year;set_mont = mont;set_datat = datat;set_hour = hour;set_min = min_;set_sec = sec;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

/// BUTTON /////////////  
  if(((PIND &gt;&gt; PD2) &amp; 1) == 0){sett++;times=0;if(sett&gt;6){sett=0;}wr();_delay_ms(300);}
  
  if(((PIND &gt;&gt; PD3) &amp; 1) == 0 &amp;&amp; sett==1){set_hour++;w1=1; if(set_hour&gt;23){set_hour=23;} set_time(set_year,0,set_mont,set_datat,set_hour,set_min,set_sec);wr();_delay_ms(300);}
  if(((PIND &gt;&gt; PD4) &amp; 1) == 0 &amp;&amp; sett==1){set_hour--;w1=1; if(set_hour&lt;0){set_hour=0;} set_time(set_year,0,set_mont,set_datat,set_hour,set_min,set_sec);wr();_delay_ms(300);}

  if(((PIND &gt;&gt; PD3) &amp; 1) == 0 &amp;&amp; sett==2){set_min++;w1=1; if(set_mont&gt;59){set_min=59;} set_time(set_year,0,set_mont,set_datat,set_hour,set_min,set_sec);wr();_delay_ms(300);}
  if(((PIND &gt;&gt; PD4) &amp; 1) == 0 &amp;&amp; sett==2){set_min--;w1=1; if(set_mont&lt;0){set_min=0;} set_time(set_year,0,set_mont,set_datat,set_hour,set_min,set_sec);wr();_delay_ms(300);}

  if(((PIND &gt;&gt; PD3) &amp; 1) == 0 &amp;&amp; sett==3){set_sec=0;w1=1; set_time(set_year,0,set_mont,set_datat,set_hour,set_min,set_sec);wr();_delay_ms(300);}
  if(((PIND &gt;&gt; PD4) &amp; 1) == 0 &amp;&amp; sett==3){set_sec=0;w1=1; set_time(set_year,0,set_mont,set_datat,set_hour,set_min,set_sec);wr();_delay_ms(300);}

  if(((PIND &gt;&gt; PD3) &amp; 1) == 0 &amp;&amp; sett==4){set_datat++;w1=1; if(set_datat&gt;31){set_datat=31;} set_time(set_year,0,set_mont,set_datat,set_hour,set_min,set_sec);wr();_delay_ms(300);}
  if(((PIND &gt;&gt; PD4) &amp; 1) == 0 &amp;&amp; sett==4){set_datat--;w1=1; if(set_datat&lt;0){set_datat=0;} set_time(set_year,0,set_mont,set_datat,set_hour,set_min,set_sec);wr();_delay_ms(300);}

  if(((PIND &gt;&gt; PD3) &amp; 1) == 0 &amp;&amp; sett==5){set_mont++;w1=1; if(set_mont&gt;12){set_mont=12;} set_time(set_year,0,set_mont,set_datat,set_hour,set_min,set_sec);wr();_delay_ms(300);}
  if(((PIND &gt;&gt; PD4) &amp; 1) == 0 &amp;&amp; sett==5){set_mont--;w1=1; if(set_mont&lt;0){set_mont=0;} set_time(set_year,0,set_mont,set_datat,set_hour,set_min,set_sec);wr();_delay_ms(300);} 

  if(((PIND &gt;&gt; PD3) &amp; 1) == 0 &amp;&amp; sett==6){set_year++;w1=1; if(set_year&gt;50){set_year=50;} set_time(set_year,0,set_mont,set_datat,set_hour,set_min,set_sec);wr();_delay_ms(300);}
  if(((PIND &gt;&gt; PD4) &amp; 1) == 0 &amp;&amp; sett==6){set_year--;w1=1; if(set_year&lt;22){set_year=22;} set_time(set_year,0,set_mont,set_datat,set_hour,set_min,set_sec);wr();_delay_ms(300);}      
 
 if(sett==0){
 if(min_==30&amp;&amp;sec&lt;10){a[0]=sec%10+20;a[1]=sec%10+20;a[2]=sec%10+20;a[3]=sec%10+20;a[4]=sec%10+20;a[5]=sec%10+20;a[6]=sec%10+20;a[7]=sec%10+20;
  a[8]=sec%10+20;a[9]=sec%10+20;a[10]=sec%10+20;a[11]=sec%10+20;a[12]=sec%10+20;a[13]=sec%10+20;a[14]=sec%10+20;a[15]=sec%10+20;}
 else{ 
  if((sec&gt;=10&amp;&amp;sec&lt;=20)||(sec&gt;=40&amp;&amp;sec&lt;=50)){
  a[0]=14;
  a[1]=13;
  a[2]=temper%10;
  a[3]=temper/10%10+20;
  a[4]=temper/100;
  a[5]=10;
  a[6]=12;  
  }
  else{
  a[0]=10;
  a[1]=year%10;
  a[2]=year/10;
  a[3]=mont%10+20;
  a[4]=mont/10;
  a[5]=datat%10+20;
  a[6]=datat/10;
  }
  a[7]=10;
  a[8]=sec%10;
  a[9]=sec/10;
  a[10]=11;
  a[11]=min_%10;
  a[12]=min_/10;
  a[13]=11;
  a[14]=hour%10;
  a[15]=hour/10;
}
}// sett=0

 if(sett&gt;0){
  a[0]=10;
  if(sett==6){if(times&lt;=500||w1==1){w1=0;a[1]=year%10+20;a[2]=year/10;}else{a[1]=11;a[2]=11;}}
  if(sett==5){if(times&lt;=500||w1==1){w1=0;a[3]=mont%10+20;a[4]=mont/10;}else{a[3]=11;a[4]=11;}}
  if(sett==4){if(times&lt;=500||w1==1){w1=0;a[5]=datat%10+20;a[6]=datat/10;}else{a[5]=11;a[6]=11;}}
  a[7]=10;
  if(sett==3){if(times&lt;=500||w1==1){w1=0;a[8]=sec%10;a[9]=sec/10;}else{a[8]=11;a[9]=11;}}
  a[10]=11;
  if(sett==2){if(times&lt;=500||w1==1){w1=0;a[11]=min_%10;a[12]=min_/10;}else{a[11]=11;a[12]=11;}}
  a[13]=11;
  if(sett==1){if(times&lt;=500||w1==1){w1=0;a[14]=hour%10;a[15]=hour/10;}else{a[14]=11;a[15]=11;}}
  if(sett!=3){a[8]=sec%10;a[9]=sec/10;}
}// sett&gt;0

if(sett==0){_delay_ms(100);}
 }

void wr(){a[0]=10;a[1]=year%10; a[2]=year/10;a[3]=mont%10+20;a[4]=mont/10;a[5]=datat%10+20;a[6]=datat/10;a[7]=10;a[8]=sec%10;
a[9]=sec/10;a[10]=11;a[11]=min_%10;a[12]=min_/10;a[13]=11;a[14]=hour%10;a[15]=hour/10;}


ISR(TIMER2_COMP_vect){
  switch(i){
    case 0:  segm=a[0];  an=16;  anod(); _delay_us(600); segment(); if(a[0]==10)an=16;else an=0;  anod(); break;
    case 1:  segm=a[1];  an=16;  anod(); _delay_us(600); segment(); if(a[1]==10)an=16;else an=1;  anod(); break;
    case 2:  segm=a[2];  an=16;  anod(); _delay_us(600); segment(); if(a[2]==10)an=16;else an=2;  anod(); break;
    case 3:  segm=a[3];  an=16;  anod(); _delay_us(600); segment(); if(a[3]==10)an=16;else an=3;  anod(); break;
    case 4:  segm=a[4];  an=16;  anod(); _delay_us(600); segment(); if(a[4]==10)an=16;else an=4;  anod(); break;
    case 5:  segm=a[5];  an=16;  anod(); _delay_us(600); segment(); if(a[5]==10)an=16;else an=5;  anod(); break;
    case 6:  segm=a[6];  an=16;  anod(); _delay_us(600); segment(); if(a[6]==10)an=16;else an=6;  anod(); break;
    case 7:  segm=a[7];  an=16;  anod(); _delay_us(600); segment(); if(a[7]==10)an=16;else an=7;  anod(); break;
    case 8:  segm=a[8];  an=16;  anod(); _delay_us(400); segment(); an=8;  anod(); break;
    case 9:  segm=a[9];  an=16;  anod(); _delay_us(400); segment(); an=9;  anod(); break;
   case 10:  segm=a[10]; an=16;  anod(); _delay_us(400); segment(); an=10; anod(); break;
   case 11:  segm=a[11]; an=16;  anod(); _delay_us(400); segment(); an=11; anod(); break;
   case 12:  segm=a[12]; an=16;  anod(); _delay_us(400); segment(); an=12; anod(); break;
   case 13:  segm=a[13]; an=16;  anod(); _delay_us(400); segment(); an=13; anod(); break;
   case 14:  segm=a[14]; an=16;  anod(); _delay_us(400); segment(); an=14; anod(); break;
   case 15:  segm=a[15]; an=16;  anod(); _delay_us(400); segment(); an=15; anod(); break;
    }i++;if(i&gt;15){i=0;}times++;if(times&gt;600){times=0;}}

void segment(){                                                                
   switch(segm){                                                                 
             //       GECDXBFA
    case 0: PORTA = 0b01110111;break; 
    case 1: PORTA = 0b00100100;break; 
    case 2: PORTA = 0b11010101;break; 
    case 3: PORTA = 0b10110101;break; 
    case 4: PORTA = 0b10100110;break; 
    case 5: PORTA = 0b10110011;break; 
    case 6: PORTA = 0b11110011;break; 
    case 7: PORTA = 0b00100101;break; 
    case 8: PORTA = 0b11110111;break;          
    case 9: PORTA = 0b10110111;break;
              //       GECDXBFA
    case 20: PORTA = 0b01111111;break; 
    case 21: PORTA = 0b00101100;break; 
    case 22: PORTA = 0b11011101;break; 
    case 23: PORTA = 0b10111101;break; 
    case 24: PORTA = 0b10101110;break; 
    case 25: PORTA = 0b10111011;break; 
    case 26: PORTA = 0b11111011;break; 
    case 27: PORTA = 0b00101101;break; 
    case 28: PORTA = 0b11111111;break;          
    case 29: PORTA = 0b10111111;break;
              //       GECDXBFA
    case 10: PORTA = 0b00000000;break; // пусто 
    case 11: PORTA = 0b10000000;break; // -
    case 12: PORTA = 0b11010010;break; // t
    case 13: PORTA = 0b10000111;break; // гр
    case 14: PORTA = 0b01010011;break; // C
  }}
    

void anod(){
 switch(an){                                                             
    case 0: PORTC &amp;=~(1&lt;&lt;PC7);PORTB |=(1&lt;&lt;PB0);break;
    case 1: PORTB &amp;=~(1&lt;&lt;PB0);PORTB |=(1&lt;&lt;PB1);break; 
    case 2: PORTB &amp;=~(1&lt;&lt;PB1);PORTB |=(1&lt;&lt;PB2);break; 
    case 3: PORTB &amp;=~(1&lt;&lt;PB2);PORTB |=(1&lt;&lt;PB3);break; 
    case 4: PORTB &amp;=~(1&lt;&lt;PB3);PORTB |=(1&lt;&lt;PB4);break; 
    case 5: PORTB &amp;=~(1&lt;&lt;PB4);PORTB |=(1&lt;&lt;PB5);break; 
    case 6: PORTB &amp;=~(1&lt;&lt;PB5);PORTB |=(1&lt;&lt;PB6);break; 
    case 7: PORTB &amp;=~(1&lt;&lt;PB6);PORTB |=(1&lt;&lt;PB7);break;  
    case 8: PORTB &amp;=~(1&lt;&lt;PB7);PORTD |=(1&lt;&lt;PD6);break;
    case 9: PORTD &amp;=~(1&lt;&lt;PD6);PORTD |=(1&lt;&lt;PD7);break; 
   case 10: PORTD &amp;=~(1&lt;&lt;PD7);PORTC |=(1&lt;&lt;PC2);break; 
   case 11: PORTC &amp;=~(1&lt;&lt;PC2);PORTC |=(1&lt;&lt;PC3);break; 
   case 12: PORTC &amp;=~(1&lt;&lt;PC3);PORTC |=(1&lt;&lt;PC4);break; 
   case 13: PORTC &amp;=~(1&lt;&lt;PC4);PORTC |=(1&lt;&lt;PC5);break; 
   case 14: PORTC &amp;=~(1&lt;&lt;PC5);PORTC |=(1&lt;&lt;PC6);break; 
   case 15: PORTC &amp;=~(1&lt;&lt;PC6);PORTC |=(1&lt;&lt;PC7);break;       
   case 16: PORTB &amp;=~(1&lt;&lt;PB0);PORTB &amp;=~(1&lt;&lt;PB1);PORTB &amp;=~(1&lt;&lt;PB2);PORTB &amp;=~(1&lt;&lt;PB3);PORTB &amp;=~(1&lt;&lt;PB4);PORTB &amp;=~(1&lt;&lt;PB5);PORTB &amp;=~(1&lt;&lt;PB6);PORTB &amp;=~(1&lt;&lt;PB7);
   PORTD &amp;=~(1&lt;&lt;PD6);PORTD &amp;=~(1&lt;&lt;PD7);PORTC &amp;=~(1&lt;&lt;PC2);PORTC &amp;=~(1&lt;&lt;PC3);PORTC &amp;=~(1&lt;&lt;PC4);PORTC &amp;=~(1&lt;&lt;PC5);PORTC &amp;=~(1&lt;&lt;PC6);PORTC &amp;=~(1&lt;&lt;PC7);break;                                                     
  }} 

byte i2c_read(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);
  while (!(TWCR &amp; (1&lt;&lt;TWINT)));
   byte i2c_data = TWDR;  
   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 set_time(byte years, byte days, byte monts, byte datas, byte hours ,byte minute, byte second){
    if(second &lt; 255){i2c_write(ADDR,0x00,(second/10&lt;&lt;4)+second%10);}
    if(minute &lt; 255){i2c_write(ADDR,0x01,(minute/10&lt;&lt;4)+minute%10);} 
    if(hours &lt; 255){i2c_write(ADDR,0x02,(hours/10&lt;&lt;4)+hours%10);}
    if(days &lt; 255){i2c_write(ADDR,0x03,days);}
    if(datas &lt; 255){i2c_write(ADDR,0x04,(datas/10&lt;&lt;4)+datas%10);}
    if(monts &lt; 255){i2c_write(ADDR,0x05,(monts/10&lt;&lt;4)+monts%10);}
    if(years &lt; 255){i2c_write(ADDR,0x06,(years/10&lt;&lt;4)+years%10);}
  } 

float dsRead(byte x) {
  byte data[2], addr[8][8], kol = 0;
  while (ds.search(addr[kol])) {  // поиск датчиков, определение адреса и кол-ва датчиков
    kol++;
  } 
  ds.reset_search();  // Сброс поиска датчика
  ds.reset();         // Инициализация, выполняется сброс шины
  ds.select(addr[x]); // Обращение к датчику по адресу
  ds.write(0x44, 0);  // Измерение температуры с переносом данных в память
  ds.reset();         // Инициализация, выполняется сброс шины
  ds.select(addr[x]); // Обращение к датчику по адресу
  ds.write(0xBE);     // Обращение памяти
  for (byte i=0; i&lt;9; i++) data[i]=ds.read();
  int raw=(data[1]&lt;&lt;8)|data[0];
  float value = (float)raw / 1.60; return value; // Расчет температуры и вывод  
}</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (liman324)]]></author>
			<pubDate>Sun, 21 Jan 2024 14:22:58 +0000</pubDate>
			<guid>http://forum.rcl-radio.ru/viewtopic.php?pid=9314#p9314</guid>
		</item>
		<item>
			<title><![CDATA[Re: Часы на игп-17 (разработка)]]></title>
			<link>http://forum.rcl-radio.ru/viewtopic.php?pid=9313#p9313</link>
			<description><![CDATA[<p>Александр, а можно Вас попросить отключить ШИМ преобразователя в скетче:<br /><a href="http://forum.rcl-radio.ru/viewtopic.php?pid=9255#p9255">http://forum.rcl-radio.ru/viewtopic.php?pid=9255#p9255</a><br />возможно и с 18в20 заработает?</p>]]></description>
			<author><![CDATA[null@example.com (aprdetali)]]></author>
			<pubDate>Sun, 21 Jan 2024 14:21:19 +0000</pubDate>
			<guid>http://forum.rcl-radio.ru/viewtopic.php?pid=9313#p9313</guid>
		</item>
		<item>
			<title><![CDATA[Re: Часы на игп-17 (разработка)]]></title>
			<link>http://forum.rcl-radio.ru/viewtopic.php?pid=9312#p9312</link>
			<description><![CDATA[<p>Отлично, значит просто не хватало ресурсов микроконтроллера.</p>]]></description>
			<author><![CDATA[null@example.com (liman324)]]></author>
			<pubDate>Sun, 21 Jan 2024 14:12:13 +0000</pubDate>
			<guid>http://forum.rcl-radio.ru/viewtopic.php?pid=9312#p9312</guid>
		</item>
		<item>
			<title><![CDATA[Re: Часы на игп-17 (разработка)]]></title>
			<link>http://forum.rcl-radio.ru/viewtopic.php?pid=9311#p9311</link>
			<description><![CDATA[<div class="quotebox"><cite>liman324 пишет:</cite><blockquote><p>2,7 кОм - через него идет напряжение на схему?</p></blockquote></div><p>да</p>]]></description>
			<author><![CDATA[null@example.com (aprdetali)]]></author>
			<pubDate>Sun, 21 Jan 2024 14:12:09 +0000</pubDate>
			<guid>http://forum.rcl-radio.ru/viewtopic.php?pid=9311#p9311</guid>
		</item>
		<item>
			<title><![CDATA[Re: Часы на игп-17 (разработка)]]></title>
			<link>http://forum.rcl-radio.ru/viewtopic.php?pid=9310#p9310</link>
			<description><![CDATA[<p><a href="http://forum.rcl-radio.ru/viewtopic.php?pid=9306#p9306">http://forum.rcl-radio.ru/viewtopic.php?pid=9306#p9306</a><br />ЗАРАБОТАЛО!!!</p>]]></description>
			<author><![CDATA[null@example.com (aprdetali)]]></author>
			<pubDate>Sun, 21 Jan 2024 14:10:47 +0000</pubDate>
			<guid>http://forum.rcl-radio.ru/viewtopic.php?pid=9310#p9310</guid>
		</item>
		<item>
			<title><![CDATA[Re: Часы на игп-17 (разработка)]]></title>
			<link>http://forum.rcl-radio.ru/viewtopic.php?pid=9309#p9309</link>
			<description><![CDATA[<p>2,7 кОм - через него идет напряжение на схему?</p>]]></description>
			<author><![CDATA[null@example.com (liman324)]]></author>
			<pubDate>Sun, 21 Jan 2024 14:08:44 +0000</pubDate>
			<guid>http://forum.rcl-radio.ru/viewtopic.php?pid=9309#p9309</guid>
		</item>
		<item>
			<title><![CDATA[Re: Часы на игп-17 (разработка)]]></title>
			<link>http://forum.rcl-radio.ru/viewtopic.php?pid=9308#p9308</link>
			<description><![CDATA[<p>Да, там на выходе RC-фильтр: 10 мкФ и 2,7 кОм.</p>]]></description>
			<author><![CDATA[null@example.com (aprdetali)]]></author>
			<pubDate>Sun, 21 Jan 2024 14:06:06 +0000</pubDate>
			<guid>http://forum.rcl-radio.ru/viewtopic.php?pid=9308#p9308</guid>
		</item>
		<item>
			<title><![CDATA[Re: Часы на игп-17 (разработка)]]></title>
			<link>http://forum.rcl-radio.ru/viewtopic.php?pid=9307#p9307</link>
			<description><![CDATA[<div class="quotebox"><blockquote><p>Для высоковольтного питания индикатора я использую отдельный источник питания-преобразователь на 34063 с плавной регулировкой величины выходного напряжения.</p></blockquote></div><p>Есть гарантия что нет пульсации напряжения в этом источнике?</p>]]></description>
			<author><![CDATA[null@example.com (liman324)]]></author>
			<pubDate>Sun, 21 Jan 2024 14:02:12 +0000</pubDate>
			<guid>http://forum.rcl-radio.ru/viewtopic.php?pid=9307#p9307</guid>
		</item>
		<item>
			<title><![CDATA[Re: Часы на игп-17 (разработка)]]></title>
			<link>http://forum.rcl-radio.ru/viewtopic.php?pid=9306#p9306</link>
			<description><![CDATA[<p>Тогда я удалю таймер отвечающий за ШИМ источника</p><div class="codebox"><pre><code>// ATMEGA8535 16 MHZ
#define ADDR    0x68
#define CPU_F   16000000 // Clock Speed
#define SCL_F   400000 // // I2C Speed
#define TEMP_KORR 0 // гр.Цельсия

#include &lt;avr/io.h&gt;
#include &lt;util/delay.h&gt;

byte a[16],an,segm,i;
bool w=1,w1;
byte sec,min_,hour,datat,mont,year;
int temper,sett,times;
int set_hour,set_min,set_sec,set_datat,set_mont,set_year;


void setup() {
  DDRA = 0xFF;
  DDRB = 0xFF;
  DDRC = 0xFF;
  DDRD |= (1 &lt;&lt; PD6)|(1 &lt;&lt; PD7);
  PORTD |= (1 &lt;&lt; PD2)|(1 &lt;&lt; PD3)|(1 &lt;&lt; PD4);
  TWBR = (((CPU_F)/(SCL_F)-16 )/2) ;
  TWSR = 0;
  DDRD |= (1 &lt;&lt; PD5); // PWM +180V TIMER_1
  cli();
// TIMER_2  F = 16000000/128/100=1250 Hz (800 uS)
  TCCR2 = 0;
  OCR2 = 100;
  TCCR2 |= (1 &lt;&lt; WGM21);
  TCCR2 |= (1 &lt;&lt; CS22) | (1 &lt;&lt; CS20);
  TIMSK |= (1 &lt;&lt; OCIE2);
  sei();
 // set_time(22,2,2,4,22,23,0);// год 00-99, ДН 1-7 (1=ВС), месяц 1-12, дата 1-31, час 0-23, минуты 0-59, секунды 0-59
  i2c_write(0x48,0x01,0);
  _delay_ms(200); 
}   

void loop() { 
  datat = ((i2c_read(ADDR,4) &amp; 0x0F) + ((i2c_read(ADDR,4) &amp; 0x70) &gt;&gt; 4) * 10);
  mont = ((i2c_read(ADDR,5) &amp; 0x0F) + ((i2c_read(ADDR,5) &amp; 0x70) &gt;&gt; 4) * 10);
  year = ((i2c_read(ADDR,6) &amp; 0x0F) + ((i2c_read(ADDR,6) &amp; 0x70) &gt;&gt; 4) * 10); 
  hour = (i2c_read(ADDR,2) &amp; 0x0F) + (((i2c_read(ADDR,2) &amp; 0x70) &gt;&gt; 4) * 10);
  min_ =  (i2c_read(ADDR,1) &amp; 0x0F) + (((i2c_read(ADDR,1) &amp; 0x70) &gt;&gt; 4) * 10);
  if(sec==10||sec==40) {temper = i2c_read_i2c_2bit(0x48,0)-TEMP_KORR ;}
  sec =  (i2c_read(ADDR,0) &amp; 0x0F) + (((i2c_read(ADDR,0) &amp; 0x70) &gt;&gt; 4) * 10);
  set_year = year;set_mont = mont;set_datat = datat;set_hour = hour;set_min = min_;set_sec = sec;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

/// BUTTON /////////////  
  if(((PIND &gt;&gt; PD2) &amp; 1) == 0){sett++;times=0;if(sett&gt;6){sett=0;}wr();_delay_ms(300);}
  
  if(((PIND &gt;&gt; PD3) &amp; 1) == 0 &amp;&amp; sett==1){set_hour++;w1=1; if(set_hour&gt;23){set_hour=23;} set_time(set_year,0,set_mont,set_datat,set_hour,set_min,set_sec);wr();_delay_ms(300);}
  if(((PIND &gt;&gt; PD4) &amp; 1) == 0 &amp;&amp; sett==1){set_hour--;w1=1; if(set_hour&lt;0){set_hour=0;} set_time(set_year,0,set_mont,set_datat,set_hour,set_min,set_sec);wr();_delay_ms(300);}

  if(((PIND &gt;&gt; PD3) &amp; 1) == 0 &amp;&amp; sett==2){set_min++;w1=1; if(set_mont&gt;59){set_min=59;} set_time(set_year,0,set_mont,set_datat,set_hour,set_min,set_sec);wr();_delay_ms(300);}
  if(((PIND &gt;&gt; PD4) &amp; 1) == 0 &amp;&amp; sett==2){set_min--;w1=1; if(set_mont&lt;0){set_min=0;} set_time(set_year,0,set_mont,set_datat,set_hour,set_min,set_sec);wr();_delay_ms(300);}

  if(((PIND &gt;&gt; PD3) &amp; 1) == 0 &amp;&amp; sett==3){set_sec=0;w1=1; set_time(set_year,0,set_mont,set_datat,set_hour,set_min,set_sec);wr();_delay_ms(300);}
  if(((PIND &gt;&gt; PD4) &amp; 1) == 0 &amp;&amp; sett==3){set_sec=0;w1=1; set_time(set_year,0,set_mont,set_datat,set_hour,set_min,set_sec);wr();_delay_ms(300);}

  if(((PIND &gt;&gt; PD3) &amp; 1) == 0 &amp;&amp; sett==4){set_datat++;w1=1; if(set_datat&gt;31){set_datat=31;} set_time(set_year,0,set_mont,set_datat,set_hour,set_min,set_sec);wr();_delay_ms(300);}
  if(((PIND &gt;&gt; PD4) &amp; 1) == 0 &amp;&amp; sett==4){set_datat--;w1=1; if(set_datat&lt;0){set_datat=0;} set_time(set_year,0,set_mont,set_datat,set_hour,set_min,set_sec);wr();_delay_ms(300);}

  if(((PIND &gt;&gt; PD3) &amp; 1) == 0 &amp;&amp; sett==5){set_mont++;w1=1; if(set_mont&gt;12){set_mont=12;} set_time(set_year,0,set_mont,set_datat,set_hour,set_min,set_sec);wr();_delay_ms(300);}
  if(((PIND &gt;&gt; PD4) &amp; 1) == 0 &amp;&amp; sett==5){set_mont--;w1=1; if(set_mont&lt;0){set_mont=0;} set_time(set_year,0,set_mont,set_datat,set_hour,set_min,set_sec);wr();_delay_ms(300);} 

  if(((PIND &gt;&gt; PD3) &amp; 1) == 0 &amp;&amp; sett==6){set_year++;w1=1; if(set_year&gt;50){set_year=50;} set_time(set_year,0,set_mont,set_datat,set_hour,set_min,set_sec);wr();_delay_ms(300);}
  if(((PIND &gt;&gt; PD4) &amp; 1) == 0 &amp;&amp; sett==6){set_year--;w1=1; if(set_year&lt;22){set_year=22;} set_time(set_year,0,set_mont,set_datat,set_hour,set_min,set_sec);wr();_delay_ms(300);}      
 
 if(sett==0){
 if(min_==30&amp;&amp;sec&lt;10){a[0]=sec%10+20;a[1]=sec%10+20;a[2]=sec%10+20;a[3]=sec%10+20;a[4]=sec%10+20;a[5]=sec%10+20;a[6]=sec%10+20;a[7]=sec%10+20;
  a[8]=sec%10+20;a[9]=sec%10+20;a[10]=sec%10+20;a[11]=sec%10+20;a[12]=sec%10+20;a[13]=sec%10+20;a[14]=sec%10+20;a[15]=sec%10+20;}
 else{ 
  if((sec&gt;=10&amp;&amp;sec&lt;=20)||(sec&gt;=40&amp;&amp;sec&lt;=50)){
  a[0]=14;
  a[1]=13;
  a[2]=temper%10;
  a[3]=temper/10%10+20;
  a[4]=temper/100;
  a[5]=10;
  a[6]=12;  
  }
  else{
  a[0]=10;
  a[1]=year%10;
  a[2]=year/10;
  a[3]=mont%10+20;
  a[4]=mont/10;
  a[5]=datat%10+20;
  a[6]=datat/10;
  }
  a[7]=10;
  a[8]=sec%10;
  a[9]=sec/10;
  a[10]=11;
  a[11]=min_%10;
  a[12]=min_/10;
  a[13]=11;
  a[14]=hour%10;
  a[15]=hour/10;
}
}// sett=0

 if(sett&gt;0){
  a[0]=10;
  if(sett==6){if(times&lt;=500||w1==1){w1=0;a[1]=year%10+20;a[2]=year/10;}else{a[1]=11;a[2]=11;}}
  if(sett==5){if(times&lt;=500||w1==1){w1=0;a[3]=mont%10+20;a[4]=mont/10;}else{a[3]=11;a[4]=11;}}
  if(sett==4){if(times&lt;=500||w1==1){w1=0;a[5]=datat%10+20;a[6]=datat/10;}else{a[5]=11;a[6]=11;}}
  a[7]=10;
  if(sett==3){if(times&lt;=500||w1==1){w1=0;a[8]=sec%10;a[9]=sec/10;}else{a[8]=11;a[9]=11;}}
  a[10]=11;
  if(sett==2){if(times&lt;=500||w1==1){w1=0;a[11]=min_%10;a[12]=min_/10;}else{a[11]=11;a[12]=11;}}
  a[13]=11;
  if(sett==1){if(times&lt;=500||w1==1){w1=0;a[14]=hour%10;a[15]=hour/10;}else{a[14]=11;a[15]=11;}}
  if(sett!=3){a[8]=sec%10;a[9]=sec/10;}
}// sett&gt;0

if(sett==0){_delay_ms(100);}
 }

void wr(){a[0]=10;a[1]=year%10; a[2]=year/10;a[3]=mont%10+20;a[4]=mont/10;a[5]=datat%10+20;a[6]=datat/10;a[7]=10;a[8]=sec%10;
a[9]=sec/10;a[10]=11;a[11]=min_%10;a[12]=min_/10;a[13]=11;a[14]=hour%10;a[15]=hour/10;}


ISR(TIMER2_COMP_vect){
  switch(i){
    case 0:  segm=a[0];  an=16;  anod(); _delay_us(600); segment(); if(a[0]==10)an=16;else an=0;  anod(); break;
    case 1:  segm=a[1];  an=16;  anod(); _delay_us(600); segment(); if(a[1]==10)an=16;else an=1;  anod(); break;
    case 2:  segm=a[2];  an=16;  anod(); _delay_us(600); segment(); if(a[2]==10)an=16;else an=2;  anod(); break;
    case 3:  segm=a[3];  an=16;  anod(); _delay_us(600); segment(); if(a[3]==10)an=16;else an=3;  anod(); break;
    case 4:  segm=a[4];  an=16;  anod(); _delay_us(600); segment(); if(a[4]==10)an=16;else an=4;  anod(); break;
    case 5:  segm=a[5];  an=16;  anod(); _delay_us(600); segment(); if(a[5]==10)an=16;else an=5;  anod(); break;
    case 6:  segm=a[6];  an=16;  anod(); _delay_us(600); segment(); if(a[6]==10)an=16;else an=6;  anod(); break;
    case 7:  segm=a[7];  an=16;  anod(); _delay_us(600); segment(); if(a[7]==10)an=16;else an=7;  anod(); break;
    case 8:  segm=a[8];  an=16;  anod(); _delay_us(400); segment(); an=8;  anod(); break;
    case 9:  segm=a[9];  an=16;  anod(); _delay_us(400); segment(); an=9;  anod(); break;
   case 10:  segm=a[10]; an=16;  anod(); _delay_us(400); segment(); an=10; anod(); break;
   case 11:  segm=a[11]; an=16;  anod(); _delay_us(400); segment(); an=11; anod(); break;
   case 12:  segm=a[12]; an=16;  anod(); _delay_us(400); segment(); an=12; anod(); break;
   case 13:  segm=a[13]; an=16;  anod(); _delay_us(400); segment(); an=13; anod(); break;
   case 14:  segm=a[14]; an=16;  anod(); _delay_us(400); segment(); an=14; anod(); break;
   case 15:  segm=a[15]; an=16;  anod(); _delay_us(400); segment(); an=15; anod(); break;
    }i++;if(i&gt;15){i=0;}times++;if(times&gt;600){times=0;}}

void segment(){                                                                
   switch(segm){                                                                 
             //       GECDXBFA
    case 0: PORTA = 0b01110111;break; 
    case 1: PORTA = 0b00100100;break; 
    case 2: PORTA = 0b11010101;break; 
    case 3: PORTA = 0b10110101;break; 
    case 4: PORTA = 0b10100110;break; 
    case 5: PORTA = 0b10110011;break; 
    case 6: PORTA = 0b11110011;break; 
    case 7: PORTA = 0b00100101;break; 
    case 8: PORTA = 0b11110111;break;          
    case 9: PORTA = 0b10110111;break;
              //       GECDXBFA
    case 20: PORTA = 0b01111111;break; 
    case 21: PORTA = 0b00101100;break; 
    case 22: PORTA = 0b11011101;break; 
    case 23: PORTA = 0b10111101;break; 
    case 24: PORTA = 0b10101110;break; 
    case 25: PORTA = 0b10111011;break; 
    case 26: PORTA = 0b11111011;break; 
    case 27: PORTA = 0b00101101;break; 
    case 28: PORTA = 0b11111111;break;          
    case 29: PORTA = 0b10111111;break;
              //       GECDXBFA
    case 10: PORTA = 0b00000000;break; // пусто 
    case 11: PORTA = 0b10000000;break; // -
    case 12: PORTA = 0b11010010;break; // t
    case 13: PORTA = 0b10000111;break; // гр
    case 14: PORTA = 0b01010011;break; // C
  }}
    

void anod(){
 switch(an){                                                             
    case 0: PORTC &amp;=~(1&lt;&lt;PC7);PORTB |=(1&lt;&lt;PB0);break;
    case 1: PORTB &amp;=~(1&lt;&lt;PB0);PORTB |=(1&lt;&lt;PB1);break; 
    case 2: PORTB &amp;=~(1&lt;&lt;PB1);PORTB |=(1&lt;&lt;PB2);break; 
    case 3: PORTB &amp;=~(1&lt;&lt;PB2);PORTB |=(1&lt;&lt;PB3);break; 
    case 4: PORTB &amp;=~(1&lt;&lt;PB3);PORTB |=(1&lt;&lt;PB4);break; 
    case 5: PORTB &amp;=~(1&lt;&lt;PB4);PORTB |=(1&lt;&lt;PB5);break; 
    case 6: PORTB &amp;=~(1&lt;&lt;PB5);PORTB |=(1&lt;&lt;PB6);break; 
    case 7: PORTB &amp;=~(1&lt;&lt;PB6);PORTB |=(1&lt;&lt;PB7);break;  
    case 8: PORTB &amp;=~(1&lt;&lt;PB7);PORTD |=(1&lt;&lt;PD6);break;
    case 9: PORTD &amp;=~(1&lt;&lt;PD6);PORTD |=(1&lt;&lt;PD7);break; 
   case 10: PORTD &amp;=~(1&lt;&lt;PD7);PORTC |=(1&lt;&lt;PC2);break; 
   case 11: PORTC &amp;=~(1&lt;&lt;PC2);PORTC |=(1&lt;&lt;PC3);break; 
   case 12: PORTC &amp;=~(1&lt;&lt;PC3);PORTC |=(1&lt;&lt;PC4);break; 
   case 13: PORTC &amp;=~(1&lt;&lt;PC4);PORTC |=(1&lt;&lt;PC5);break; 
   case 14: PORTC &amp;=~(1&lt;&lt;PC5);PORTC |=(1&lt;&lt;PC6);break; 
   case 15: PORTC &amp;=~(1&lt;&lt;PC6);PORTC |=(1&lt;&lt;PC7);break;       
   case 16: PORTB &amp;=~(1&lt;&lt;PB0);PORTB &amp;=~(1&lt;&lt;PB1);PORTB &amp;=~(1&lt;&lt;PB2);PORTB &amp;=~(1&lt;&lt;PB3);PORTB &amp;=~(1&lt;&lt;PB4);PORTB &amp;=~(1&lt;&lt;PB5);PORTB &amp;=~(1&lt;&lt;PB6);PORTB &amp;=~(1&lt;&lt;PB7);
   PORTD &amp;=~(1&lt;&lt;PD6);PORTD &amp;=~(1&lt;&lt;PD7);PORTC &amp;=~(1&lt;&lt;PC2);PORTC &amp;=~(1&lt;&lt;PC3);PORTC &amp;=~(1&lt;&lt;PC4);PORTC &amp;=~(1&lt;&lt;PC5);PORTC &amp;=~(1&lt;&lt;PC6);PORTC &amp;=~(1&lt;&lt;PC7);break;                                                     
  }} 

byte i2c_read(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);
  while (!(TWCR &amp; (1&lt;&lt;TWINT)));
   byte i2c_data = TWDR;  
   TWCR = (1&lt;&lt;TWINT)|(1&lt;&lt;TWEN)|(1&lt;&lt;TWSTO); // СТОП
   return i2c_data;
  }

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*10)+(i2c_data1&gt;&gt;5)*1.25;
  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 set_time(byte years, byte days, byte monts, byte datas, byte hours ,byte minute, byte second){
    if(second &lt; 255){i2c_write(ADDR,0x00,(second/10&lt;&lt;4)+second%10);}
    if(minute &lt; 255){i2c_write(ADDR,0x01,(minute/10&lt;&lt;4)+minute%10);} 
    if(hours &lt; 255){i2c_write(ADDR,0x02,(hours/10&lt;&lt;4)+hours%10);}
    if(days &lt; 255){i2c_write(ADDR,0x03,days);}
    if(datas &lt; 255){i2c_write(ADDR,0x04,(datas/10&lt;&lt;4)+datas%10);}
    if(monts &lt; 255){i2c_write(ADDR,0x05,(monts/10&lt;&lt;4)+monts%10);}
    if(years &lt; 255){i2c_write(ADDR,0x06,(years/10&lt;&lt;4)+years%10);}
  } </code></pre></div>]]></description>
			<author><![CDATA[null@example.com (liman324)]]></author>
			<pubDate>Sun, 21 Jan 2024 14:01:00 +0000</pubDate>
			<guid>http://forum.rcl-radio.ru/viewtopic.php?pid=9306#p9306</guid>
		</item>
		<item>
			<title><![CDATA[Re: Часы на игп-17 (разработка)]]></title>
			<link>http://forum.rcl-radio.ru/viewtopic.php?pid=9305#p9305</link>
			<description><![CDATA[<p>Для высоковольтного питания индикатора я использую отдельный источник питания-преобразователь на 34063 с плавной регулировкой величины выходного напряжения. Данный индикатор очень чувствителен к величине питающего напряжения, буквально при повышении на 10 Вольт появляются синие разряды между соседними сегментами, поэтому пришлось городить такой огород</p>]]></description>
			<author><![CDATA[null@example.com (aprdetali)]]></author>
			<pubDate>Sun, 21 Jan 2024 13:58:55 +0000</pubDate>
			<guid>http://forum.rcl-radio.ru/viewtopic.php?pid=9305#p9305</guid>
		</item>
		<item>
			<title><![CDATA[Re: Часы на игп-17 (разработка)]]></title>
			<link>http://forum.rcl-radio.ru/viewtopic.php?pid=9304#p9304</link>
			<description><![CDATA[<p>Может дело в емкости высоковольного источника, либо в частоте преобразователя высоковольного источника?</p><p>Можно увеличить емкость и изменить частоту</p><p>Поднял частоту преобразователя</p><div class="codebox"><pre><code>/// ATMEGA8535 16 MHZ
#define ADDR    0x68
#define CPU_F   16000000 // Clock Speed
#define SCL_F   400000 // // I2C Speed
#define TEMP_KORR 0 // гр.Цельсия

#include &lt;avr/io.h&gt;
#include &lt;util/delay.h&gt;

byte a[16],an,segm,i;
bool w=1,w1;
byte sec,min_,hour,datat,mont,year;
int temper,sett,times;
int set_hour,set_min,set_sec,set_datat,set_mont,set_year;


void setup() {
  DDRA = 0xFF;
  DDRB = 0xFF;
  DDRC = 0xFF;
  DDRD |= (1 &lt;&lt; PD6)|(1 &lt;&lt; PD7);
  PORTD |= (1 &lt;&lt; PD2)|(1 &lt;&lt; PD3)|(1 &lt;&lt; PD4);
  TWBR = (((CPU_F)/(SCL_F)-16 )/2) ;
  TWSR = 0;
  DDRD |= (1 &lt;&lt; PD5); // PWM +180V TIMER_1
  cli();
// TIMER_2  F = 16000000/128/100=1250 Hz (800 uS)
  OCR2 = 100;
  TCCR2 |= (1 &lt;&lt; WGM21);
  TCCR2 |= (1 &lt;&lt; CS22) | (1 &lt;&lt; CS20);
  TIMSK |= (1 &lt;&lt; OCIE2);
// TIMER_1  F = 16000000/1024/1/1=15625 Hz
  TCCR1A = 0;
  TCCR1B = 0;
  TCNT1 = 0;
  TCCR1A |= (1 &lt;&lt; COM1A1);
  TCCR1B |= (1 &lt;&lt; WGM12);
  TCCR1A |= (1 &lt;&lt; WGM10);
  TCCR1B |= (1 &lt;&lt; CS10); 
  ICR1 = 255; 
  OCR1A = 100; 
  sei();
 // set_time(22,2,2,4,22,23,0);// год 00-99, ДН 1-7 (1=ВС), месяц 1-12, дата 1-31, час 0-23, минуты 0-59, секунды 0-59
  i2c_write(0x48,0x01,0);
  _delay_ms(200); 
}   

void loop() { 
  datat = ((i2c_read(ADDR,4) &amp; 0x0F) + ((i2c_read(ADDR,4) &amp; 0x70) &gt;&gt; 4) * 10);
  mont = ((i2c_read(ADDR,5) &amp; 0x0F) + ((i2c_read(ADDR,5) &amp; 0x70) &gt;&gt; 4) * 10);
  year = ((i2c_read(ADDR,6) &amp; 0x0F) + ((i2c_read(ADDR,6) &amp; 0x70) &gt;&gt; 4) * 10); 
  hour = (i2c_read(ADDR,2) &amp; 0x0F) + (((i2c_read(ADDR,2) &amp; 0x70) &gt;&gt; 4) * 10);
  min_ =  (i2c_read(ADDR,1) &amp; 0x0F) + (((i2c_read(ADDR,1) &amp; 0x70) &gt;&gt; 4) * 10);
  if(sec==10||sec==40) {temper = i2c_read_i2c_2bit(0x48,0)-TEMP_KORR ;}
  sec =  (i2c_read(ADDR,0) &amp; 0x0F) + (((i2c_read(ADDR,0) &amp; 0x70) &gt;&gt; 4) * 10);
  set_year = year;set_mont = mont;set_datat = datat;set_hour = hour;set_min = min_;set_sec = sec;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

/// BUTTON /////////////  
  if(((PIND &gt;&gt; PD2) &amp; 1) == 0){sett++;times=0;if(sett&gt;6){sett=0;}wr();_delay_ms(300);}
  
  if(((PIND &gt;&gt; PD3) &amp; 1) == 0 &amp;&amp; sett==1){set_hour++;w1=1; if(set_hour&gt;23){set_hour=23;} set_time(set_year,0,set_mont,set_datat,set_hour,set_min,set_sec);wr();_delay_ms(300);}
  if(((PIND &gt;&gt; PD4) &amp; 1) == 0 &amp;&amp; sett==1){set_hour--;w1=1; if(set_hour&lt;0){set_hour=0;} set_time(set_year,0,set_mont,set_datat,set_hour,set_min,set_sec);wr();_delay_ms(300);}

  if(((PIND &gt;&gt; PD3) &amp; 1) == 0 &amp;&amp; sett==2){set_min++;w1=1; if(set_mont&gt;59){set_min=59;} set_time(set_year,0,set_mont,set_datat,set_hour,set_min,set_sec);wr();_delay_ms(300);}
  if(((PIND &gt;&gt; PD4) &amp; 1) == 0 &amp;&amp; sett==2){set_min--;w1=1; if(set_mont&lt;0){set_min=0;} set_time(set_year,0,set_mont,set_datat,set_hour,set_min,set_sec);wr();_delay_ms(300);}

  if(((PIND &gt;&gt; PD3) &amp; 1) == 0 &amp;&amp; sett==3){set_sec=0;w1=1; set_time(set_year,0,set_mont,set_datat,set_hour,set_min,set_sec);wr();_delay_ms(300);}
  if(((PIND &gt;&gt; PD4) &amp; 1) == 0 &amp;&amp; sett==3){set_sec=0;w1=1; set_time(set_year,0,set_mont,set_datat,set_hour,set_min,set_sec);wr();_delay_ms(300);}

  if(((PIND &gt;&gt; PD3) &amp; 1) == 0 &amp;&amp; sett==4){set_datat++;w1=1; if(set_datat&gt;31){set_datat=31;} set_time(set_year,0,set_mont,set_datat,set_hour,set_min,set_sec);wr();_delay_ms(300);}
  if(((PIND &gt;&gt; PD4) &amp; 1) == 0 &amp;&amp; sett==4){set_datat--;w1=1; if(set_datat&lt;0){set_datat=0;} set_time(set_year,0,set_mont,set_datat,set_hour,set_min,set_sec);wr();_delay_ms(300);}

  if(((PIND &gt;&gt; PD3) &amp; 1) == 0 &amp;&amp; sett==5){set_mont++;w1=1; if(set_mont&gt;12){set_mont=12;} set_time(set_year,0,set_mont,set_datat,set_hour,set_min,set_sec);wr();_delay_ms(300);}
  if(((PIND &gt;&gt; PD4) &amp; 1) == 0 &amp;&amp; sett==5){set_mont--;w1=1; if(set_mont&lt;0){set_mont=0;} set_time(set_year,0,set_mont,set_datat,set_hour,set_min,set_sec);wr();_delay_ms(300);} 

  if(((PIND &gt;&gt; PD3) &amp; 1) == 0 &amp;&amp; sett==6){set_year++;w1=1; if(set_year&gt;50){set_year=50;} set_time(set_year,0,set_mont,set_datat,set_hour,set_min,set_sec);wr();_delay_ms(300);}
  if(((PIND &gt;&gt; PD4) &amp; 1) == 0 &amp;&amp; sett==6){set_year--;w1=1; if(set_year&lt;22){set_year=22;} set_time(set_year,0,set_mont,set_datat,set_hour,set_min,set_sec);wr();_delay_ms(300);}      
 
 if(sett==0){
 if(min_==30&amp;&amp;sec&lt;10){a[0]=sec%10+20;a[1]=sec%10+20;a[2]=sec%10+20;a[3]=sec%10+20;a[4]=sec%10+20;a[5]=sec%10+20;a[6]=sec%10+20;a[7]=sec%10+20;
  a[8]=sec%10+20;a[9]=sec%10+20;a[10]=sec%10+20;a[11]=sec%10+20;a[12]=sec%10+20;a[13]=sec%10+20;a[14]=sec%10+20;a[15]=sec%10+20;}
 else{ 
  if((sec&gt;=10&amp;&amp;sec&lt;=20)||(sec&gt;=40&amp;&amp;sec&lt;=50)){
  a[0]=14;
  a[1]=13;
  a[2]=temper%10;
  a[3]=temper/10%10+20;
  a[4]=temper/100;
  a[5]=10;
  a[6]=12;  
  }
  else{
  a[0]=10;
  a[1]=year%10;
  a[2]=year/10;
  a[3]=mont%10+20;
  a[4]=mont/10;
  a[5]=datat%10+20;
  a[6]=datat/10;
  }
  a[7]=10;
  a[8]=sec%10;
  a[9]=sec/10;
  a[10]=11;
  a[11]=min_%10;
  a[12]=min_/10;
  a[13]=11;
  a[14]=hour%10;
  a[15]=hour/10;
}
}// sett=0

 if(sett&gt;0){
  a[0]=10;
  if(sett==6){if(times&lt;=500||w1==1){w1=0;a[1]=year%10+20;a[2]=year/10;}else{a[1]=11;a[2]=11;}}
  if(sett==5){if(times&lt;=500||w1==1){w1=0;a[3]=mont%10+20;a[4]=mont/10;}else{a[3]=11;a[4]=11;}}
  if(sett==4){if(times&lt;=500||w1==1){w1=0;a[5]=datat%10+20;a[6]=datat/10;}else{a[5]=11;a[6]=11;}}
  a[7]=10;
  if(sett==3){if(times&lt;=500||w1==1){w1=0;a[8]=sec%10;a[9]=sec/10;}else{a[8]=11;a[9]=11;}}
  a[10]=11;
  if(sett==2){if(times&lt;=500||w1==1){w1=0;a[11]=min_%10;a[12]=min_/10;}else{a[11]=11;a[12]=11;}}
  a[13]=11;
  if(sett==1){if(times&lt;=500||w1==1){w1=0;a[14]=hour%10;a[15]=hour/10;}else{a[14]=11;a[15]=11;}}
  if(sett!=3){a[8]=sec%10;a[9]=sec/10;}
}// sett&gt;0

if(sett==0){_delay_ms(100);}
 }

void wr(){a[0]=10;a[1]=year%10; a[2]=year/10;a[3]=mont%10+20;a[4]=mont/10;a[5]=datat%10+20;a[6]=datat/10;a[7]=10;a[8]=sec%10;
a[9]=sec/10;a[10]=11;a[11]=min_%10;a[12]=min_/10;a[13]=11;a[14]=hour%10;a[15]=hour/10;}


ISR(TIMER2_COMP_vect){
  switch(i){
    case 0:  segm=a[0];  an=16;  anod(); _delay_us(600); segment(); if(a[0]==10)an=16;else an=0;  anod(); break;
    case 1:  segm=a[1];  an=16;  anod(); _delay_us(600); segment(); if(a[1]==10)an=16;else an=1;  anod(); break;
    case 2:  segm=a[2];  an=16;  anod(); _delay_us(600); segment(); if(a[2]==10)an=16;else an=2;  anod(); break;
    case 3:  segm=a[3];  an=16;  anod(); _delay_us(600); segment(); if(a[3]==10)an=16;else an=3;  anod(); break;
    case 4:  segm=a[4];  an=16;  anod(); _delay_us(600); segment(); if(a[4]==10)an=16;else an=4;  anod(); break;
    case 5:  segm=a[5];  an=16;  anod(); _delay_us(600); segment(); if(a[5]==10)an=16;else an=5;  anod(); break;
    case 6:  segm=a[6];  an=16;  anod(); _delay_us(600); segment(); if(a[6]==10)an=16;else an=6;  anod(); break;
    case 7:  segm=a[7];  an=16;  anod(); _delay_us(600); segment(); if(a[7]==10)an=16;else an=7;  anod(); break;
    case 8:  segm=a[8];  an=16;  anod(); _delay_us(400); segment(); an=8;  anod(); break;
    case 9:  segm=a[9];  an=16;  anod(); _delay_us(400); segment(); an=9;  anod(); break;
   case 10:  segm=a[10]; an=16;  anod(); _delay_us(400); segment(); an=10; anod(); break;
   case 11:  segm=a[11]; an=16;  anod(); _delay_us(400); segment(); an=11; anod(); break;
   case 12:  segm=a[12]; an=16;  anod(); _delay_us(400); segment(); an=12; anod(); break;
   case 13:  segm=a[13]; an=16;  anod(); _delay_us(400); segment(); an=13; anod(); break;
   case 14:  segm=a[14]; an=16;  anod(); _delay_us(400); segment(); an=14; anod(); break;
   case 15:  segm=a[15]; an=16;  anod(); _delay_us(400); segment(); an=15; anod(); break;
    }i++;if(i&gt;15){i=0;}times++;if(times&gt;600){times=0;}}

void segment(){                                                                
   switch(segm){                                                                 
             //       GECDXBFA
    case 0: PORTA = 0b01110111;break; 
    case 1: PORTA = 0b00100100;break; 
    case 2: PORTA = 0b11010101;break; 
    case 3: PORTA = 0b10110101;break; 
    case 4: PORTA = 0b10100110;break; 
    case 5: PORTA = 0b10110011;break; 
    case 6: PORTA = 0b11110011;break; 
    case 7: PORTA = 0b00100101;break; 
    case 8: PORTA = 0b11110111;break;          
    case 9: PORTA = 0b10110111;break;
              //       GECDXBFA
    case 20: PORTA = 0b01111111;break; 
    case 21: PORTA = 0b00101100;break; 
    case 22: PORTA = 0b11011101;break; 
    case 23: PORTA = 0b10111101;break; 
    case 24: PORTA = 0b10101110;break; 
    case 25: PORTA = 0b10111011;break; 
    case 26: PORTA = 0b11111011;break; 
    case 27: PORTA = 0b00101101;break; 
    case 28: PORTA = 0b11111111;break;          
    case 29: PORTA = 0b10111111;break;
              //       GECDXBFA
    case 10: PORTA = 0b00000000;break; // пусто 
    case 11: PORTA = 0b10000000;break; // -
    case 12: PORTA = 0b11010010;break; // t
    case 13: PORTA = 0b10000111;break; // гр
    case 14: PORTA = 0b01010011;break; // C
  }}
    

void anod(){
 switch(an){                                                             
    case 0: PORTC &amp;=~(1&lt;&lt;PC7);PORTB |=(1&lt;&lt;PB0);break;
    case 1: PORTB &amp;=~(1&lt;&lt;PB0);PORTB |=(1&lt;&lt;PB1);break; 
    case 2: PORTB &amp;=~(1&lt;&lt;PB1);PORTB |=(1&lt;&lt;PB2);break; 
    case 3: PORTB &amp;=~(1&lt;&lt;PB2);PORTB |=(1&lt;&lt;PB3);break; 
    case 4: PORTB &amp;=~(1&lt;&lt;PB3);PORTB |=(1&lt;&lt;PB4);break; 
    case 5: PORTB &amp;=~(1&lt;&lt;PB4);PORTB |=(1&lt;&lt;PB5);break; 
    case 6: PORTB &amp;=~(1&lt;&lt;PB5);PORTB |=(1&lt;&lt;PB6);break; 
    case 7: PORTB &amp;=~(1&lt;&lt;PB6);PORTB |=(1&lt;&lt;PB7);break;  
    case 8: PORTB &amp;=~(1&lt;&lt;PB7);PORTD |=(1&lt;&lt;PD6);break;
    case 9: PORTD &amp;=~(1&lt;&lt;PD6);PORTD |=(1&lt;&lt;PD7);break; 
   case 10: PORTD &amp;=~(1&lt;&lt;PD7);PORTC |=(1&lt;&lt;PC2);break; 
   case 11: PORTC &amp;=~(1&lt;&lt;PC2);PORTC |=(1&lt;&lt;PC3);break; 
   case 12: PORTC &amp;=~(1&lt;&lt;PC3);PORTC |=(1&lt;&lt;PC4);break; 
   case 13: PORTC &amp;=~(1&lt;&lt;PC4);PORTC |=(1&lt;&lt;PC5);break; 
   case 14: PORTC &amp;=~(1&lt;&lt;PC5);PORTC |=(1&lt;&lt;PC6);break; 
   case 15: PORTC &amp;=~(1&lt;&lt;PC6);PORTC |=(1&lt;&lt;PC7);break;       
   case 16: PORTB &amp;=~(1&lt;&lt;PB0);PORTB &amp;=~(1&lt;&lt;PB1);PORTB &amp;=~(1&lt;&lt;PB2);PORTB &amp;=~(1&lt;&lt;PB3);PORTB &amp;=~(1&lt;&lt;PB4);PORTB &amp;=~(1&lt;&lt;PB5);PORTB &amp;=~(1&lt;&lt;PB6);PORTB &amp;=~(1&lt;&lt;PB7);
   PORTD &amp;=~(1&lt;&lt;PD6);PORTD &amp;=~(1&lt;&lt;PD7);PORTC &amp;=~(1&lt;&lt;PC2);PORTC &amp;=~(1&lt;&lt;PC3);PORTC &amp;=~(1&lt;&lt;PC4);PORTC &amp;=~(1&lt;&lt;PC5);PORTC &amp;=~(1&lt;&lt;PC6);PORTC &amp;=~(1&lt;&lt;PC7);break;                                                     
  }} 

byte i2c_read(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);
  while (!(TWCR &amp; (1&lt;&lt;TWINT)));
   byte i2c_data = TWDR;  
   TWCR = (1&lt;&lt;TWINT)|(1&lt;&lt;TWEN)|(1&lt;&lt;TWSTO); // СТОП
   return i2c_data;
  }

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*10)+(i2c_data1&gt;&gt;5)*1.25;
  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 set_time(byte years, byte days, byte monts, byte datas, byte hours ,byte minute, byte second){
    if(second &lt; 255){i2c_write(ADDR,0x00,(second/10&lt;&lt;4)+second%10);}
    if(minute &lt; 255){i2c_write(ADDR,0x01,(minute/10&lt;&lt;4)+minute%10);} 
    if(hours &lt; 255){i2c_write(ADDR,0x02,(hours/10&lt;&lt;4)+hours%10);}
    if(days &lt; 255){i2c_write(ADDR,0x03,days);}
    if(datas &lt; 255){i2c_write(ADDR,0x04,(datas/10&lt;&lt;4)+datas%10);}
    if(monts &lt; 255){i2c_write(ADDR,0x05,(monts/10&lt;&lt;4)+monts%10);}
    if(years &lt; 255){i2c_write(ADDR,0x06,(years/10&lt;&lt;4)+years%10);}
  } </code></pre></div>]]></description>
			<author><![CDATA[null@example.com (liman324)]]></author>
			<pubDate>Sun, 21 Jan 2024 13:50:54 +0000</pubDate>
			<guid>http://forum.rcl-radio.ru/viewtopic.php?pid=9304#p9304</guid>
		</item>
	</channel>
</rss>
