Re: Большие часы на семисегментных индикаторах BJ18101AH
Да, подключены. На пине SQW так и не пойму что должно быть.
Один щуп на GND а другой на SQW, в итоге постоянные 5 вольт. Это нормально??
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
forum.rcl-radio.ru → Законченные проекты → Большие часы на семисегментных индикаторах BJ18101AH
Да, подключены. На пине SQW так и не пойму что должно быть.
Один щуп на GND а другой на SQW, в итоге постоянные 5 вольт. Это нормально??
Загрузите сканер I2c, проверьте адрес часов реального времени
http://forum.rcl-radio.ru/viewtopic.php?id=64
хорошо, спасибо. попробую.
Проверил через сканер, почему то показывает что у модуля два адреса.
В библиотеке менял оба пробовал, в итоге сегментники загорелись, но показывают беспорядочно и мерцают, и точка не мигает, а просто горит. Сегменты горят как буква А
Временно замените
times = DateTime.hour*100+DateTime.minute;
на
times = 1234;
Если на индикаторах не будет отображено 1234, то у Вас имеются ошибки в подключении индикаторов.
Сделал это. В итоге 1234 горит и точка постоянно. Но незадействованные сегменты мерцают ещё. Мне кажется мой модуль времени неисправен, сегодня придет новый буду пробовать его. Показания датчиков не выдает кстати, 1234 горят только и всё.
Устанавливали время с помощью этой строки?
clock.setDateTime(__DATE__, __TIME__); // Устанавливаем время на часах, основываясь на времени компиляции скетча
Надо раскомментировать прошить, а потом закомментировать и прошить повторно контроллер.
Померьте напряжение на батарейке часов реального времени
Батарея новая, проверил. Время тоже устанавливал как вы написали. Пока жду новый модуль.
И ещё как я понял на моем модуле времени отсутствует сигал SQW
Проверьте наличие кода в скетче:
clock.setOutput(DS3231_1HZ);
Спасибо вам большое за советы по проверке устройства! Вечером получил новый модуль времени, подключил и всё заработало. В итоге всё таки первый мой модуль был неисправен.
Заказал на Алиэкспрес семисегментные индикаторы BJ18101AH с общим анодом, но продавец прислал с общим катодом, думал не смогу использовать.
Но повезло; Попался ВАШ проект часов, решил попробовать.
Собрал часы термометр, плату использовал LGT8F328P клон ATmega328p, транзисторы какие были в наличии С945, КОД немного подработал; температура выводиться с встроенного датчика модуля ЧРВ DS3231 каждые 20 секунд, кнопками можно устанавливать или корректировать время, не значащий ноль с полуночи и до 10 часов в 1м сегменте дисплея не выводится. И должна уменьшаться яркость дисплея с 22 часов вечера и до 7 часов утра, эта функция на стадии проверки.
КОД который я использую;
#include <MsTimer2.h> // http://rcl-radio.ru/wp-content/uploads/ … Timer2.zip
#include <Wire.h>
#include <DS3231.h> // https://github.com/jarzebski/Arduino-DS … master.zip
DS3231 clock;
RTCDateTime dt;
int an, segm,times,i,pd,pd_p,hh,mm,sek;
byte a[4];
int temper;
int hour_br,brig;
byte w;
void setup()
{
Wire.begin();
clock.begin();
MsTimer2::set(2, 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(13,OUTPUT); // D13 === PD
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
clock.setOutput(DS3231_1HZ);
// pinMode(A0,INPUT); // SQW DS3231 // При активации есть мерцание сегментов
pinMode (A2,INPUT_PULLUP); // часы +
pinMode (A3,INPUT_PULLUP); // минуты +
// кнопки коррекци времени - нажатие === замыкание на GND
}
void loop()
{
dt=clock.getDateTime();// опрос времени
hh=dt.hour;
mm=dt.minute;
sek=dt.second;
hour_br = dt.hour;
if(hour_br>=22 || hour_br<=7){brig=500;}else{brig=1;} // уменьшаем яркость с 22 часов до 7 часов
if((sek>=17&&sek<=20)||(sek>=37&&sek<=40)||(sek>=57&&sek<=60))
{
// unsigned char temper;
temper = clock.readTemperature() -3; //выведение и коррекция показаний температуры
a[0] = temper/10;
a[1] = temper%10;
a[2] = 11; // Символ градуса в 3й сегмент
a[3] = 12; // Символ Цельсия - С в 4й сегмент
// a[2] = (temper / 10) % 10; // можно вывести деятые доли градуса
// a[3] = 11; // Тогда символ градуса в 4й сегмент
// pd_p=0;
}
else
{
times=dt.hour*100+dt.minute;
a[0]=times/1000;
if(a[0]==0){a[0]=10;}
a[1]=times/100%10;
a[2]=times/10%10;
a[3]=times%10%10;
// pd_p=1;
}
if(analogRead(A0)>900){pd_p=1;}else{pd_p=0;}
///////////////////////////////////// коррекция времени кнопками - часы и минуты
if(analogRead(A2)<900){w=1;hh++;if(hh>23){hh=0;}delay(300);}
if(analogRead(A3)<900){w=1;mm++;if(mm>59){mm=0;}delay(300);}
if(w==1){w=0;
// Manual (Year-год, Month-месяц, Day-день, Hour-час, Minute-минуты, Second-секунды)
clock.setDateTime(2023, 8, 16, hh, mm, 0);
// clock.setDateTime(Year, Month, Day, hh, mm, sek);
}
}// loop
void to_Timer()
{
switch(i)
{
case 0: cl(); segm=a[0]; pd=0; an=0; delayMicroseconds(brig); anod(); segment();break;
case 1: cl(); segm=a[1]; pd=pd_p; an=1; delayMicroseconds(brig); anod(); segment();break;
case 2: cl(); segm=a[2]; pd=0; an=2; delayMicroseconds(brig); anod(); segment();break;
case 3: cl(); segm=a[3]; pd=0; an=3; delayMicroseconds(brig); anod(); segment();break;}i++;
if(i>3){i=0;}
}
void segment()
{
switch(segm)
{
// A B C D E F G PD
case 0: ch(2,1);ch(3,1);ch(4,1);ch(5,1);ch(6,1);ch(7,1);ch(8,0);ch(13,pd);break;// 0
case 1: ch(2,0);ch(3,1);ch(4,1);ch(5,0);ch(6,0);ch(7,0);ch(8,0);ch(13,pd);break;// 1
case 2: ch(2,1);ch(3,1);ch(4,0);ch(5,1);ch(6,1);ch(7,0);ch(8,1);ch(13,pd);break;// 2
case 3: ch(2,1);ch(3,1);ch(4,1);ch(5,1);ch(6,0);ch(7,0);ch(8,1);ch(13,pd);break;// 3
case 4: ch(2,0);ch(3,1);ch(4,1);ch(5,0);ch(6,0);ch(7,1);ch(8,1);ch(13,pd);break;// 4
case 5: ch(2,1);ch(3,0);ch(4,1);ch(5,1);ch(6,0);ch(7,1);ch(8,1);ch(13,pd);break;// 5
case 6: ch(2,1);ch(3,0);ch(4,1);ch(5,1);ch(6,1);ch(7,1);ch(8,1);ch(13,pd);break;// 6
case 7: ch(2,1);ch(3,1);ch(4,1);ch(5,0);ch(6,0);ch(7,0);ch(8,0);ch(13,pd);break;// 7
case 8: ch(2,1);ch(3,1);ch(4,1);ch(5,1);ch(6,1);ch(7,1);ch(8,1);ch(13,pd);break;// 8
case 9: ch(2,1);ch(3,1);ch(4,1);ch(5,1);ch(6,0);ch(7,1);ch(8,1);ch(13,pd);break;// 9
case 10: ch(2,0);ch(3,0);ch(4,0);ch(5,0);ch(6,0);ch(7,0);ch(8,0);ch(13,pd);break;// пусто
case 11: ch(2,1);ch(3,1);ch(4,0);ch(5,0);ch(6,0);ch(7,1);ch(8,1);ch(13,pd);break;// градус
case 12: ch(2,1);ch(3,0);ch(4,0);ch(5,1);ch(6,1);ch(7,1);ch(8,0);ch(13,pd);break;// C
}
}
void anod()
{
switch(an)
{
case 0:ch(9,1);ch(10,0);ch(11,0);ch(12,0);break;
case 1:ch(9,0);ch(10,1);ch(11,0);ch(12,0);break;
case 2:ch(9,0);ch(10,0);ch(11,1);ch(12,0);break;
case 3:ch(9,0);ch(10,0);ch(11,0);ch(12,1);break;
}
}
void cl()
{
segm=10; pd=0; an=0; segment(); anod(); an=1; segment(); anod(); an=2; segment(); anod(); an=3; segment();anod();
}
void ch(int pin, int logic){digitalWrite(pin,logic);}
Здравствуйте! Наткнулся в яндексе на эту тему. Интересовался выводом информации на большие индикаторы. Как раз у Вас нашёл и название больших семисегментников BJ18101AH, заказал себе синего цвета Digitron 1.8" с общим катодом. Были сомнения насчёт будут ли они работать от 5v и не посадят ли выходы процессора. Вижу у Вас вроде всё нормально. А яркости хватает?
Через 22 Ом подайте плавно меняя напряжение от 0 до 5 В контролируя ток, если ток одного сегмента не превышает 20 мА , а напряжение достигло 5В, то индикаторы подойдут, если нет, то придется на сегменты ставить транзисторные ключи.
Спасибо, методика понятна, намотал на ус.
Пришли 1.8" индикаторы, 4 шт. Померил ток одного сегмента через 22 ом. При 5в. какой то мизерный, яркость слабая. Так не интересно. При 7в. яркость нормальная, то что надо. Ток 8.5 мА.
Получается надо индикаторы питать от 7в., а логику управления от 5в. Я хотел сделать на Max7219.
Попробовал отдельно DC-DC преобразователь, с 5в. на 7в. Нормально работает, 0.5А держит спокойно.
Ну и буду питать логику 5в., а индикаторы 7в.
Начал собирать схему на Max7219 и понимаю что с повышением питания не получается так как хотелось бы. У индикатора нет своего собственного питания. Х.з. как быть?
Добавлю, индикатор Digitron 18101AB
Ставьте транзисторные ключи
Ключи как в схеме на первой страничке темы. Но не пойму куда 7в. подавать?
По простому похоже не получится. Придётся ещё и ULN2803 поставить.
Вот пример ключа, надо только резистор на коллекторе подобрать под ток индикатора - http://rcl-radio.ru/?p=131282
Спасибо, вот это в тему.
Вопрос вроде бы простой, а гемора с ним предостаточно.
А я дурак, поторопился с выбором индикаторов. Выбирал на али, с синими светодиодами.
Выбрал ! От 7в нормально светятся. В поиске встречалась информация, что светодиоды 1.8" нормально работают напрямую от Max7219, на яркость нет жалоб.
И нашёл вот такой даташит.
https://disk.yandex.ru/i/SYGPJ5ITQIxfAg
Интересный столбец Vf(V). Это что, напряжение питания для нормального свечения?
У меня синий, 18101AB. для ненго 7.8-8.4 v .
Также есть куча других с этим параметром 5.4-6.0 v .
Может стоило просто подобрать нормальные семисегментники, пусть и дороже?
Проще поставить простые транзисторные ключи.
После распайки хреновой горы монтажных проводов между ножками индикаторов не захотел распаивать транзисторные ключи. Сделал на UDN2981. Напряжение для индикаторов через повышающий преобразователь MT3608. Всё работает так как хотелось . Пару кнопок добавил, чтобы выставлять часы, минуты руками. Всё прикручено к Arduino Nano.
Подключение к ESP32 пока в процессе, задолбала ошибка компиляции для платы ... Похоже не все библиотеки могут совместно работать.
Вот такая хрень на синих индикаторах получилась. Надо только какой нибудь светофильтр поставить для лучшей читабельности днём, белые несветящиеся сегменты мешают моментальному восприятию. Читал, что для этого берут тонировочную плёнку для стёкол автомобиля. Но она бывает разная по светопропускной способности, какую лучше взять 15, 20, 25 % - пока не знаю. Пришлось пока на это забить.
forum.rcl-radio.ru → Законченные проекты → Большие часы на семисегментных индикаторах BJ18101AH
Форум работает на PunBB, при поддержке Informer Technologies, Inc
|