Re: Часы с календарем
Поднимите частоту
OCR1A = 300;
замените на
OCR1A = 150;
Динамическая индикация будет работать на 800 Гц
Яркость убавится?
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
forum.rcl-radio.ru → Новые идеи для проектов Arduino → Часы с календарем
Страницы Назад 1 … 12 13 14 15 16 Далее
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Поднимите частоту
OCR1A = 300;
замените на
OCR1A = 150;
Динамическая индикация будет работать на 800 Гц
Яркость убавится?
скорее всего да
скорее всего да
Да так пока оставим, может у меня такая чувствительность к мерцанию) под ОК можете ещё поправить скетч с ночным режимом?
можете ещё поправить скетч с ночным режимом?
Я внес изминения -- http://forum.rcl-radio.ru/viewtopic.php?pid=8574#p8574
можете ещё поправить скетч с ночным режимом?
Я внес изминения -- http://forum.rcl-radio.ru/viewtopic.php?pid=8574#p8574
Это под ОА вчера было
опубликуйте ссылку на скетч
опубликуйте ссылку на скетч
302 сообщение,правда ещё не проверял. Макет дособеру тогда уже тестировать
// 19 === SCL
// 20 === SDA
#define DIN PD3
#define CS PD4
#define CLK PD5
//// Катоды
#define SEG_A 28
#define SEG_B 29
#define SEG_C 30
#define SEG_D 31
#define SEG_E 23
#define SEG_F 22
#define SEG_G 21
#define SEG_DP 20
//// Аноды
#define AN_Q1 3
#define AN_Q2 2
#define AN_Q3 1
#define AN_Q4 0
#define AN_Q5 24
#define AN_Q6 25
#define AN_Q7 26
#define AN_Q8 27
#define SET 10
#define UP 9
#define DW 8
#include <Wire.h>
#include <DS3231.h> // http://rcl-radio.ru/wp-content/uploads/2022/10/DS3231.zip
#include <OneWire.h> // http://rcl-radio.ru/wp-content/uploads/2018/07/OneWire.zip
DS3231 clock;RTCDateTime DateTime;
OneWire ds(4); // Вход датчика 18b20 (PD4 44 пин контр)
long oldPosition = -999, newPosition, times,times1,times2;
int a[8],segm,i,an, dp1,dp2;
int old_sec,dp,dp_l;
int hour,minut,secon,data,mon,year,den;
int temp;
long dn1[8],dn2[8];
int hh,mm,ss,dd,mes,gg,set;
int brig = 1500;
int brig_g;
void setup() {
Wire.begin();
clock.begin();
DDRD |= (1 << DIN) | (1 << CS) | (1 << CLK);
max7219(0x0F, 0, 0);// тест выкл.
max7219(0x0C, 1, 1);// вкл. индик.
max7219(0x0A, 1, 1);// яркость
max7219(0x09, 0, 0);// дешифраторы выкл.
max7219(0x0B, 7, 7);// кол-во разрядов
// clock.setDateTime(2023, 8, 26, 20, 40, 0);
cli();
TCCR1A = 0;
TCCR1B = 0;
TCNT1 = 0;
// (8000000/((300+1)x64))=415.28239202658 Hz
OCR1A = 300;
TCCR1B |= (1 << WGM12);
// Prescaler 64
TCCR1B |= (1 << CS11) | (1 << CS10);
TIMSK |= (1 << OCIE1A);
sei();
pinMode(SEG_A, OUTPUT);
pinMode(SEG_B, OUTPUT);
pinMode(SEG_C, OUTPUT);
pinMode(SEG_D, OUTPUT);
pinMode(SEG_E, OUTPUT);
pinMode(SEG_F, OUTPUT);
pinMode(SEG_G, OUTPUT);
pinMode(SEG_DP, OUTPUT);
pinMode(AN_Q1, OUTPUT);
pinMode(AN_Q2, OUTPUT);
pinMode(AN_Q3, OUTPUT);
pinMode(AN_Q4, OUTPUT);
pinMode(AN_Q5, OUTPUT);
pinMode(AN_Q6, OUTPUT);
pinMode(AN_Q7, OUTPUT);
pinMode(AN_Q8, OUTPUT);
pinMode (SET,INPUT_PULLUP);
pinMode (UP,INPUT_PULLUP);
pinMode (DW,INPUT_PULLUP);
}
void loop() {
DateTime = clock.getDateTime();hour = DateTime.hour;minut = DateTime.minute;secon = DateTime.second;
data = DateTime.day;mon = DateTime.month;year = DateTime.year;
den=DateTime.dayOfWeek;
if(millis()-times1>10000){temp=dsRead(0)*10;times1=millis();}
if(hour<7||hour>=22){brig_g=brig;}else{brig_g=200;}
if(digitalRead(SET)==LOW){set++;if(set>5){set=0;}delay(200);}
hh=hour;mm=minut;ss=secon;dd=data;mes=mon;gg=year;
if(set==1 && digitalRead(UP)==LOW){hh++;if(hh>23){hh=0;}clock.setDateTime(year, mon, data, hh, minut, secon);delay(200);}
if(set==1 && digitalRead(DW)==LOW){hh--;if(hh<0){hh=23;}clock.setDateTime(year, mon, data, hh, minut, secon);delay(200);}
if(set==2 && digitalRead(UP)==LOW){mm++;if(mm>59){mm=0;}clock.setDateTime(year, mon, data, hour, mm, 0);delay(200);}
if(set==2 && digitalRead(DW)==LOW){mm--;if(mm<0){mm=59;}clock.setDateTime(year, mon, data, hour, mm, 0);delay(200);}
if(set==3 && digitalRead(UP)==LOW){dd++;if(dd>31){dd=1;}clock.setDateTime(year, mon, dd, hour, minut, secon);delay(200);}
if(set==3 && digitalRead(DW)==LOW){dd--;if(dd<1){dd=31;}clock.setDateTime(year, mon, dd, hour, minut, secon);delay(200);}
if(set==4 && digitalRead(UP)==LOW){mes++;if(mes>12){mes=0;}clock.setDateTime(year, mes, data, hour, minut, secon);delay(200);}
if(set==4 && digitalRead(DW)==LOW){mes--;if(mes<1){mes=12;}clock.setDateTime(year, mes, data, hour, minut, secon);delay(200);}
if(set==5 && digitalRead(UP)==LOW){gg++;if(gg>2100){gg=2023;}clock.setDateTime(gg, mon, data, hour, minut, secon);delay(200);}
if(set==5 && digitalRead(DW)==LOW){gg--;if(gg<2023){gg=2100;}clock.setDateTime(gg, mon, data, hour, minut, secon);delay(200);}
if(set==1){a[0] = hour/10%10;a[1] = hour%10; a[2]=10;a[3]=10;a[4]=10;a[5]=10;a[6]=10;a[7]=10;}
if(set==2){a[2] = minut/10%10;a[3] = minut%10; a[0]=10;a[1]=10;a[4]=10;a[5]=10;a[6]=10;a[7]=10;}
if(set==3){a[4] = data/10%10;a[5] = data%10; a[0]=10;a[1]=10;a[2]=10;a[3]=10;a[6]=10;a[7]=10;}
if(set==4){a[6] = mon/10%10;a[7] = mon%10; a[0]=10;a[1]=10;a[2]=10;a[3]=10;a[4]=10;a[5]=10;}
if(set==5){a[4] = year/1000%10;a[5] = year/100%10;a[6] = year/10%10; a[7] = year%10; a[0]=10;a[1]=10;a[2]=10;a[3]=10;}
if(set>0){dp_l=1;dp=1;dp1=1;dp2=1;}
switch(den){
case 1:max7219(1, 126,102);max7219(2, 102,102);max7219(3, 102,102);max7219(4, 102,126);
max7219(5, 102,102);max7219(6, 102,102);max7219(7, 102,102);max7219(8, 0,0);break;// ПH
case 2:max7219(1, 124,126);max7219(2, 102,24);max7219(3, 102,24);max7219(4, 124,24);
max7219(5, 102,24);max7219(6, 102,24);max7219(7, 124,24);max7219(8, 0,0);break;// BT
case 3:max7219(1, 60,124);max7219(2, 102,102);max7219(3, 192,102);max7219(4, 192,124);
max7219(5, 192,96);max7219(6, 102,96);max7219(7, 60,96);max7219(8, 0,0);break;// CP
case 4:max7219(1, 102,126);max7219(2, 102,24);max7219(3, 102,24);max7219(4, 62,24);
max7219(5, 6,24);max7219(6, 6,24);max7219(7, 6,24);max7219(8, 0,0);break; // ЧТ
case 5:max7219(1, 126,0x7e);max7219(2, 102,0x18);max7219(3, 102,0x18);max7219(4, 102,0x18);
max7219(5, 102,0x18);max7219(6, 102,0x18);max7219(7, 102,0x18);max7219(8, 0x00,0x00);break;// ПТ
case 6:max7219(1, 60,127);max7219(2, 102,96);max7219(3, 192,96);max7219(4, 192,124);
max7219(5, 192,102);max7219(6, 102,102);max7219(7, 60,124);max7219(8, 0,0);break;// CБ
case 7:max7219(1, 124,60);max7219(2, 102,102);max7219(3, 102,192);max7219(4, 124,192);
max7219(5, 102,192);max7219(6, 102,102);max7219(7, 124,60);max7219(8, 0,0);break;// BС
}
if(set==0){
if(hour/10%10==0){a[0]=10;}else{a[0]=hour/10%10;}
a[1]=hour%10;
a[2]=minut/10%10;
a[3]=minut%10;
if( (secon>=5&&secon<=10) || (secon>=25&&secon<=30) || (secon>=45&&secon<50)){ dp_l=0;
if(data/10%10==0){a[4]=10;}else{a[4]=data/10%10;}
a[5]=data%10;
if(mon/10%10==0){a[6]=10;}else{a[6]=mon/10%10;}
a[7]=mon%10;
}
else{
if(temp>=0&&temp<100){dp_l=0;a[4]=10;a[5]=temp/10%10;a[6]=temp%10;a[7]=11; } // _1.3C
if(temp>=100){dp_l=0;a[4]=temp/100%10;a[5]=temp/10%10;a[6]=temp%10;a[7]=11; } // 23.5C
if(temp<0&&temp>-100){dp_l=0;a[4]=12;a[5]=abs(temp/10%10);a[6]=abs(temp%10);a[7]=11; } // -1.3C
if(temp<=-100){dp_l=1;a[4]=12;a[5]=abs(temp/100%10);a[6]=abs(temp/10%10);a[7]=11; } // -23C
}
if(millis()-times<500){dp=1;}else{dp=0;}
if(old_sec!=secon){old_sec=secon;times=millis();}
}
delay(100);
}
ISR(TIMER1_COMPA_vect){
switch (i) {
/// SMALL
// Q5
case 4: segm = 10; segment(); an = 10; anod(); delayMicroseconds(brig_g);segm = a[4];ch(SEG_DP,1); segment(); an = 0; anod();break;
// Q6
case 5: segm = 10; segment(); an = 10; anod(); delayMicroseconds(brig_g);segm = a[5];ch(SEG_DP,dp_l); segment(); an = 1; anod();break;
// Q7
case 6: segm = 10; segment(); an = 10; anod(); delayMicroseconds(brig_g);segm = a[6];ch(SEG_DP,1); segment(); an = 2; anod();break;
// Q8
case 7: segm = 10; segment(); an = 10; anod(); delayMicroseconds(brig_g);segm = a[7]; segment(); an = 3; anod();break;
/// BIG
// Q1
case 0: segm = 10; segment(); an = 10; anod(); delayMicroseconds(brig_g);segm = a[0];ch(SEG_DP,1); segment(); an = 4; anod();break;
// Q2
case 1: segm = 10; segment(); an = 10; anod(); delayMicroseconds(brig_g);segm = a[1];ch(SEG_DP,dp); segment(); an = 5; anod();break;
// Q3
case 2: segm = 10; segment(); an = 10; anod(); delayMicroseconds(brig_g);segm = a[2];ch(SEG_DP,dp); segment(); an = 6; anod();break;
// Q4
case 3: segm = 10; segment(); an = 10; anod(); delayMicroseconds(brig_g);segm = a[3];ch(SEG_DP,1); segment(); an = 7; anod();break;
}
i++;if (i > 7) {i = 0;}
}
void segment() {
switch (segm) {
// A B C D E F G
case 0: ch(SEG_A, 1); ch(SEG_B, 1); ch(SEG_C, 1); ch(SEG_D, 1); ch(SEG_E, 1); ch(SEG_F, 1); ch(SEG_G, 0); break; // 0
case 1: ch(SEG_A, 0); ch(SEG_B, 1); ch(SEG_C, 1); ch(SEG_D, 0); ch(SEG_E, 0); ch(SEG_F, 0); ch(SEG_G, 0); break; // 1
case 2: ch(SEG_A, 1); ch(SEG_B, 1); ch(SEG_C, 0); ch(SEG_D, 1); ch(SEG_E, 1); ch(SEG_F, 0); ch(SEG_G, 1); break; // 2
case 3: ch(SEG_A, 1); ch(SEG_B, 1); ch(SEG_C, 1); ch(SEG_D, 1); ch(SEG_E, 0); ch(SEG_F, 0); ch(SEG_G, 1); break; // 3
case 4: ch(SEG_A, 0); ch(SEG_B, 1); ch(SEG_C, 1); ch(SEG_D, 0); ch(SEG_E, 0); ch(SEG_F, 1); ch(SEG_G, 1); break; // 4
case 5: ch(SEG_A, 1); ch(SEG_B, 0); ch(SEG_C, 1); ch(SEG_D, 1); ch(SEG_E, 0); ch(SEG_F, 1); ch(SEG_G, 1); break; // 5
case 6: ch(SEG_A, 1); ch(SEG_B, 0); ch(SEG_C, 1); ch(SEG_D, 1); ch(SEG_E, 1); ch(SEG_F, 1); ch(SEG_G, 1); break; // 6
case 7: ch(SEG_A, 1); ch(SEG_B, 1); ch(SEG_C, 1); ch(SEG_D, 0); ch(SEG_E, 0); ch(SEG_F, 0); ch(SEG_G, 0); break; // 7
case 8: ch(SEG_A, 1); ch(SEG_B, 1); ch(SEG_C, 1); ch(SEG_D, 1); ch(SEG_E, 1); ch(SEG_F, 1); ch(SEG_G, 1); break; // 8
case 9: ch(SEG_A, 1); ch(SEG_B, 1); ch(SEG_C, 1); ch(SEG_D, 1); ch(SEG_E, 0); ch(SEG_F, 1); ch(SEG_G, 1); break; // 9
case 10: ch(SEG_A, 0); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 0); ch(SEG_E, 0); ch(SEG_F, 0); ch(SEG_G, 0); break; // пусто
case 11: ch(SEG_A, 1); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 1); ch(SEG_E, 1); ch(SEG_F, 1); ch(SEG_G, 0);ch(SEG_DP, 1); break; // *C
case 12: ch(SEG_A, 0); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 0); ch(SEG_E, 0); ch(SEG_F, 0); ch(SEG_G, 1); break; // -
}
}
void anod() {
switch (an) {
case 0: ch(AN_Q1, 1); ch(AN_Q2, 0); ch(AN_Q3, 0); ch(AN_Q4, 0); ch(AN_Q5, 0); ch(AN_Q6, 0); ch(AN_Q7, 0); ch(AN_Q8, 0); break;
case 1: ch(AN_Q1, 0); ch(AN_Q2, 1); ch(AN_Q3, 0); ch(AN_Q4, 0); ch(AN_Q5, 0); ch(AN_Q6, 0); ch(AN_Q7, 0); ch(AN_Q8, 0); break;
case 2: ch(AN_Q1, 0); ch(AN_Q2, 0); ch(AN_Q3, 1); ch(AN_Q4, 0); ch(AN_Q5, 0); ch(AN_Q6, 0); ch(AN_Q7, 0); ch(AN_Q8, 0); break;
case 3: ch(AN_Q1, 0); ch(AN_Q2, 0); ch(AN_Q3, 0); ch(AN_Q4, 1); ch(AN_Q5, 0); ch(AN_Q6, 0); ch(AN_Q7, 0); ch(AN_Q8, 0); break;
case 4: ch(AN_Q1, 0); ch(AN_Q2, 0); ch(AN_Q3, 0); ch(AN_Q4, 0); ch(AN_Q5, 1); ch(AN_Q6, 0); ch(AN_Q7, 0); ch(AN_Q8, 0); break;
case 5: ch(AN_Q1, 0); ch(AN_Q2, 0); ch(AN_Q3, 0); ch(AN_Q4, 0); ch(AN_Q5, 0); ch(AN_Q6, 1); ch(AN_Q7, 0); ch(AN_Q8, 0); break;
case 6: ch(AN_Q1, 0); ch(AN_Q2, 0); ch(AN_Q3, 0); ch(AN_Q4, 0); ch(AN_Q5, 0); ch(AN_Q6, 0); ch(AN_Q7, 1); ch(AN_Q8, 0); break;
case 7: ch(AN_Q1, 0); ch(AN_Q2, 0); ch(AN_Q3, 0); ch(AN_Q4, 0); ch(AN_Q5, 0); ch(AN_Q6, 0); ch(AN_Q7, 0); ch(AN_Q8, 1); break;
case 10: ch(AN_Q1, 0); ch(AN_Q2, 0); ch(AN_Q3, 0); ch(AN_Q4, 0); ch(AN_Q5, 0); ch(AN_Q6, 0); ch(AN_Q7, 0); ch(AN_Q8, 0); break;
}
}
void ch(int pin, int logic) {
digitalWrite(pin, logic);
}
float dsRead(byte x) {
byte data[2], addr[8][8], kol = 0;
while (ds.search(addr[kol])) { // поиск датчиков, определение адреса и кол-ва датчиков
kol++;
}
ds.reset_search(); // Сброс поиска датчика
ds.reset(); // Инициализация, выполняется сброс шины
ds.select(addr[x]); // Обращение к датчику по адресу
ds.write(0x44, 0); // Измерение температуры с переносом данных в память
ds.reset(); // Инициализация, выполняется сброс шины
ds.select(addr[x]); // Обращение к датчику по адресу
ds.write(0xBE); // Обращение памяти
data[0] = ds.read();// Чтение памяти byte low
data[1] = ds.read();// Чтение памяти byte high
float value = ((data[1] << 8) | data[0]) / 16.0; return (float)value; // Расчет температуры и вывод
}
void max7219(byte reg_n, byte h1, byte h2){
PORTD &=~(1 << CS);WriteBit16(reg_n,h1);WriteBit16(reg_n,h2);PORTD |=(1 << CS);
}
void WriteBit16(byte reg, byte data){
for(char i = 7; i >= 0; i--){
PORTD &= ~(1 << CLK);
if(((reg >> i) & 1) == 1){PORTD |= (1 << DIN);}else{PORTD &= ~(1 << DIN);}
PORTD |=(1 << CLK);}
for(char i = 7; i >= 0; i--){
PORTD &= ~(1 << CLK);
if(((data >> i) & 1) == 1){PORTD |= (1 << DIN);}else{PORTD &= ~(1 << DIN);}
PORTD |=(1 << CLK);}
PORTD &= ~(1 << CLK);PORTD |= (1 << DIN);
}
void cl(){for(char i=1;i<=8;i++){max7219(i, 0, 0);}}
Здравствуйте. Для измерения температуры с Ds3231 под ОА где поправить в скетче?
Надоел я вам уже с часами)
Здравствуйте. Для измерения температуры с Ds3231 под ОА где поправить в скетче?
Там много править надо, так как часть индикаторов работает с ОК а часть с ОА.
Опубликуйте ссылку на код который надо изменить.
Здравствуйте. Под такие можно будет написать прошивку?
Срисую схему подключения
Здравствуйте. Вполне реально. Не вижу особых сложностей.
Здравствуйте. Вполне реально. Не вижу особых сложностей.
Ок,так же ds3231, ds18b20.может тему новую открыть,а то все в куче смешалось))
Да, лучше новую тему открыть.
Они походу на одной платформе собраны, только корпусами отличие
Здравствуйте. Не по теме часов,есть автомагнитола с СД дисками с аудиопроцем к примеру TDA2313(pt2313),к ней хочу модуль mp3 блютуз модуль на какой-нибудь мелком контроллере по шине i2c к привязке аудиовходов управлять питанием модуля мр3 блютуз.К примеру при активации режима aux на автомагнитоле одновременно через соответствующий аудио вход подавалось питание на этот модуль мр3 через этот самый контроллер. Чтоб не лепить отдельные кнопки по питанию.
Сама автомагнитора исправна?
На блютуз модуль надо подавать только питание или еще управление?
Просто питание через транзисторный ключ. Определится просто надо какой аудиопроц стоит,я просто заранее спрашиваю можно ли реализовать идею
Сама магнитола исправна? Вы хотите подключится к аудиопроцессору? Я пока не понял саму идею.
Сама магнитола исправна,к шине i2c паралельно подключить внешний контроллер который в зависимости от номера входного аудиовхода подавало питание на внешнее устройство. Типа сканера шины i2c. Аудиопроц же общается по определённым адресам. Не силен в терминологии как все это обозвать. Выбран к примеру вход 1, соответственно с выхода источника сигнала подаём на вход аудиопроца и уже внешний контроллер который подключен шине i2c подаёт питание на источник сигнала.
Сама магнитола исправна,к шине i2c паралельно подключить внешний контроллер который в зависимости от номера входного аудиовхода подавало питание на внешнее устройство. Типа сканера шины i2c. Аудиопроц же общается по определённым адресам. Не силен в терминологии как все это обозвать. Выбран к примеру вход 1, соответственно с выхода источника сигнала подаём на вход аудиопроца и уже внешний контроллер который подключен шине i2c подаёт питание на источник сигнала.
Регулировка параметров звука остаётся в магнитоле управление
Понятно. Я думаю это вполне реализуемо. Думаю стоит попробовать.
Понятно. Я думаю это вполне реализуемо. Думаю стоит попробовать.
Ок,я так и подумал что вам это под силу. Давно это идея крутится но до реализации никто не делал такого.
Как эту штуку обозвать?
Страницы Назад 1 … 12 13 14 15 16 Далее
Чтобы отправить ответ, вы должны войти или зарегистрироваться
forum.rcl-radio.ru → Новые идеи для проектов Arduino → Часы с календарем
Форум работает на PunBB, при поддержке Informer Technologies, Inc
|