1

Тема: Ретро часы на ИН-16 (Arduino)

Основная статья - http://rcl-radio.ru/?p=67087
http://forum.rcl-radio.ru/uploads/images/2019/10/93de30e626df187f291ad20efa4db322.png

#include <MsTimer2.h>
#include <Wire.h> 
#include <DS3231.h>
#include <EEPROM.h>
  DS3231 clock;RTCDateTime DateTime;
  int an, segm,times,i;
  byte a[4];

void setup(){  Wire.begin();clock.begin();MsTimer2::set(4, to_Timer);MsTimer2::start();
  // clock.setDateTime(__DATE__, __TIME__); // Устанавливаем время на часах, основываясь на времени компиляции скетча
 pinMode(2,OUTPUT); // D2 === H1
 pinMode(3,OUTPUT); // D3 === H2
 pinMode(4,OUTPUT); // D4 === H3
 pinMode(5,OUTPUT); // D5 === H4
 pinMode(6,OUTPUT);  // D6  === A0 3 ид1 
 pinMode(7,OUTPUT);  // D7  === A1 6 ид1
 pinMode(8,OUTPUT);  // D8  === A2 7 ид1
 pinMode(10,OUTPUT); // D10 === A3 4 ид1
 pinMode(9,OUTPUT);  // ВЫХОД СИГНАЛА ГЕНЕРАТОРА 16-30 кГц для высоковольтного источника питания
  TCCR1A = 0x40;TCCR1B = 0x09;OCR1A = 400;//270=30кГц, 300=26кГц, 400=20кГц, 500=16кГц - изминение яркости индикаторов
}

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;
  }

void to_Timer(){
  switch(i){
    case 0: segm=a[0]; an=0; anod(); segment();delay(1);break;
    case 1: segm=a[1]; an=1; anod(); segment();delay(1);break;
    case 2: segm=a[2]; an=2; anod(); segment();delay(1);break;
    case 3: segm=a[3]; an=3; anod(); segment();delay(1);break;}i++;if(i>3){i=0;}}
  
  
void segment(){
  switch(segm){                                                                 
    case 0: digitalWrite(10,LOW);digitalWrite(8,LOW);digitalWrite(7,LOW);digitalWrite(6,LOW);break;     // DEC 0 = 0b0000
    case 1: digitalWrite(10,LOW);digitalWrite(8,LOW);digitalWrite(7,LOW);digitalWrite(6,HIGH);break;    // DEC 1 = 0b0001
    case 2: digitalWrite(10,LOW);digitalWrite(8,LOW);digitalWrite(7,HIGH);digitalWrite(6,LOW);break;    // DEC 2 = 0b0010
    case 3: digitalWrite(10,LOW);digitalWrite(8,LOW);digitalWrite(7,HIGH);digitalWrite(6,HIGH);break;   // DEC 3 = 0b0011
    case 4: digitalWrite(10,LOW);digitalWrite(8,HIGH);digitalWrite(7,LOW);digitalWrite(6,LOW);break;    // DEC 4 = 0b0100
    case 5: digitalWrite(10,LOW);digitalWrite(8,HIGH);digitalWrite(7,LOW);digitalWrite(6,HIGH);break;   // DEC 5 = 0b0101
    case 6: digitalWrite(10,LOW);digitalWrite(8,HIGH);digitalWrite(7,HIGH);digitalWrite(6,LOW);break;   // DEC 6 = 0b0110
    case 7: digitalWrite(10,LOW);digitalWrite(8,HIGH);digitalWrite(7,HIGH);digitalWrite(6,HIGH);break;  // DEC 7 = 0b0111
    case 8: digitalWrite(10,HIGH);digitalWrite(8,LOW);digitalWrite(7,LOW);digitalWrite(6,LOW);break;    // DEC 8 = 0b1000
    case 9: digitalWrite(10,HIGH);digitalWrite(8,LOW);digitalWrite(7,LOW);digitalWrite(6,HIGH);break;   // DEC 9 = 0b0110
  }}
void anod(){
  switch(an){                                                             
    case 0: digitalWrite(2,HIGH);digitalWrite(3,LOW);digitalWrite(4,LOW);digitalWrite(5,LOW);break;    
    case 1: digitalWrite(2,LOW);digitalWrite(3,HIGH);digitalWrite(4,LOW);digitalWrite(5,LOW);break;   
    case 2: digitalWrite(2,LOW);digitalWrite(3,LOW);digitalWrite(4,HIGH);digitalWrite(5,LOW);break;   
    case 3: digitalWrite(2,LOW);digitalWrite(3,LOW);digitalWrite(4,LOW);digitalWrite(5,HIGH);break;   
  }}  

