326

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

liman324 пишет:

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

OCR1A = 300;

замените на

OCR1A = 150;

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

Яркость убавится?

327

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

скорее всего да

328

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

liman324 пишет:

скорее всего да

Да так пока оставим, может у меня такая чувствительность к мерцанию) под ОК можете ещё поправить скетч с ночным режимом?

329

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

можете ещё поправить скетч с ночным режимом?

Я внес изминения -- http://forum.rcl-radio.ru/viewtopic.php?pid=8574#p8574

330

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

liman324 пишет:

можете ещё поправить скетч с ночным режимом?

Я внес изминения -- http://forum.rcl-radio.ru/viewtopic.php?pid=8574#p8574

Это под ОА вчера было

331

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

опубликуйте ссылку на скетч

332 (2023-09-11 21:23:13 отредактировано Djonny 2022)

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

liman324 пишет:

опубликуйте ссылку на скетч

302 сообщение,правда ещё не проверял. Макет дособеру тогда уже тестировать

333

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

334 (2023-09-18 11:31:14 отредактировано Djonny 2022)

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

Здравствуйте. Для измерения температуры с Ds3231 под ОА где поправить в скетче?

335

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

Надоел я вам уже с часами)

336

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

Здравствуйте. Для измерения температуры с Ds3231 под ОА где поправить в скетче?

Там много править надо, так как часть индикаторов работает с ОК а часть с ОА.

Опубликуйте ссылку на код который надо изменить.

337 (2023-09-28 19:10:53 отредактировано Djonny 2022)

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

Здравствуйте. Под такие можно будет написать прошивку?http://forum.rcl-radio.ru/uploads/images/2023/09/d394854178375640ef6ff283e90725b7.jpg
Срисую схему подключения

338

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

Здравствуйте. Вполне реально. Не вижу особых сложностей.

339 (2023-09-28 19:21:06 отредактировано Djonny 2022)

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

liman324 пишет:

Здравствуйте. Вполне реально. Не вижу особых сложностей.

Ок,так же ds3231, ds18b20.может тему новую открыть,а то все в куче смешалось))

340

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

Да, лучше новую тему открыть.

341

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

http://forum.rcl-radio.ru/uploads/images/2023/09/7c2fe0c90dec18382a5f386ad5dc3871.jpg
http://forum.rcl-radio.ru/uploads/images/2023/09/03742019ddbf0cd3b97076437558b13d.jpg

Они походу на одной платформе собраны, только корпусами отличие

342 (2023-09-29 16:29:05 отредактировано Djonny 2022)

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

Здравствуйте. Не по теме часов,есть автомагнитола с СД дисками с аудиопроцем к примеру TDA2313(pt2313),к ней хочу модуль mp3 блютуз модуль  на какой-нибудь мелком контроллере по шине i2c к привязке аудиовходов управлять питанием модуля мр3 блютуз.К примеру при активации режима aux на автомагнитоле одновременно через соответствующий аудио вход подавалось питание на этот модуль мр3 через этот самый контроллер. Чтоб не лепить отдельные кнопки по питанию.

343

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

Сама автомагнитора исправна?

На блютуз модуль надо подавать только питание или еще управление?

344

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

http://forum.rcl-radio.ru/uploads/images/2023/09/fa05d260dab50e333d8b0a54e39737d0.jpg
Просто питание через транзисторный ключ. Определится просто надо какой аудиопроц стоит,я просто заранее спрашиваю можно ли реализовать идею

345

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

Сама магнитола исправна? Вы хотите подключится к аудиопроцессору? Я пока не понял саму идею.

346 (2023-09-29 19:32:42 отредактировано Djonny 2022)

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

Сама магнитола исправна,к шине i2c паралельно подключить внешний контроллер который в зависимости от номера входного аудиовхода подавало питание на внешнее устройство. Типа сканера шины i2c. Аудиопроц же общается по определённым адресам. Не силен в терминологии как все это обозвать. Выбран к примеру вход 1, соответственно с выхода источника сигнала подаём на вход аудиопроца и  уже внешний контроллер который подключен шине i2c подаёт питание на источник сигнала.

347

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

Djonny 2022 пишет:

Сама магнитола исправна,к шине i2c паралельно подключить внешний контроллер который в зависимости от номера входного аудиовхода подавало питание на внешнее устройство. Типа сканера шины i2c. Аудиопроц же общается по определённым адресам. Не силен в терминологии как все это обозвать. Выбран к примеру вход 1, соответственно с выхода источника сигнала подаём на вход аудиопроца и  уже внешний контроллер который подключен шине i2c подаёт питание на источник сигнала.

Регулировка параметров звука остаётся в магнитоле управление

348

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

Понятно. Я думаю это вполне реализуемо. Думаю стоит попробовать.

349 (2023-09-29 19:41:22 отредактировано Djonny 2022)

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

liman324 пишет:

Понятно. Я думаю это вполне реализуемо. Думаю стоит попробовать.

Ок,я так и подумал что вам это под силу. Давно это идея крутится но до реализации никто не делал такого.

350

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

Как эту штуку обозвать?