1

Тема: Часы-будильник на ИВЛ1-7/5

На стадии разработки

http://forum.rcl-radio.ru/uploads/images/2020/04/b619f8640780ee0d6123d4ceafc44800.gif
Данный контент доступен только зарегистрированным пользователям.

Тест импульсного преобразователя (65 кГц)
http://forum.rcl-radio.ru/uploads/images/2020/04/52446b8eb8ec65be5e315559bd00bfcd.png

http://forum.rcl-radio.ru/uploads/images/2020/04/4eb142a7cf6063a04e33d6782884c9f8.jpg
Питание катода ~4,6 В
Напряжение сетки и анода +18 В

2

Re: Часы-будильник на ИВЛ1-7/5

Тест сигнала будильника

unsigned long times,times1;

void setup(){
  
  pinMode(13,OUTPUT);
  
  }

void loop(){
   if(millis()-times1<200){
   if(micros()-times<100){digitalWrite(13,HIGH);}
   if(micros()-times>100){digitalWrite(13,LOW);}
   if(micros()-times>300){times=micros();}}
   if(millis()-times1>600){times1=millis();}
  }

3

Re: Часы-будильник на ИВЛ1-7/5

просто часы
http://forum.rcl-radio.ru/uploads/images/2020/05/4ece30804abd7a1fc8a051786833a777.png
http://forum.rcl-radio.ru/uploads/images/2020/05/e241afb069378221fdbbf25aa799433f.png
http://forum.rcl-radio.ru/uploads/images/2020/05/fb81c143ec3303c5e185da50e8850906.gif


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

void setup() {
  // 62500 Hz
TCCR1A = TCCR1A & 0xe0 | 1;
TCCR1B = TCCR1B & 0xe0 | 0x09;
 analogWrite(9,85);// напряжение накала 4,5...5,5 В (ток потребления часов не более 600 мА)

 pinMode(0,OUTPUT);  // D0 === A1
 pinMode(1,OUTPUT);  // D1 === A2
 pinMode(2,OUTPUT);  // D2 === A3
 pinMode(3,OUTPUT);  // D3 === A4
 pinMode(4,OUTPUT);  // D4 === pd
 pinMode(12,OUTPUT);  // D12  === a
 pinMode(11,OUTPUT);  // D11  === b
 pinMode(10,OUTPUT);  // D10  === c
 pinMode(8,OUTPUT);   //  D8  === d
 pinMode(7,OUTPUT);   //  D7  === e
 pinMode(6,OUTPUT);   //  D6  === f
 pinMode(5,OUTPUT);   //  D5  === g

 Wire.begin();clock.begin();
 // clock.setDateTime(__DATE__, __TIME__); // Устанавливаем время на часах, основываясь на времени компиляции скетча
}

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;
 // a[0]=10;
 switch(i){
    case 0: cl();segm=a[0]; an=0; anod(); segment();delay(3);break;
    case 1: cl();segm=a[1]; an=1; anod(); segment();delay(3);break;
    case 2: cl();segm=a[2]; an=2; anod(); segment();delay(3);break;
    case 3: cl();segm=a[3]; an=3; anod(); segment();delay(3);break;
    }i++;if(i>3){i=0;}
   if(millis()-d<500){digitalWrite(4,HIGH);}else{digitalWrite(4,LOW);}if(millis()-d>1000){d=millis();}
}

 
void segment(){
  switch(segm){                                                                 
             //  A       B       C       D       E       F       G  
    case 0: ch(12,0);ch(11,0);ch(10,0);ch(8,0);ch(7,0);ch(6,0);ch(5,1);break;// 0 
    case 1: ch(12,1);ch(11,0);ch(10,0);ch(8,1);ch(7,1);ch(6,1);ch(5,1);break;// 1
    case 2: ch(12,0);ch(11,0);ch(10,1);ch(8,0);ch(7,0);ch(6,1);ch(5,0);break;// 2
    case 3: ch(12,0);ch(11,0);ch(10,0);ch(8,0);ch(7,1);ch(6,1);ch(5,0);break;// 3   
    case 4: ch(12,1);ch(11,0);ch(10,0);ch(8,1);ch(7,1);ch(6,0);ch(5,0);break;// 4 
    case 5: ch(12,0);ch(11,1);ch(10,0);ch(8,0);ch(7,1);ch(6,0);ch(5,0);break;// 5 
    case 6: ch(12,0);ch(11,1);ch(10,0);ch(8,0);ch(7,0);ch(6,0);ch(5,0);break;// 6 
    case 7: ch(12,0);ch(11,0);ch(10,0);ch(8,1);ch(7,1);ch(6,1);ch(5,1);break;// 7 
    case 8: ch(12,0);ch(11,0);ch(10,0);ch(8,0);ch(7,0);ch(6,0);ch(5,0);break;// 8
    case 9: ch(12,0);ch(11,0);ch(10,0);ch(8,0);ch(7,1);ch(6,0);ch(5,0);break;// 9  
    case 10: ch(12,1);ch(11,1);ch(10,1);ch(8,1);ch(7,1);ch(6,1);ch(5,1);break;// гашение цифры
  }}