2

Re: Ретро часы на ИН-16 (Arduino)

Доброго дня. Хотел ввести кнопки коррекции времени. По Вашему совету изменил скетч. Теперь не компилируется. Вот скетч:
#include <MsTimer2.h>
#include <Wire.h>
#include <DS3231.h>
  DS3231 clock;RTCDateTime DateTime;
  int an, segm,times,i;
  byte a[4];
  int h,m,x;
void setup(){  Wire.begin();clock.begin();MsTimer2::set(4, to_Timer);MsTimer2::start();
  // clock.setDateTime(__DATE__, __TIME__); // Устанавливаем время на часах, основываясь на времени компиляции скетча
pinMode(2,OUTPUT); // D2 === H1
pinMode(3,OUTPUT); // D3 === H2
pinMode(4,OUTPUT); // D4 === H3
pinMode(5,OUTPUT); // D5 === H4
pinMode(6,OUTPUT);  // D6  === A0 3 ид1
pinMode(7,OUTPUT);  // D7  === A1 6 ид1
pinMode(8,OUTPUT);  // D8  === A2 7 ид1
pinMode(10,OUTPUT); // D10 === A3 4 ид1
pinMode(9,OUTPUT);  // ВЫХОД СИГНАЛА ГЕНЕРАТОРА 16-30 кГц для высоковольтного источника питания
  TCCR1A = 0x40;TCCR1B = 0x09;OCR1A = 400;//270=30кГц, 300=26кГц, 400=20кГц, 500=16кГц - изменение яркости индикаторов
  pinMode(11,INPUT);
pinMode(12,INPUT);

DateTime=clock.getDateTime();// опрос времени
h = DateTime.hour;
m = DateTime.minute;
}

void loop(){
  if(digitalRead(11)==HIGH){x=1;h++;if(h>23){h=0;}delay(200);}
if(digitalRead(12)==HIGH){x=1;m++;if(m>59){m=0;}delay(200);}

if(x==1){x=0;setDateTime(2020, 1, 28, h, m, 0);}
}
  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;
  }

void to_Timer(){
  switch(i){
    case 0: segm=a[0]; an=0; anod(); segment();delay(1);break;
    case 1: segm=a[1]; an=1; anod(); segment();delay(1);break;
    case 2: segm=a[2]; an=2; anod(); segment();delay(1);break;
    case 3: segm=a[3]; an=3; anod(); segment();delay(1);break;}i++;if(i>3){i=0;}}


void segment(){
  switch(segm){                                                                 
    case 0: digitalWrite(10,LOW);digitalWrite(8,LOW);digitalWrite(7,LOW);digitalWrite(6,LOW);break;     // DEC 0 = 0b0000
    case 1: digitalWrite(10,LOW);digitalWrite(8,LOW);digitalWrite(7,LOW);digitalWrite(6,HIGH);break;    // DEC 1 = 0b0001
    case 2: digitalWrite(10,LOW);digitalWrite(8,LOW);digitalWrite(7,HIGH);digitalWrite(6,LOW);break;    // DEC 2 = 0b0010
    case 3: digitalWrite(10,LOW);digitalWrite(8,LOW);digitalWrite(7,HIGH);digitalWrite(6,HIGH);break;   // DEC 3 = 0b0011
    case 4: digitalWrite(10,LOW);digitalWrite(8,HIGH);digitalWrite(7,LOW);digitalWrite(6,LOW);break;    // DEC 4 = 0b0100
    case 5: digitalWrite(10,LOW);digitalWrite(8,HIGH);digitalWrite(7,LOW);digitalWrite(6,HIGH);break;   // DEC 5 = 0b0101
    case 6: digitalWrite(10,LOW);digitalWrite(8,HIGH);digitalWrite(7,HIGH);digitalWrite(6,LOW);break;   // DEC 6 = 0b0110
    case 7: digitalWrite(10,LOW);digitalWrite(8,HIGH);digitalWrite(7,HIGH);digitalWrite(6,HIGH);break;  // DEC 7 = 0b0111
    case 8: digitalWrite(10,HIGH);digitalWrite(8,LOW);digitalWrite(7,LOW);digitalWrite(6,LOW);break;    // DEC 8 = 0b1000
    case 9: digitalWrite(10,HIGH);digitalWrite(8,LOW);digitalWrite(7,LOW);digitalWrite(6,HIGH);break;   // DEC 9 = 0b0110
  }}
