1

Тема: Ретро часы на ИВ-6

Требуется тестирование!!!

Основная статья - https://rcl-radio.ru/?p=67405

http://forum.rcl-radio.ru/uploads/images/2019/11/19faced7e0276061f642229e6fcaf2d0.png

http://forum.rcl-radio.ru/uploads/images/2019/11/5848143977b8b3c41b5c0d2e0d089242.png

http://forum.rcl-radio.ru/uploads/images/2019/11/5ae92b7d722edf5f471ddc416cf27389.gif

Данный контент доступен только зарегистрированным пользователям.

https://rcl-radio.ru/wp-content/uploads … Timer2.zip


Настройка
1. Собрать схему, не подключая ардуино. При подачи питания должны загореться все сегменты индикаторов.
2. Подобрать сопротивление R28 для увеличения или уменьшения яркости индикаторов, напряжение на С6 не должно превышать 40 В.
3. Подать поочередно 5В на входы D2-D13 платы индикатора, должны поочередно гаснуть сегменты от A до G и индикаторы от A1 до А4.
4. Если первые три пункта настроек выполнены можно подключать ардуино, при динамической индикации яркость будет ниже, возможно потребуется повторный подбор R28.

Кнопки
+/sec - при нажатии и удержании кнопки должны отображаться секунды "S_31"
-/temp - при нажатии и удержании кнопки должна отображаться температура
set - при однократном нажатии активируется режим корректировки минут(1), далее нажимая set - часы(2), дата(3), месяц(4) и год(5)

#include <MsTimer2.h>
#include <Wire.h> 
#include <DS3231.h>
  DS3231 clock;RTCDateTime DateTime;
  int an, segm,times,i;
  byte a[4];
  int menu,year,month,day,hour,minute,w;
 
void setup(){  Wire.begin();clock.begin();MsTimer2::set(5, to_Timer);MsTimer2::start();
  // clock.setDateTime(__DATE__, __TIME__); // Устанавливаем время на часах, основываясь на времени компиляции скетча
 pinMode(9,OUTPUT);  // D9  === A0
 pinMode(10,OUTPUT); // D10 === A1
 pinMode(11,OUTPUT); // D11 === A2
 pinMode(12,OUTPUT); // D12 === A3
 pinMode(2,OUTPUT);  // D2  === a
 pinMode(3,OUTPUT);  // D3  === b
 pinMode(4,OUTPUT);  // D4  === c
 pinMode(5,OUTPUT);  // D5  === d
 pinMode(6,OUTPUT);  // D6  === e
 pinMode(7,OUTPUT);  // D7  === f
 pinMode(8,OUTPUT);  // D8  === g
 pinMode(13,OUTPUT);// D13  === dp
 pinMode(A0,INPUT); // SQW
 ///// BUTTON //////
 pinMode(A1,INPUT); // SET
 pinMode(A2,INPUT); // +/sec
 pinMode(A3,INPUT); // -/temp
 ////  текущее время перенос в переменные коррекции времени
 DateTime=clock.getDateTime();// опрос времени
 year = DateTime.year;
 month = DateTime.month;
 day = DateTime.day;
 hour = DateTime.hour;
 minute = DateTime.minute;
}
 
