301

Re: Часы с календарем

liman324 пишет:

Маленькие цифры тоже под ОК?

Да

302

Re: Часы с календарем

http://forum.rcl-radio.ru/uploads/images/2023/09/9c28ab1bf439dc9e092387f5b16aa817.gif


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


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>10){temp=dsRead(0)*10;times1=millis();}

 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(200);segm = a[4];ch(SEG_DP,1);  segment(); an = 0; anod();break;
    // Q6
    case 5: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[5];ch(SEG_DP,dp_l);  segment(); an = 1; anod();break;
    // Q7
    case 6: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[6];ch(SEG_DP,1);  segment(); an = 2; anod();break;
    // Q8
    case 7: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[7]; segment(); an = 3; anod();break;
  /// BIG 
    // Q1
    case 0: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[0];ch(SEG_DP,1);  segment(); an = 4; anod();break;
    // Q2
    case 1: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[1];ch(SEG_DP,dp);  segment(); an = 5; anod();break;
    // Q3
    case 2: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[2];ch(SEG_DP,dp);  segment(); an = 6; anod();break;
    // Q4
    case 3: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);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);}}

303

Re: Часы с календарем

http://forum.rcl-radio.ru/uploads/images/2023/09/30b353ea03eb83933f1d105a8c3d1ad9.jpg
Крайная верхняя точка сверху справа точку убрать надо в букве Б

304

Re: Часы с календарем

Найдите строку
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 6:max7219(1, 60,124);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Б

305

Re: Часы с календарем

liman324 пишет:

Найдите строку
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 6:max7219(1, 60,124);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 6:max7219(1, 60,127) на case 6:max7219(1, 60,126) надо

306

Re: Часы с календарем

У меня в калькуляторе Б такое:

http://forum.rcl-radio.ru/uploads/images/2023/09/9bc64566d9c754f1dead723e09d7799e.png

http://rcl-radio.ru/?p=98974

307 (2023-09-09 18:49:44 отредактировано Djonny 2022)

Re: Часы с календарем

liman324 пишет:

У меня в калькуляторе Б такое:

http://forum.rcl-radio.ru/uploads/images/2023/09/9bc64566d9c754f1dead723e09d7799e.png

http://rcl-radio.ru/?p=98974

http://forum.rcl-radio.ru/uploads/images/2023/09/360e4091d9d6deff54dd40b9c9e1446f.jpg
Вот так получилось

308 (2023-09-10 20:26:10 отредактировано Djonny 2022)

Re: Часы с календарем

http://forum.rcl-radio.ru/uploads/images/2023/09/b8f9e7e128e51f3ee9e5cb35142ea593.jpg
http://forum.rcl-radio.ru/uploads/images/2023/09/bd8ba83499549d77f6797f9cd5029df7.jpg
В процессе сборки,с ключами пришлось помучится. Большой индикатор 6 В. Снизу дни недели все таки красными сделать или зелёными оставить
http://forum.rcl-radio.ru/uploads/images/2023/09/75cbbf358816b59f576c4f050edc0c6d.jpg
http://forum.rcl-radio.ru/uploads/images/2023/09/89a820e49c99eac7d120e8509335b4ef.jpg

309

Re: Часы с календарем

Красиво получилось.

Снизу дни недели все таки красными сделать или зелёными оставить

Зеленым не плохо смотрится.

310

Re: Часы с календарем

http://forum.rcl-radio.ru/uploads/images/2023/09/df4f7d8186b43f90b52a03498256b115.jpg
http://forum.rcl-radio.ru/uploads/images/2023/09/2945ccb98ad69e8ee5a8ad3abe801194.jpg

311

Re: Часы с календарем

Зеленый все лучше

312

Re: Часы с календарем

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

313

Re: Часы с календарем

if(millis()-times1>10){temp=dsRead(0)*10;times1=millis();}

10 мс это мало

надо поменять на

if(millis()-times1>10000){temp=dsRead(0)*10;times1=millis();}

314

Re: Часы с календарем

Индикаторы нашел с ОА, теперь можно добавить ночной режим?

315

Re: Часы с календарем

С max7219 будут проблемы, сейчас стоит минимальная яркость, есть вариант совсем отключать матрицу с 7 до 22

316

Re: Часы с календарем

liman324 пишет:

С max7219 будут проблемы, сейчас стоит минимальная яркость, есть вариант совсем отключать матрицу с 7 до 22

Цифры только регулирировать

317

Re: Часы с календарем

max7219 гасить или оставить как есть?

Опубликуйте скетч со всеми изминениями.

318

Re: Часы с календарем

Скетч из сообщения 291

319

Re: Часы с календарем

// 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,126);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, 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; // 0
    case 1: 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, 1); break; // 1
    case 2: ch(SEG_A, 0); ch(SEG_B, 0); ch(SEG_C, 1); ch(SEG_D, 0); ch(SEG_E, 0); ch(SEG_F, 1); ch(SEG_G, 0); break; // 2
    case 3: ch(SEG_A, 0); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 0); ch(SEG_E, 1); ch(SEG_F, 1); ch(SEG_G, 0); break; // 3
    case 4: ch(SEG_A, 1); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 1); ch(SEG_E, 1); ch(SEG_F, 0); ch(SEG_G, 0); break; // 4
    case 5: ch(SEG_A, 0); ch(SEG_B, 1); ch(SEG_C, 0); ch(SEG_D, 0); ch(SEG_E, 1); ch(SEG_F, 0); ch(SEG_G, 0); break; // 5
    case 6: ch(SEG_A, 0); ch(SEG_B, 1); ch(SEG_C, 0); ch(SEG_D, 0); ch(SEG_E, 0); ch(SEG_F, 0); ch(SEG_G, 0); break; // 6
    case 7: ch(SEG_A, 0); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 1); ch(SEG_E, 1); ch(SEG_F, 1); ch(SEG_G, 1); break; // 7
    case 8: 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; // 8
    case 9: ch(SEG_A, 0); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 0); ch(SEG_E, 1); ch(SEG_F, 0); ch(SEG_G, 0); break; // 9
   case 10: 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; // пусто
   case 11: 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, 1);ch(SEG_DP, 0); break; // *C
   case 12: 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; // -
  }
}


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

320 (2023-09-11 20:42:59 отредактировано Djonny 2022)

Re: Часы с календарем

http://forum.rcl-radio.ru/uploads/images/2023/09/851a655725d64f8b82287136fd11403a.jpg http://forum.rcl-radio.ru/uploads/images/2023/09/8823a1c52429f8e33285af1f473c85be.jpg
С тонировкой в корпусе,камера конечно не передаёт всю красотень) Есть ещё 1,8 дюйма синий цвет,как нибудь если найду похожий корпус соберу вариант такой.На дату, температуру желтенькие попробовать.

321

Re: Часы с календарем

Очень красиво получилось!!!

322 (2023-09-11 20:46:20 отредактировано Djonny 2022)

Re: Часы с календарем

liman324 пишет:

Очень красиво получилось!!!

Вам большое спасибо за реализацию! На зелёном цвете мне кажется заметно мерцание

323

Re: Часы с календарем

Пожалуйста! Если что обращайтесь.

324

Re: Часы с календарем

На зелёном цвете заметно мерцание,на красных не так заметно

325

Re: Часы с календарем

Поднимите частоту

OCR1A = 300;

замените на

OCR1A = 150;

Динамическая индикация будет работать на 800 Гц