void anod(){
  switch(an){                                                             
    case 0: digitalWrite(2,HIGH);digitalWrite(3,LOW);digitalWrite(4,LOW);digitalWrite(5,LOW);break;   
    case 1: digitalWrite(2,LOW);digitalWrite(3,HIGH);digitalWrite(4,LOW);digitalWrite(5,LOW);break;   
    case 2: digitalWrite(2,LOW);digitalWrite(3,LOW);digitalWrite(4,HIGH);digitalWrite(5,LOW);break;   
    case 3: digitalWrite(2,LOW);digitalWrite(3,LOW);digitalWrite(4,LOW);digitalWrite(5,HIGH);break;   
  }}

3

Re: Ретро часы на ИН-16 (Arduino)

#include <MsTimer2.h>
#include <Wire.h>
#include <DS3231.h>
DS3231 clock;RTCDateTime DateTime;
int an, segm,times,i;
byte a[4];
int h,m,x;
void setup(){ Wire.begin();clock.begin();MsTimer2::set(4, to_Timer);MsTimer2::start();
// clock.setDateTime(__DATE__, __TIME__); // Устанавливаем время на часах, основываясь на времени компиляции скетча
pinMode(2,OUTPUT); // D2 === H1
pinMode(3,OUTPUT); // D3 === H2
pinMode(4,OUTPUT); // D4 === H3
pinMode(5,OUTPUT); // D5 === H4
pinMode(6,OUTPUT); // D6 === A0 3 ид1
pinMode(7,OUTPUT); // D7 === A1 6 ид1
pinMode(8,OUTPUT); // D8 === A2 7 ид1
pinMode(10,OUTPUT); // D10 === A3 4 ид1
pinMode(9,OUTPUT); // ВЫХОД СИГНАЛА ГЕНЕРАТОРА 16-30 кГц для высоковольтного источника питания
TCCR1A = 0x40;TCCR1B = 0x09;OCR1A = 400;//270=30кГц, 300=26кГц, 400=20кГц, 500=16кГц — изменение яркости индикаторов
pinMode(11,INPUT);
pinMode(12,INPUT);

DateTime=clock.getDateTime();// опрос времени
h = DateTime.hour;
m = DateTime.minute;
}

void loop(){
if(digitalRead(11)==HIGH){x=1;h++;if(h>23){h=0;}delay(200);}
if(digitalRead(12)==HIGH){x=1;m++;if(m>59){m=0;}delay(200);}

if(x==1){x=0;clock.setDateTime(2020, 1, 28, h, m, 0);}

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;
}

void to_Timer(){
switch(i){
case 0: segm=a[0]; an=0; anod(); segment();delay(1);break;
case 1: segm=a[1]; an=1; anod(); segment();delay(1);break;
case 2: segm=a[2]; an=2; anod(); segment();delay(1);break;
case 3: segm=a[3]; an=3; anod(); segment();delay(1);break;}i++;if(i>3){i=0;}}