void loop(){ DateTime=clock.getDateTime();// опрос времени
  if(analogRead(A1)>900){menu++;delay(200);if(menu>5){menu=0;w=1;}}
////// вывод секунд - нажать и удерживать кнопку +/sec /////////////////////////////////////
  if(analogRead(A2)>900&&menu==0){times = DateTime.second;digitalWrite(13,HIGH);
  a[0]=11;
  a[1]=10;
  a[2]=times/10;
  a[3]=times%10;}

////// вывод температуры - нажать и удерживать кнопку -/temp /////////////////////////////////////
  if(analogRead(A3)>900&&menu==0){times = clock.readTemperature();digitalWrite(13,HIGH);
  a[0]=12;
  a[1]=10;
  a[2]=times/10;
  a[3]=times%10;}  
  
/////////// ВРЕМЯ /////////////  
  if(menu==0){times = DateTime.hour*100+DateTime.minute;
  a[0]=times/1000;
  a[1]=times/100%10;
  a[2]=times/10%10;
  a[3]=times%10%10;
   if(analogRead(A0)>900){digitalWrite(13,HIGH);}else{digitalWrite(13,LOW);}// dp
  }
///////// коррекция минут /////////////////
  if(menu==1){
    if(analogRead(A2)>900){minute++;delay(300);if(minute>59){minute=0;}}
    if(analogRead(A3)>900){minute--;delay(300);if(minute<0){minute=0;}}
    times=minute;
  a[0]=1;
  a[1]=10;
  a[2]=times/10;
  a[3]=times%10;}

///////// коррекция часов /////////////////
  if(menu==2){
    if(analogRead(A2)>900){hour++;delay(300);if(hour>23){hour=0;}}
    if(analogRead(A3)>900){hour--;delay(300);if(hour<0){hour=0;}}
    times=hour;
  a[0]=2;
  a[1]=10;
  a[2]=times/10;
  a[3]=times%10;}

///////// коррекция дата /////////////////
  if(menu==3){
    if(analogRead(A2)>900){day++;delay(300);if(day>31){day=0;}}
    if(analogRead(A3)>900){day--;delay(300);if(day<0){day=0;}}
    times=day;
  a[0]=3;
  a[1]=10;
  a[2]=times/10;
  a[3]=times%10;}

///////// коррекция месяц /////////////////
  if(menu==4){
    if(analogRead(A2)>900){month++;delay(300);if(month>12){month=0;}}
    if(analogRead(A3)>900){month--;delay(300);if(month<0){month=0;}}
    times=month;
  a[0]=4;
  a[1]=10;
  a[2]=times/10;
  a[3]=times%10;}

///////// коррекция год /////////////////
  if(menu==5){
    if(analogRead(A2)>900){year++;delay(300);if(year>99){year=19;}}
    if(analogRead(A3)>900){year--;delay(300);if(year<19){year=19;}}
    times=year;
  a[0]=5;
  a[1]=10;
  a[2]=times/10;
  a[3]=times%10;}
  
if(w==1){clock.setDateTime(year+2000, month, day, hour, minute, 59 );// год (19),месяц(11),день(15),час(23),минуты(32),секунды
 w=0;}

  } // loop
 
void to_Timer(){
  switch(i){
    case 0: segm=a[0]; an=0; anod(); segment();delay(2);break;
    case 1: segm=a[1]; an=1; anod(); segment();delay(1);break;
    case 2: segm=a[2]; an=2; anod(); segment();break;
    case 3: segm=a[3]; an=3; anod(); segment();break;}i++;if(i>3){i=0;}}
 
 
void segment(){
  switch(segm){                                                                 
             //  A       B       C       D       E       F       G  
    case 0: ch(2,0);ch(3,0);ch(4,0);ch(5,0);ch(6,0);ch(7,0);ch(8,1);break;// 0 
    case 1: ch(2,1);ch(3,0);ch(4,0);ch(5,1);ch(6,1);ch(7,1);ch(8,1);break;// 1
    case 2: ch(2,0);ch(3,0);ch(4,1);ch(5,0);ch(6,0);ch(7,1);ch(8,0);break;// 2
    case 3: ch(2,0);ch(3,0);ch(4,0);ch(5,0);ch(6,1);ch(7,1);ch(8,0);break;// 3   
    case 4: ch(2,1);ch(3,0);ch(4,0);ch(5,1);ch(6,1);ch(7,0);ch(8,0);break;// 4 
    case 5: ch(2,0);ch(3,1);ch(4,0);ch(5,0);ch(6,1);ch(7,0);ch(8,0);break;// 5 
    case 6: ch(2,0);ch(3,1);ch(4,0);ch(5,0);ch(6,0);ch(7,0);ch(8,0);break;// 6 
    case 7: ch(2,0);ch(3,0);ch(4,0);ch(5,1);ch(6,1);ch(7,1);ch(8,1);break;// 7 
    case 8: ch(2,0);ch(3,0);ch(4,0);ch(5,0);ch(6,0);ch(7,0);ch(8,0);break;// 8
    case 9: ch(2,0);ch(3,0);ch(4,0);ch(5,0);ch(6,1);ch(7,0);ch(8,0);break;// 9  
    case 10:ch(2,1);ch(3,1);ch(4,1);ch(5,1);ch(6,1);ch(7,1);ch(8,1);break;// ПУСТО  
    case 11:ch(2,0);ch(3,1);ch(4,0);ch(5,0);ch(6,1);ch(7,0);ch(8,0);break;// S 
    case 12:ch(2,1);ch(3,1);ch(4,1);ch(5,0);ch(6,0);ch(7,0);ch(8,0);break;// t  
  }}
