Тема: Часы-будильник на ИВЛ1-7/5
На стадии разработки
Данный контент доступен только зарегистрированным пользователям.
Тест импульсного преобразователя (65 кГц)
Питание катода ~4,6 В
Напряжение сетки и анода +18 В
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
forum.rcl-radio.ru → Тестирование скетчей → Часы-будильник на ИВЛ1-7/5
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
На стадии разработки
Данный контент доступен только зарегистрированным пользователям.
Тест импульсного преобразователя (65 кГц)
Питание катода ~4,6 В
Напряжение сетки и анода +18 В
Тест сигнала будильника
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();}
}
просто часы
#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);}
Часы + будильник + коррекция времени кнопками
#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);}
Доброго времени суток, можно, пожалуйста подробнее расписать процесс изготовления импульсного преобразователя?
Заранее спасибо)
Что означает пунктирный контур вокруг транзистора КТ819 ???
Небольшой радиатор
Здравствуйте! не подскажите как можно уменьшить температуру кт819? Можно его заменить полевым? Или ШИМом поиграться, процентов 10 сделать и витков вторички побольше намотать?
Попробуйте изменить ШИМ:
analogWrite(9,80);
уменьшите число 80, но Вы потеряете в яркости свечения индикатора
Спасибо! Забыл поставить кондер перед трансформатором, сейчас греется незначительно.
Поставил IRF630, не греется вообще, на затворе 270 Ом. Единственоое, шим на 120 пришлось выставить(50%)
Если не трудно, то опубликуйте на форуме фото индикатора ИВЛ1-7/5 в работе. Это было бы интересно многим пользователям сайта.
Выкладывать нечего, пока тестирую блок питания
Добрый день, liman324 !
Можно собрать эти часики на Arduino pro mini и DS1307 ?
Нужно вносить какие либо изменения в скетч ?
Нужно вносить какие либо изменения в скетч ?
Ни каких изменений в скетч вносить не надо.
Засветка погашенных сегментов почти полностью пропала после установки стабилитрона на 3,9 - 5,1v вместо диодов D3-D4 (катодом к средней точке обмотки накала). Использовал, правда, трансформатор. Не могу сказать, будет ли работать стабилитрон на частоте преобразователя в схеме автора.
Можно схему покрупнее
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
forum.rcl-radio.ru → Тестирование скетчей → Часы-будильник на ИВЛ1-7/5
Форум работает на PunBB, при поддержке Informer Technologies, Inc
|