void segment(){
switch(segm){
case 0: digitalWrite(10,LOW);digitalWrite(8,LOW);digitalWrite(7,LOW);digitalWrite(6,LOW);break; // DEC 0 = 0b0000
case 1: digitalWrite(10,LOW);digitalWrite(8,LOW);digitalWrite(7,LOW);digitalWrite(6,HIGH);break; // DEC 1 = 0b0001
case 2: digitalWrite(10,LOW);digitalWrite(8,LOW);digitalWrite(7,HIGH);digitalWrite(6,LOW);break; // DEC 2 = 0b0010
case 3: digitalWrite(10,LOW);digitalWrite(8,LOW);digitalWrite(7,HIGH);digitalWrite(6,HIGH);break; // DEC 3 = 0b0011
case 4: digitalWrite(10,LOW);digitalWrite(8,HIGH);digitalWrite(7,LOW);digitalWrite(6,LOW);break; // DEC 4 = 0b0100
case 5: digitalWrite(10,LOW);digitalWrite(8,HIGH);digitalWrite(7,LOW);digitalWrite(6,HIGH);break; // DEC 5 = 0b0101
case 6: digitalWrite(10,LOW);digitalWrite(8,HIGH);digitalWrite(7,HIGH);digitalWrite(6,LOW);break; // DEC 6 = 0b0110
case 7: digitalWrite(10,LOW);digitalWrite(8,HIGH);digitalWrite(7,HIGH);digitalWrite(6,HIGH);break; // DEC 7 = 0b0111
case 8: digitalWrite(10,HIGH);digitalWrite(8,LOW);digitalWrite(7,LOW);digitalWrite(6,LOW);break; // DEC 8 = 0b1000
case 9: digitalWrite(10,HIGH);digitalWrite(8,LOW);digitalWrite(7,LOW);digitalWrite(6,HIGH);break; // DEC 9 = 0b0110
}}
void anod(){
switch(an){
case 0: digitalWrite(2,HIGH);digitalWrite(3,LOW);digitalWrite(4,LOW);digitalWrite(5,LOW);break;
case 1: digitalWrite(2,LOW);digitalWrite(3,HIGH);digitalWrite(4,LOW);digitalWrite(5,LOW);break;
case 2: digitalWrite(2,LOW);digitalWrite(3,LOW);digitalWrite(4,HIGH);digitalWrite(5,LOW);break;
case 3: digitalWrite(2,LOW);digitalWrite(3,LOW);digitalWrite(4,LOW);digitalWrite(5,HIGH);break;
}}

4

Re: Ретро часы на ИН-16 (Arduino)

https://www.youtube.com/watch?v=kcmuz48YEdA

5

Re: Ретро часы на ИН-16 (Arduino)

Отлично получилось!!!

6

Re: Ретро часы на ИН-16 (Arduino)

Спасибо на добром слове. Поедут эти часы в Германию. И друг из Хмельницкого просит аналогичные.Даже лампы уже выслал ИН-4, круглые такие, как иллюминатор

7

Re: Ретро часы на ИН-16 (Arduino)

Модуль DS3231 довольно трудно достать в Запорожье. У нас навалом DS1302. Как бы его состыковать с этим проектом?

8

Re: Ретро часы на ИН-16 (Arduino)

Посмотрю что можно сделать, скетч опубликую на форуме.

9

Re: Ретро часы на ИН-16 (Arduino)

Я не уверен, что будет все правильно работать.
При прошивке скетча, освобождать пины 0 и 1

#include <MsTimer2.h>
#include <Wire.h>
#include <iarduino_RTC.h>
iarduino_RTC time(RTC_DS1302, 0, 1, 13); // RST, CLK, DAT
int an, segm,times,i;
byte a[4];
int h,m,x;
void setup(){ Wire.begin();MsTimer2::set(4, to_Timer);MsTimer2::start();
// time.settime(0,30,18,24,10,19,4); // Записываем время в модуль: сек, мин, час, дата, месяц, год (2019 = 19), день недели (пон = 1).
pinMode(2,OUTPUT); // D2 === H1
pinMode(3,OUTPUT); // D3 === H2
pinMode(4,OUTPUT); // D4 === H3
pinMode(5,OUTPUT); // D5 === H4
pinMode(6,OUTPUT); // D6 === A0 3 ид1
pinMode(7,OUTPUT); // D7 === A1 6 ид1
pinMode(8,OUTPUT); // D8 === A2 7 ид1
pinMode(10,OUTPUT); // D10 === A3 4 ид1
pinMode(9,OUTPUT); // ВЫХОД СИГНАЛА ГЕНЕРАТОРА 16-30 кГц для высоковольтного источника питания
TCCR1A = 0x40;TCCR1B = 0x09;OCR1A = 400;//270=30кГц, 300=26кГц, 400=20кГц, 500=16кГц — изменение яркости индикаторов
pinMode(11,INPUT);
pinMode(12,INPUT);

  time.gettime();
h = time.Hours;
m = time.minutes;
}

void loop(){
if(digitalRead(11)==HIGH){x=1;h++;if(h>23){h=0;}delay(200);}
if(digitalRead(12)==HIGH){x=1;m++;if(m>59){m=0;}delay(200);}

if(x==1){x=0;time.settime(0,m,h,24,10,19,4);}

 time.gettime();
times = time.Hours*100+time.minutes;
a[0]=times/1000;
a[1]=times/100%10;
a[2]=times/10%10;
a[3]=times%10%10;
}