void anod(){
  switch(an){                                                             
    case 0:ch(9,0);ch(10,1);ch(11,1);ch(12,1);break;  
    case 1:ch(9,1);ch(10,0);ch(11,1);ch(12,1);break; 
    case 2:ch(9,1);ch(10,1);ch(11,0);ch(12,1);break;
    case 3:ch(9,1);ch(10,1);ch(11,1);ch(12,0);break;
  }}

  void ch(int pin, int logic){digitalWrite(pin,logic);}

2

Re: Ретро часы на ИВ-6

Без коррекции времени

http://forum.rcl-radio.ru/uploads/images/2019/11/6c1da78bf13f08df9465a03c36db5bce.png
http://forum.rcl-radio.ru/uploads/images/2019/11/9e5d9a632b34bafe15d2c8d5a8243f12.png
http://forum.rcl-radio.ru/uploads/images/2019/11/8e823a7885d2608ce21ab4d877c620d2.gif
Данный контент доступен только зарегистрированным пользователям.


#include <MsTimer2.h>
#include <Wire.h> 
#include <DS3231.h>
DS3231 clock;RTCDateTime DateTime;
  int an, segm,times,i;
  byte a[4];
 
void setup(){  Wire.begin();clock.begin();
MsTimer2::set(5, to_Timer);MsTimer2::start();
  // clock.setDateTime(__DATE__, __TIME__); // Устанавливаем время на часах, основываясь на времени компиляции скетча
 pinMode(9,OUTPUT);  // D9  === A0
 pinMode(10,OUTPUT); // D10 === A1
 pinMode(11,OUTPUT); // D11 === A2
 pinMode(12,OUTPUT); // D12 === A3
 pinMode(2,OUTPUT);  // D2  === a
 pinMode(3,OUTPUT);  // D3  === b
 pinMode(4,OUTPUT);  // D4  === c
 pinMode(5,OUTPUT);  // D5  === d
 pinMode(6,OUTPUT);  // D6  === e
 pinMode(7,OUTPUT);  // D7  === f
 pinMode(8,OUTPUT);  // D8  === g
}
 
void loop(){ 
  DateTime=clock.getDateTime();// опрос времени
  times = DateTime.hour*100+DateTime.minute;
  a[0]=times/1000;
  a[1]=times/100%10;
  a[2]=times/10%10;
  a[3]=times%10%10;
 }// loop
 
void to_Timer(){ 
  switch(i){
    case 0: segm=a[0]; an=0; anod(); segment();delay(2);break;
    case 1: segm=a[1]; an=1; anod(); segment();delay(1);break;
    case 2: segm=a[2]; an=2; anod(); segment();break;
    case 3: segm=a[3]; an=3; anod(); segment();break;}i++;if(i>3){i=0;}}
 
 
void segment(){
  switch(segm){                                                                 
             //  A       B       C       D       E       F       G  
    case 0: ch(2,0);ch(3,0);ch(4,0);ch(5,0);ch(6,0);ch(7,0);ch(8,1);break;// 0 
    case 1: ch(2,1);ch(3,0);ch(4,0);ch(5,1);ch(6,1);ch(7,1);ch(8,1);break;// 1
    case 2: ch(2,0);ch(3,0);ch(4,1);ch(5,0);ch(6,0);ch(7,1);ch(8,0);break;// 2
    case 3: ch(2,0);ch(3,0);ch(4,0);ch(5,0);ch(6,1);ch(7,1);ch(8,0);break;// 3   
    case 4: ch(2,1);ch(3,0);ch(4,0);ch(5,1);ch(6,1);ch(7,0);ch(8,0);break;// 4 
    case 5: ch(2,0);ch(3,1);ch(4,0);ch(5,0);ch(6,1);ch(7,0);ch(8,0);break;// 5 
    case 6: ch(2,0);ch(3,1);ch(4,0);ch(5,0);ch(6,0);ch(7,0);ch(8,0);break;// 6 
    case 7: ch(2,0);ch(3,0);ch(4,0);ch(5,1);ch(6,1);ch(7,1);ch(8,1);break;// 7 
    case 8: ch(2,0);ch(3,0);ch(4,0);ch(5,0);ch(6,0);ch(7,0);ch(8,0);break;// 8
    case 9: ch(2,0);ch(3,0);ch(4,0);ch(5,0);ch(6,1);ch(7,0);ch(8,0);break;// 9  
  }}