void anod(){
  switch(an){                                                             
    case 0:ch(0,0);ch(1,1);ch(2,1);ch(3,1);break;  
    case 1:ch(0,1);ch(1,0);ch(2,1);ch(3,1);break; 
    case 2:ch(0,1);ch(1,1);ch(2,0);ch(3,1);break;
    case 3:ch(0,1);ch(1,1);ch(2,1);ch(3,0);break;
  }}

void cl(){ segm=10; an=3; segment();anod();an=2;  segment();anod();an=1;  segment();anod();an=0;  segment();anod();}  

//void cl(){}

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

4

Re: Часы-будильник на ИВЛ1-7/5

Часы + будильник + коррекция времени кнопками

#include <Wire.h> 
#include <EEPROM.h> 
#include <uRTCLib.h>                     // https://github.com/Naguissa/uRTCLib.git
  uRTCLib rtc(0x68);
  int an, segm,times,i,hh,mm,al_hh,al_mm,alarm;
  byte a[4],w,w1,w2;
  unsigned long d,pause,tim,tim1;

void setup() {
  // 62500 Hz
TCCR1A = TCCR1A & 0xe0 | 1;
TCCR1B = TCCR1B & 0xe0 | 0x09;
 analogWrite(9,80);// яркость свечения (ток потребления не более 700 мА)

 pinMode(0,OUTPUT);  // D0 === A1
 pinMode(1,OUTPUT);  // D1 === A2
 pinMode(2,OUTPUT);  // D2 === A3
 pinMode(3,OUTPUT);  // D3 === A4
 pinMode(4,OUTPUT);  // D4 === pd
 pinMode(12,OUTPUT);  // D12  === a
 pinMode(11,OUTPUT);  // D11  === b
 pinMode(10,OUTPUT);  // D10  === c
 pinMode(8,OUTPUT);   //  D8  === d
 pinMode(7,OUTPUT);   //  D7  === e
 pinMode(6,OUTPUT);   //  D6  === f
 pinMode(5,OUTPUT);   //  D5  === g

  pinMode (A0,INPUT_PULLUP); // корр. часы
  pinMode (A1,INPUT_PULLUP); // часы +
  pinMode (A2,INPUT_PULLUP); // минуты +
  pinMode (A3,INPUT_PULLUP); // корр. буд.

  pinMode(13,OUTPUT);// buzzer

  al_hh = EEPROM.read(11);al_mm = EEPROM.read(12);

 Wire.begin();
 // rtc.set(30, 9, 8, 2, 17, 12, 19);
 // RTCLib::set(byte second, byte minute, byte hour, byte dayOfWeek, byte dayOfMonth, byte month, byte year)
}