void to_Timer(){
switch(i){
case 0: segm=a[0]; an=0; anod(); segment();delay(1);break;
case 1: segm=a[1]; an=1; anod(); segment();delay(1);break;
case 2: segm=a[2]; an=2; anod(); segment();delay(1);break;
case 3: segm=a[3]; an=3; anod(); segment();delay(1);break;}i++;if(i>3){i=0;}}

void segment(){
switch(segm){
case 0: digitalWrite(10,LOW);digitalWrite(8,LOW);digitalWrite(7,LOW);digitalWrite(6,LOW);break; // DEC 0 = 0b0000
case 1: digitalWrite(10,LOW);digitalWrite(8,LOW);digitalWrite(7,LOW);digitalWrite(6,HIGH);break; // DEC 1 = 0b0001
case 2: digitalWrite(10,LOW);digitalWrite(8,LOW);digitalWrite(7,HIGH);digitalWrite(6,LOW);break; // DEC 2 = 0b0010
case 3: digitalWrite(10,LOW);digitalWrite(8,LOW);digitalWrite(7,HIGH);digitalWrite(6,HIGH);break; // DEC 3 = 0b0011
case 4: digitalWrite(10,LOW);digitalWrite(8,HIGH);digitalWrite(7,LOW);digitalWrite(6,LOW);break; // DEC 4 = 0b0100
case 5: digitalWrite(10,LOW);digitalWrite(8,HIGH);digitalWrite(7,LOW);digitalWrite(6,HIGH);break; // DEC 5 = 0b0101
case 6: digitalWrite(10,LOW);digitalWrite(8,HIGH);digitalWrite(7,HIGH);digitalWrite(6,LOW);break; // DEC 6 = 0b0110
case 7: digitalWrite(10,LOW);digitalWrite(8,HIGH);digitalWrite(7,HIGH);digitalWrite(6,HIGH);break; // DEC 7 = 0b0111
case 8: digitalWrite(10,HIGH);digitalWrite(8,LOW);digitalWrite(7,LOW);digitalWrite(6,LOW);break; // DEC 8 = 0b1000
case 9: digitalWrite(10,HIGH);digitalWrite(8,LOW);digitalWrite(7,LOW);digitalWrite(6,HIGH);break; // DEC 9 = 0b0110
}}
void anod(){
switch(an){
case 0: digitalWrite(2,HIGH);digitalWrite(3,LOW);digitalWrite(4,LOW);digitalWrite(5,LOW);break;
case 1: digitalWrite(2,LOW);digitalWrite(3,HIGH);digitalWrite(4,LOW);digitalWrite(5,LOW);break;
case 2: digitalWrite(2,LOW);digitalWrite(3,LOW);digitalWrite(4,HIGH);digitalWrite(5,LOW);break;
case 3: digitalWrite(2,LOW);digitalWrite(3,LOW);digitalWrite(4,LOW);digitalWrite(5,HIGH);break;
}}

10

Re: Ретро часы на ИН-16 (Arduino)

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

11

Re: Ретро часы на ИН-16 (Arduino)

Судя по скетчу модуль часов подключен к аналоговым пинам ардуино?

12

Re: Ретро часы на ИН-16 (Arduino)

Пардон, всё таки к цифровым. Но если освобождать пины 0 и 1 как запрограмировать модуль часов?

13

Re: Ретро часы на ИН-16 (Arduino)

При прошивке отключать модуль часов от пинов 0 и 1

14

Re: Ретро часы на ИН-16 (Arduino)

Приветствую! Повторил эти же часы, только с лампами ИН-12Б. Схема , опять же, стабильная, прошивка работоспособная на 100%. Но вот с повышающим преобразователем не всё так гладко. Опять закипает мосфет. В прошлый раз удалось  это решить, установив другой дроссель. В этот раз замена 8-и! дросселей различной индуктивности ни к чему ни привела. Уже грешил на "поддельный" IRF. Поставил полный аналог, японец, но с меньшим сопротивлением открытого канала-тот же перегрев. Думаю оптимизировать эту проблему. Нужна другая схема питания. Попробую вместо дросселя применить повышающий трансформатор с зазором на пермалое.

15

Re: Ретро часы на ИН-16 (Arduino)