void anod(){
  switch(an){                                                             
    case 0:ch(9,0);ch(10,1);ch(11,1);ch(12,1);break;  
    case 1:ch(9,1);ch(10,0);ch(11,1);ch(12,1);break; 
    case 2:ch(9,1);ch(10,1);ch(11,0);ch(12,1);break;
    case 3:ch(9,1);ch(10,1);ch(11,1);ch(12,0);break;
  }}

  void ch(int pin, int logic){digitalWrite(pin,logic);}

3

Re: Ретро часы на ИВ-6

Питание нити накала

При всей простоте питания нити накала постоянным током напряжением 5В подключённых последовательно индикаторных ламп есть ряд недостатков:
1. Неравномерность свечения сегментов
2. Яркость свечения немного выше у тех индикаторных ламп чей катод подключен напрямую или через лампу к общему проводу, из-за разницы анодного напряжения относительно катода. (этот эффект программно устраним введением разной длительности свечения ламп при динамической индикации)
3.Неравномерное свечение нити накала и соответственно неравномерный износ.

Если выше перечисленные недостатки питания нити накала индикаторных ламп для Вас несущественны, то можете использовать предложенную схему, если нет, то необходимо запитывать нити (параллельное соединение) накала переменным или импульсным током напряжением 1,2 В.

4

Re: Ретро часы на ИВ-6

Доброго дня. Собрал, работают. Собирал на лампах ИВ-11. В транзисторных ключах, управляющих анодами ламп, в цепях коллекторов сопротивления 56КОм. Остальное без изменений. С накалами ламп пришлось побороться. Последовательное соединение не есть хорошо. Первая и последняя лампы отличались от средних яркостью свечения. В итоге соединил все накалы параллельно и применил DC\DC Step down преобразователь, понизив напряжение до 1,5 В.

5

Re: Ретро часы на ИВ-6

Возможно на ИВ-6 разность яркости не так заметна, программно при динамической индикации длительность свечения первой и второй лампы дольше чем оставшиеся две, тем самым компенсируется разность свечения. Возможно питания 5 В накала на все лампы у Вас имело обратное подключение или схема у меня не правильно нарисована.  В любом случае параллельное питание нитей накала более предпочтительно.

6

Re: Ретро часы на ИВ-6

В любом случае схема вполне работоспособна. Попробую сделать с коррекцией. Заказал столяру под этот проект кейс из нат. дерева. Хочу на новый год сделать этими часами презент близким.

7

Re: Ретро часы на ИВ-6

Здравствуйте. Прошу помощи. Хочу повторить конструкцию с коррекцией времени. Но нет в наличии модуля DS3231, а есть модуль на DS1307. Пробовал скорректировать скетч под этот модуль, но при компиляции выдаёт ошибку. Библиотеку применял Arduino RTS.h Показания температуры не нужны, да и нету термодатчика в этом модуле. Подсобите со скетчем. Заранее благодарен, с ув. Александр.

8

Re: Ретро часы на ИВ-6

Опубликуйте Ваш скетч, я посмотрю что можно сделать

9

Re: Ретро часы на ИВ-6

liman324 пишет:

Опубликуйте Ваш скетч, я посмотрю что можно сделать

Опираясь на Ваш
#include <MsTimer2.h>
#include <Wire.h>
#include <iarduino_RTS.h>
  DS1307 clock;RTCDateTime DateTime;
  int an, segm,times,i;
  byte a[4],menu,year,month,day,hour,minute,w;