void loop() {
  rtc.refresh();// опрос времени
  hh=rtc.hour();mm=rtc.minute();
  times = rtc.hour()*100+rtc.minute();
  if(analogRead(A3)<900){times=al_hh*100+al_mm;digitalWrite(4,HIGH);d=millis();}
  a[0]=times/1000;
  a[1]=times/100%10;
  a[2]=times/10%10;
  a[3]=times%10%10;

 switch(i){
    case 0: cl();segm=a[0]; an=0; anod(); segment();delay(1);break;
    case 1: cl();segm=a[1]; an=1; anod(); segment();delay(1);break;
    case 2: cl();segm=a[2]; an=2; anod(); segment();delay(1);break;
    case 3: cl();segm=a[3]; an=3; anod(); segment();delay(1);break;
    }i++;if(i>3){i=0;}
   if(millis()-d<500){digitalWrite(4,HIGH);}else{digitalWrite(4,LOW);}if(millis()-d>1000){d=millis();}

   ///////////////////////////////////// коррекция времени - часы и минуты
  if(analogRead(A1)<900&&analogRead(A0)<900&&w1==0){w=1;hh++;if(hh>23){hh=0;}w1=1;pause=millis();}
  if(analogRead(A2)<900&&analogRead(A0)<900&&w1==0){w=1;mm++;if(mm>59){mm=0;}w1=1;pause=millis();}
  if(w==1){w=0;rtc.set(0, mm, hh, -1, -1, -1, -1);}

  ///////////////////////////////////// будильник
  if(analogRead(A1)<900&&analogRead(A3)<900&&w1==0){w2=0;al_hh++;if(al_hh>23){al_hh=0;}EEPROM.update(11, al_hh);w1=1;pause=millis();}
  if(analogRead(A2)<900&&analogRead(A3)<900&&w1==0){w2=0;al_mm++;if(al_mm>59){al_mm=0;}EEPROM.update(12, al_mm);w1=1;pause=millis();}
  if(millis()-pause>200){w1=0;}

  /////////////// buzzer
  if(hh*100+mm==al_hh*100+al_mm&&w2==0){alarm=1;}else{alarm=0;}
  if(hh*100+mm!=al_hh*100+al_mm){w2=0;}
  if(alarm==1&&(analogRead(A0)<900||analogRead(A1)<900||analogRead(A2)<900||analogRead(A3)<900)){alarm=0;w2=1;}
  if(alarm==1){    
   if(millis()-tim<200){tone(13,1500,150);}
   if(millis()-tim>600){tim=millis();}
    }else{noTone;}
  
}// loop

 
void segment(){
  switch(segm){                                                                 
             //  A       B       C       D       E       F       G  
    case 0: ch(12,0);ch(11,0);ch(10,0);ch(8,0);ch(7,0);ch(6,0);ch(5,1);break;// 0 
    case 1: ch(12,1);ch(11,0);ch(10,0);ch(8,1);ch(7,1);ch(6,1);ch(5,1);break;// 1
    case 2: ch(12,0);ch(11,0);ch(10,1);ch(8,0);ch(7,0);ch(6,1);ch(5,0);break;// 2
    case 3: ch(12,0);ch(11,0);ch(10,0);ch(8,0);ch(7,1);ch(6,1);ch(5,0);break;// 3   
    case 4: ch(12,1);ch(11,0);ch(10,0);ch(8,1);ch(7,1);ch(6,0);ch(5,0);break;// 4 
    case 5: ch(12,0);ch(11,1);ch(10,0);ch(8,0);ch(7,1);ch(6,0);ch(5,0);break;// 5 
    case 6: ch(12,0);ch(11,1);ch(10,0);ch(8,0);ch(7,0);ch(6,0);ch(5,0);break;// 6 
    case 7: ch(12,0);ch(11,0);ch(10,0);ch(8,1);ch(7,1);ch(6,1);ch(5,1);break;// 7 
    case 8: ch(12,0);ch(11,0);ch(10,0);ch(8,0);ch(7,0);ch(6,0);ch(5,0);break;// 8
    case 9: ch(12,0);ch(11,0);ch(10,0);ch(8,0);ch(7,1);ch(6,0);ch(5,0);break;// 9  
    case 10: ch(12,1);ch(11,1);ch(10,1);ch(8,1);ch(7,1);ch(6,1);ch(5,1);break;// гашение цифры
  }}
void anod(){
  switch(an){                                                             
    case 0:ch(0,0);ch(1,1);ch(2,1);ch(3,1);break;  
    case 1:ch(0,1);ch(1,0);ch(2,1);ch(3,1);break; 
    case 2:ch(0,1);ch(1,1);ch(2,0);ch(3,1);break;
    case 3:ch(0,1);ch(1,1);ch(2,1);ch(3,0);break;
  }}

void cl(){ segm=10; an=3; segment();anod();an=2;  segment();anod();an=1;  segment();anod();an=0;  segment();anod();}  

//void cl(){}

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