А Вы пробовали менять частоту преобразователя:
TCCR1A = 0x40;TCCR1B = 0x09;OCR1A = 400;//270=30кГц, 300=26кГц, 400=20кГц, 500=16кГц
На мосфете стоит радиатор?

Вот как сделано у меня
http://forum.rcl-radio.ru/uploads/images/2020/02/5d0c4569c0060a9f78b95e92ea8367f8.jpg

16

Re: Ретро часы на ИН-16 (Arduino)

Здравствуйте. Конечно пробовал. Это первое, что я пробовал.

17

Re: Ретро часы на ИН-16 (Arduino)

http://forum.rcl-radio.ru/uploads/images/2020/02/760aa3ad6a003ba9695e6dc0fa431990.jpg
Думаю нужно автотрансформаторное включение накопительного дросселя.

18

Re: Ретро часы на ИН-16 (Arduino)

Так же можно повысить напряжение питания до 12В, это уменьшит нагрев транзистора
Индуктивность должна быть в пределах 200...300 мкГн, если меньше то мосфет будет греться

19

Re: Ретро часы на ИН-16 (Arduino)

Можно увеличить сопротивление R1 до 10 К и больше

20

Re: Ретро часы на ИН-16 (Arduino)

Увеличение сопротивления R1 ведёт к уменьшению токов анодов ламп? А смысл? На счёт 12 В, думаю Вы правы. Хотя всё больше склоняюсь к мысли применения полноценного обратноходового  импульсного блока питания на два напряжения. Только габариты вырастут.

21

Re: Ретро часы на ИН-16 (Arduino)

Доброго вечера. Оптимизировал и решил проблему нестабильности преобразователя напряжения. Но только под свои нужды. Я предполагаю поставить такие часы в "серию", но питать их сугубо от сети. Настольный, или настенный вариант. Так вот: я пошёл путём, как в математике, "от противного". Зачем этот преобразователь нужен?  Прочёл весьма обширную статью советских времён об этих лампах и в большинстве случаев питание газоразрядных индикаторов проводилось непосредственно сетью. Собирался примитивный однополупериодный выпрямитель на диоде Д226Б и с ним последовательно в цепь полуваттный резистор от 27 до 82 КОм.И в анод. Катоды управляются также дешифратором. Можно утверждать, что нет гальванической развязки? Но при использовании полностью диэлектрического корпуса это не вопрос. Можно также ужесточить требование к подключению, чтобы сетевой "0" приходился именно на общую шину питания. Второй вариант- применения малогабаритного трансформатора, типа ТПП до 10 Ватт. При последовательном включении всех четырёх обмоток получаем напряжение около 80 Вольт. Далее выпрямитель с удвоителем напряжения и получаем требуемые 160 В 50 мА.И полная развязка от сети. Первый вариант уже собран "на коленке"и работает уже 4 часа. Ничего не греется, лампы светятся даже "веселее" , чем с применением преобразователя напряжения. Последовательно с диодом резистор 68КОм, пол ватта.

22

Re: Ретро часы на ИН-16 (Arduino)

Кстати, неплохо было бы в скетче предусмотреть программный перебор всех цифр во всех разрядах с заданным временным интервалом, например раз в полчаса. Это нужно, чтобы не происходило окисление катодов цифр лампы, в которых не так часто происходит смена чисел. В часах и десятках минут. Так рекомендуют многие. Это линейно отражается на сроке службы ламп.

23

Re: Ретро часы на ИН-16 (Arduino)

Протестируйте перебор цифр каждые полчаса:

#include <MsTimer2.h>
#include <Wire.h>
#include <DS3231.h>
DS3231 clock;RTCDateTime DateTime;
int an, segm,times,i;
byte a[4];
int h,m,x;
unsigned long t;

void setup(){ Wire.begin();clock.begin();MsTimer2::set(4, to_Timer);MsTimer2::start();
// clock.setDateTime(__DATE__, __TIME__); // Устанавливаем время на часах, основываясь на времени компиляции скетча
pinMode(2,OUTPUT); // D2 === H1
pinMode(3,OUTPUT); // D3 === H2
pinMode(4,OUTPUT); // D4 === H3
pinMode(5,OUTPUT); // D5 === H4
pinMode(6,OUTPUT); // D6 === A0 3 ид1
pinMode(7,OUTPUT); // D7 === A1 6 ид1
pinMode(8,OUTPUT); // D8 === A2 7 ид1
pinMode(10,OUTPUT); // D10 === A3 4 ид1
pinMode(9,OUTPUT); // ВЫХОД СИГНАЛА ГЕНЕРАТОРА 16-30 кГц для высоковольтного источника питания
TCCR1A = 0x40;TCCR1B = 0x09;OCR1A = 400;//270=30кГц, 300=26кГц, 400=20кГц, 500=16кГц — изменение яркости индикаторов
pinMode(11,INPUT);
pinMode(12,INPUT);

DateTime=clock.getDateTime();// опрос времени
h = DateTime.hour;
m = DateTime.minute;
}