void setup(){  Wire.begin();clock.begin();MsTimer2::set(5, to_Timer);MsTimer2::start();
  // clock.setDateTime(__DATE__, __TIME__); // Устанавливаем время на часах, основываясь на времени компиляции скетча

также менял строку установки времени, поскольку 1307 не может устанавливаться по времени компиляции. И полностью убрал колонку температуры. Ошибку выдаёт сразу после строки подключения библиотеки. Не может иннициализировать 1307.

10

Re: Ретро часы на ИВ-6

Я не знаю что из итого выйдет, в железе не проверял, компиляция проходит нормально:

#include <MsTimer2.h>
#include <Wire.h> 
#include <iarduino_RTC.h>
iarduino_RTC time(RTC_DS1307);
  int an, segm,times,i,ss,mm,hh;
  byte a[4];
  int menu,year,month,day,hour,minute,w;
 
void setup(){  Wire.begin();time.begin();
MsTimer2::set(5, to_Timer);MsTimer2::start();
 // time.settime(0,51,21,27,10,15,2);  // 0  сек, 51 мин, 21 час, 27, октября, 2015 года, вторник
 pinMode(9,OUTPUT);  // D9  === A0
 pinMode(10,OUTPUT); // D10 === A1
 pinMode(11,OUTPUT); // D11 === A2
 pinMode(12,OUTPUT); // D12 === A3
 pinMode(2,OUTPUT);  // D2  === a
 pinMode(3,OUTPUT);  // D3  === b
 pinMode(4,OUTPUT);  // D4  === c
 pinMode(5,OUTPUT);  // D5  === d
 pinMode(6,OUTPUT);  // D6  === e
 pinMode(7,OUTPUT);  // D7  === f
 pinMode(8,OUTPUT);  // D8  === g
 pinMode(13,OUTPUT);// D13  === dp
 pinMode(A0,INPUT); // SQW
 ///// BUTTON //////
 pinMode(A1,INPUT); // SET
 pinMode(A2,INPUT); // +/sec
 pinMode(A3,INPUT); // -/temp
 ////  текущее время перенос в переменные коррекции времени

 year = time.gettime("y");
 month = time.gettime("m");
 day = time.gettime("d");
 hour = time.gettime("H");
 minute = time.gettime("i");
}
 
void loop(){
  if(millis()%1000==0){
    hh = time.gettime("H");
    mm = time.gettime("i");
    ss = time.gettime("s");
       delay(1); 
  times = hh*100+mm;}
  
  if(analogRead(A1)>900){menu++;delay(200);if(menu>5){menu=0;w=1;}}
////// вывод секунд - нажать и удерживать кнопку +/sec /////////////////////////////////////
  if(analogRead(A2)>900&&menu==0){times = ss;digitalWrite(13,HIGH);
  a[0]=11;
  a[1]=10;
  a[2]=times/10;
  a[3]=times%10;}

  
/////////// ВРЕМЯ /////////////  
  if(menu==0){times = hh*100+mm;
  a[0]=times/1000;
  a[1]=times/100%10;
  a[2]=times/10%10;
  a[3]=times%10%10;
  if(analogRead(A0)>900){digitalWrite(13,HIGH);}else{digitalWrite(13,LOW);}// dp
  }
///////// коррекция минут /////////////////
  if(menu==1){
    if(analogRead(A2)>900){minute++;delay(300);if(minute>59){minute=0;}}
    if(analogRead(A3)>900){minute--;delay(300);if(minute<0){minute=0;}}
    times=minute;
  a[0]=1;
  a[1]=10;
  a[2]=times/10;
  a[3]=times%10;}

///////// коррекция часов /////////////////
  if(menu==2){
    if(analogRead(A2)>900){hour++;delay(300);if(hour>23){hour=0;}}
    if(analogRead(A3)>900){hour--;delay(300);if(hour<0){hour=0;}}
    times=hour;
  a[0]=2;
  a[1]=10;
  a[2]=times/10;
  a[3]=times%10;}

///////// коррекция дата /////////////////
  if(menu==3){
    if(analogRead(A2)>900){day++;delay(300);if(day>31){day=0;}}
    if(analogRead(A3)>900){day--;delay(300);if(day<0){day=0;}}
    times=day;
  a[0]=3;
  a[1]=10;
  a[2]=times/10;
  a[3]=times%10;}

///////// коррекция месяц /////////////////
  if(menu==4){
    if(analogRead(A2)>900){month++;delay(300);if(month>12){month=0;}}
    if(analogRead(A3)>900){month--;delay(300);if(month<0){month=0;}}
    times=month;
  a[0]=4;
  a[1]=10;
  a[2]=times/10;
  a[3]=times%10;}

///////// коррекция год /////////////////
  if(menu==5){
    if(analogRead(A2)>900){year++;delay(300);if(year>99){year=19;}}
    if(analogRead(A3)>900){year--;delay(300);if(year<19){year=19;}}
    times=year;
  a[0]=5;
  a[1]=10;
  a[2]=times/10;
  a[3]=times%10;}
  
if(w==1){
  time.settime(59,minute,hour,day,month,year+2000,2);  // 0  сек, 51 мин, 21 час, 27, октября, 2015 года, вторник
 w=0;}

  } // loop
 
void to_Timer(){
  switch(i){
    case 0: segm=a[0]; an=0; anod(); segment();delay(2);break;
    case 1: segm=a[1]; an=1; anod(); segment();delay(1);break;
    case 2: segm=a[2]; an=2; anod(); segment();break;
    case 3: segm=a[3]; an=3; anod(); segment();break;}i++;if(i>3){i=0;}}
 
 
void segment(){
  switch(segm){                                                                 
             //  A       B       C       D       E       F       G  
    case 0: ch(2,0);ch(3,0);ch(4,0);ch(5,0);ch(6,0);ch(7,0);ch(8,1);break;// 0 
    case 1: ch(2,1);ch(3,0);ch(4,0);ch(5,1);ch(6,1);ch(7,1);ch(8,1);break;// 1
    case 2: ch(2,0);ch(3,0);ch(4,1);ch(5,0);ch(6,0);ch(7,1);ch(8,0);break;// 2
    case 3: ch(2,0);ch(3,0);ch(4,0);ch(5,0);ch(6,1);ch(7,1);ch(8,0);break;// 3   
    case 4: ch(2,1);ch(3,0);ch(4,0);ch(5,1);ch(6,1);ch(7,0);ch(8,0);break;// 4 
    case 5: ch(2,0);ch(3,1);ch(4,0);ch(5,0);ch(6,1);ch(7,0);ch(8,0);break;// 5 
    case 6: ch(2,0);ch(3,1);ch(4,0);ch(5,0);ch(6,0);ch(7,0);ch(8,0);break;// 6 
    case 7: ch(2,0);ch(3,0);ch(4,0);ch(5,1);ch(6,1);ch(7,1);ch(8,1);break;// 7 
    case 8: ch(2,0);ch(3,0);ch(4,0);ch(5,0);ch(6,0);ch(7,0);ch(8,0);break;// 8
    case 9: ch(2,0);ch(3,0);ch(4,0);ch(5,0);ch(6,1);ch(7,0);ch(8,0);break;// 9  
    case 10:ch(2,1);ch(3,1);ch(4,1);ch(5,1);ch(6,1);ch(7,1);ch(8,1);break;// ПУСТО  
    case 11:ch(2,0);ch(3,1);ch(4,0);ch(5,0);ch(6,1);ch(7,0);ch(8,0);break;// S 
    case 12:ch(2,1);ch(3,1);ch(4,1);ch(5,0);ch(6,0);ch(7,0);ch(8,0);break;// t  
  }}
void anod(){
  switch(an){                                                             
    case 0:ch(9,0);ch(10,1);ch(11,1);ch(12,1);break;  
    case 1:ch(9,1);ch(10,0);ch(11,1);ch(12,1);break; 
    case 2:ch(9,1);ch(10,1);ch(11,0);ch(12,1);break;
    case 3:ch(9,1);ch(10,1);ch(11,1);ch(12,0);break;
  }}

  void ch(int pin, int logic){digitalWrite(pin,logic);}

11

Re: Ретро часы на ИВ-6

Огромное спасибо, буду пробовать.Сейчас на работе, особо времени нет.

12

Re: Ретро часы на ИВ-6

добрый день, а схема точно правильная?  транзистори так и должны быть?

13

Re: Ретро часы на ИВ-6

Схема рабочая, часы собраны и работают

14

Re: Ретро часы на ИВ-6

assassinpetro пишет:

добрый день, а схема точно правильная?  транзистори так и должны быть?

Рабочая. Один экземпляр уже работает на ИВ-11.

15

Re: Ретро часы на ИВ-6

В строке "if(A0==HIGH){digitalWrite(13,HIGH);}else{digitalWrite(13,LOW);}// dp" ошибка!
Лучше так "if (analogRead(A0) > 900)..."
Я чуть голову не сломал, почему точка не мигает:)