void loop(){
if(digitalRead(11)==HIGH){x=1;h++;if(h>23){h=0;}delay(200);}
if(digitalRead(12)==HIGH){x=1;m++;if(m>59){m=0;}delay(200);}

if(x==1){x=0;clock.setDateTime(2020, 1, 28, h, m, 0);}

DateTime=clock.getDateTime();// опрос времени

if(DateTime.minute==30&&DateTime.second<10){
  switch(DateTime.second){
    case 0: times=0000;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;
    }
  }
else{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;
}

void to_Timer(){
switch(i){
case 0: segm=a[0]; an=0; anod(); segment();delay(1);break;
case 1: segm=a[1]; an=1; anod(); segment();delay(1);break;
case 2: segm=a[2]; an=2; anod(); segment();delay(1);break;
case 3: segm=a[3]; an=3; anod(); segment();delay(1);break;}i++;if(i>3){i=0;}}

void segment(){
switch(segm){
case 0: digitalWrite(10,LOW);digitalWrite(8,LOW);digitalWrite(7,LOW);digitalWrite(6,LOW);break; // DEC 0 = 0b0000
case 1: digitalWrite(10,LOW);digitalWrite(8,LOW);digitalWrite(7,LOW);digitalWrite(6,HIGH);break; // DEC 1 = 0b0001
case 2: digitalWrite(10,LOW);digitalWrite(8,LOW);digitalWrite(7,HIGH);digitalWrite(6,LOW);break; // DEC 2 = 0b0010
case 3: digitalWrite(10,LOW);digitalWrite(8,LOW);digitalWrite(7,HIGH);digitalWrite(6,HIGH);break; // DEC 3 = 0b0011
case 4: digitalWrite(10,LOW);digitalWrite(8,HIGH);digitalWrite(7,LOW);digitalWrite(6,LOW);break; // DEC 4 = 0b0100
case 5: digitalWrite(10,LOW);digitalWrite(8,HIGH);digitalWrite(7,LOW);digitalWrite(6,HIGH);break; // DEC 5 = 0b0101
case 6: digitalWrite(10,LOW);digitalWrite(8,HIGH);digitalWrite(7,HIGH);digitalWrite(6,LOW);break; // DEC 6 = 0b0110
case 7: digitalWrite(10,LOW);digitalWrite(8,HIGH);digitalWrite(7,HIGH);digitalWrite(6,HIGH);break; // DEC 7 = 0b0111
case 8: digitalWrite(10,HIGH);digitalWrite(8,LOW);digitalWrite(7,LOW);digitalWrite(6,LOW);break; // DEC 8 = 0b1000
case 9: digitalWrite(10,HIGH);digitalWrite(8,LOW);digitalWrite(7,LOW);digitalWrite(6,HIGH);break; // DEC 9 = 0b0110
}}
void anod(){
switch(an){
case 0: digitalWrite(2,HIGH);digitalWrite(3,LOW);digitalWrite(4,LOW);digitalWrite(5,LOW);break;
case 1: digitalWrite(2,LOW);digitalWrite(3,HIGH);digitalWrite(4,LOW);digitalWrite(5,LOW);break;
case 2: digitalWrite(2,LOW);digitalWrite(3,LOW);digitalWrite(4,HIGH);digitalWrite(5,LOW);break;
case 3: digitalWrite(2,LOW);digitalWrite(3,LOW);digitalWrite(4,LOW);digitalWrite(5,HIGH);break;
}}

24

Re: Ретро часы на ИН-16 (Arduino)

Протестирую, но завтра. На домашнем компе нет Arduino IDE, только на работе.

25

Re: Ретро часы на ИН-16 (Arduino)

Доброго утра. Скетч работает, перебор цифр осуществляется.