16

Re: Ретро часы на ИВ-6

Исправил, самое интересное при компилировании не было ошибок. Ранее скетч в железе не проверялся.

17

Re: Ретро часы на ИВ-6

Добрый вечер!

liman324, хочу добавить еще пару индикаторов для отображения секунд, весь проект сделать на ИВ-22.
Как в скетче тогда реализовать отдельно вывод секунд?
И, как я правильно понял, для динамической индикации возможно задействовать так же выводы 0(RX) и 1(ТХ) Аrduino Nano.
Преобразователь 5 > 27В сделать на специализированной микросхеме MC34063, зарекомендовавшей себя с позитивной стороны,(часто использовал в своих проектах) при этом можно спокойно отказаться от IRF740 и BC547, тем самым упростив себе задачу по разводке платы.

18

Re: Ретро часы на ИВ-6

Я вывожу время как число > 12ч 32мин на индикатор выводится как 1232, после разбираю это число на отдельные числа:
DateTime=clock.getDateTime();// опрос времени
  times = DateTime.hour*100+DateTime.minute;
  a[0]=times/1000;
  a[1]=times/100%10;
  a[2]=times/10%10;
  a[3]=times%10%10;

добавление секунд отдельно от основного времени:

a[4] = DateTime.seconds/10;
a[5] = DateTime.seconds%10;

Выходы 0(RX) и 1(ТХ) кончено можно задействовать.

Но Вам придется подумать как реализовать питание нитей накала, последовательное подключение всех нитей накала в Вашем случае не подходит, я соединил последовательно нити накала для простоты реализации, для ИВ-22 получилось 1.25 В на лампу, или 1 В для ИВ-6. У Вас будет 6 ламп, при последовательном подключении нитей накала напряжение будет 0.83 В при допустимом от 1 В до 1.32 В

19

Re: Ретро часы на ИВ-6

Доброе утро.
Да, с питанием накала я подумаю, как лучше реализовать. Последовательное соединение мне изначально не нравится, из-за возможного неравномерного свечения индикаторов, и нужно иметь некоторый запас для подбора.
Нужно ещё полистать подшивки "Радио" седых годов, там найдется какая нибудь занятная информация.
Сегодня вечером соберу в макете свой вариант питания и отпишусь.

20

Re: Ретро часы на ИВ-6

Собрал вчера на макетке повышающий преобразователь 5 > 27В на МС34063 без внешнего транзистора, схема из даташита, все ок, ток 100мА держит свободно, этого более чем достаточно, сглаживающий конденсатор фильтра поставил 47мкФ.
С понижающим step-down 5 > 1.2В пока не так все просто - потребление 6 индикаторов 650-700 мА, одна 34063 не вывозит, нагревается, ток начинает падать, частота с расчетных 50кГц улетает  к 80-120. С внешним транзистором все заметно лучше, под рукой был MJE13003, вывозит спокой ток 1А при фактическом падении напряжения 0,1-0,2В. Но нужен радиатор и/или транзистор в корпусе ТО-220.
Сегодня завтра попробую то, что есть в столе - NCP3063, без внешнего транзистора, и со внешним полевиком, хотя б тот же IRF740 с суррогатным драйвером на BC546/556.
Линейные стабилизаторы там вообще не катят.

21

Re: Ретро часы на ИВ-6

Более простым решением было бы применить обычный маломощный трансформатор с тремя обмотками, первая на 1.2 В, вторая на 27 В и третья для стабилизатора 5 В. Но тут сами смотрите, как лучше. Для меня важным было питать часы без лишних хлопот от обычной зарядки телефона.

22 (2019-12-06 13:02:54 отредактировано Feanor)

Re: Ретро часы на ИВ-6

Да, для меня тоже важным является возможность использования зарядки от сотового телефона. А трансформатор ещё найти нужно, и по габаритам совсем не ок, но в плане схемотехники один и самых простых вариантов.
Поэтому преобразователь на рассыпухе и является моим вариантом без хлопот.

23

Re: Ретро часы на ИВ-6

Можно запаралелить по 3 лампы и подавать 5В через токо-ограничивающие резисторы.  Неравномерность свечения я на своих часах особо не замечаю при хорошей яркости свечения сегментов.

24

Re: Ретро часы на ИВ-6

liman324 пишет:

Можно запаралелить по 3 лампы и подавать 5В через токо-ограничивающие резисторы.

Этот вариант тоже рассматривался, но затем отпал.

25

Re: Ретро часы на ИВ-6

И ещё нюанс.
В строке
"    if(analogRead(A3)>900){hour--;delay(300);if(hour<0){hour=0;}}"
условие никогда не сработает, ибо hour это байт и 0-- станет 255.
По идее надо так
"    if(analogRead(A3)>900){hour--;delay(300);if(hour>23){hour=23;}}"

Аналогично и с другими значениями.