76

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

liman324 пишет:

#define AN_1        27 // 34
#define AN_2        26 // 35
#define AN_3        25 // 36
#define AN_4        24 // 37
#define AN_5        0  // 40

AN1 - это к базе транзистора Q1

и тд

Транзисторы вы по моей схеме обозначили? А с группами катодов какую куда подключить?

77

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

Транзисторы вы по моей схеме обозначили?

да


       // 33 - номер пина микросхемы
         SEG_A1 - первая группа катодов сегмент А
//// Катоды 1 группа
#define SEG_A1       28 // 33
#define SEG_B1       29 // 32
#define SEG_C1       30 // 31
#define SEG_D1       31 // 30
#define SEG_E1       23 // 26
#define SEG_F1       22 // 25
#define SEG_G1       21 // 24
//// Катоды 2 группа
#define SEG_A2       11 // 13
#define SEG_B2       12 // 14
#define SEG_C2       13 // 15
#define SEG_D2       14 // 16
#define SEG_E2       15 // 17
#define SEG_F2       18 // 21
#define SEG_G2       19 // 22
//// Катоды 3 группа
#define SEG_A3        1 // 44
#define SEG_B3        2 // 43
#define SEG_C3        3 // 42
#define SEG_D3        4 // 41
#define SEG_E3        5 // 1
#define SEG_F3        6 // 2
#define SEG_G3        7 // 3

78

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

liman324 пишет:

Транзисторы вы по моей схеме обозначили?

да

//// Катоды 1 группа
#define SEG_A1       28 // 33
#define SEG_B1       29 // 32
#define SEG_C1       30 // 31
#define SEG_D1       31 // 30
#define SEG_E1       23 // 26
#define SEG_F1       22 // 25
#define SEG_G1       21 // 24
//// Катоды 2 группа
#define SEG_A2       11 // 13
#define SEG_B2       12 // 14
#define SEG_C2       13 // 15
#define SEG_D2       14 // 16
#define SEG_E2       15 // 17
#define SEG_F2       18 // 21
#define SEG_G2       19 // 22
//// Катоды 3 группа
#define SEG_A3        1 // 44
#define SEG_B3        2 // 43
#define SEG_C3        3 // 42
#define SEG_D3        4 // 41
#define SEG_E3        5 // 1
#define SEG_F3        6 // 2
#define SEG_G3        7 // 3

Вы меня не поняли про группы катод,там на схеме группа к часам,группа к секундам и к дате группа

79

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

Вы меня не поняли про группы катод,там на схеме группа к часам,группа к секундам и к дате группа

Все верно три группы:

Первая группа HH:M
вторая             M:SS(темп)
третья             DD(дни_недели) MM(год)

80

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

Вот так

http://forum.rcl-radio.ru/uploads/images/2023/08/868a2c9e2b36c8e1f66bdbd843e18652.png

81 (2023-08-26 12:47:02 отредактировано Djonny 2022)

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

liman324 пишет:

Вот так

http://forum.rcl-radio.ru/uploads/images/2023/08/868a2c9e2b36c8e1f66bdbd843e18652.png

http://forum.rcl-radio.ru/uploads/images/2023/08/3685b003dfd13ba6f3028fcec435e0d3.jpg вот так на плате расключены группы катод

82

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

По схеме обратите внимание что все маленькие индикаторы управляются анодами через ключи,у цифр года 2 и 0 катоды на gnd,а аноды через ключи управление

83

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

http://forum.rcl-radio.ru/uploads/images/2023/08/53044b9db333e28db055b33f0894bc35.gif

84

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

liman324 пишет:

http://forum.rcl-radio.ru/uploads/images/2023/08/53044b9db333e28db055b33f0894bc35.gif

2 и 0 год управление q5

85

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

Все верно?

http://forum.rcl-radio.ru/uploads/images/2023/08/f0154662377bf7037e9732ba61f02315.png

86

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

liman324 пишет:

Все верно?

http://forum.rcl-radio.ru/uploads/images/2023/08/f0154662377bf7037e9732ba61f02315.png

Все верно

87

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

Вот тестовый скетч, только для больших цифр, должно быть на индикаторах 12:23:56

//// Катоды 1 группа
#define SEG_A1       28 // 33 
#define SEG_B1       29 // 32 
#define SEG_C1       30 // 31
#define SEG_D1       31 // 30
#define SEG_E1       23 // 26
#define SEG_F1       22 // 25
#define SEG_G1       21 // 24 
//// Катоды 2 группа
#define SEG_A2       11 // 13 
#define SEG_B2       12 // 14 
#define SEG_C2       13 // 15
#define SEG_D2       14 // 16
#define SEG_E2       15 // 17
#define SEG_F2       18 // 21
#define SEG_G2       19 // 22 
//// Катоды 3 группа
#define SEG_A3        1 // 44
#define SEG_B3        2 // 43 
#define SEG_C3        3 // 42
#define SEG_D3        4 // 41
#define SEG_E3        5 // 1
#define SEG_F3        6 // 2
#define SEG_G3        7 // 3 
//// Аноды
// 34:51:23 == HH:MM:SS большые цифры > 34:51:23 === номер транзистора Q1-Q5
#define AN_1        27 // 34
#define AN_2        26 // 35
#define AN_3        25 // 36
#define AN_4        24 // 37
#define AN_5        0  // 40

#include <MsTimer2.h>           // http://rcl-radio.ru/wp-content/uploads/2018/11/MsTimer2.zip       

long oldPosition  = -999,newPosition,times;
int an,segm1,segm2,segm3,i;
byte a[6];
  
void setup() {
  MsTimer2::set(2, to_Timer);MsTimer2::start();
    pinMode(SEG_A1,OUTPUT);
    pinMode(SEG_B1,OUTPUT);
    pinMode(SEG_C1,OUTPUT);
    pinMode(SEG_D1,OUTPUT);
    pinMode(SEG_E1,OUTPUT);
    pinMode(SEG_F1,OUTPUT);
    pinMode(SEG_G1,OUTPUT);
    pinMode(AN_1,OUTPUT);
    pinMode(AN_2,OUTPUT);
    pinMode(AN_3,OUTPUT);
    pinMode(AN_4,OUTPUT);
    pinMode(AN_5,OUTPUT);
    pinMode(SEG_A2,OUTPUT);
    pinMode(SEG_B2,OUTPUT);
    pinMode(SEG_C2,OUTPUT);
    pinMode(SEG_D2,OUTPUT);
    pinMode(SEG_E2,OUTPUT);
    pinMode(SEG_F2,OUTPUT);
    pinMode(SEG_G2,OUTPUT);
}

void loop() {
   a[0]=1;
   a[1]=2;
   a[2]=3;
   a[3]=4;
   a[4]=5;
   a[5]=6;
   delay(1000);
}

void to_Timer(){
  switch(i){
    case 0: segm2=10;segm1=10; segment_2();segment_1();anod();delayMicroseconds(200);segm2=10;segm1=a[0]; an=0; anod(); segment_1();break;// Hh
    case 1: segm2=10;segm1=10; segment_2();segment_1();anod();delayMicroseconds(200);segm2=10;segm1=a[1]; an=1; anod(); segment_1();break;// hH
    case 2: segm2=10;segm1=10; segment_2();segment_1();anod();delayMicroseconds(200);segm2=10;segm1=a[2]; an=2; anod(); segment_1();break;// Mm
    case 3: segm1=10;segm2=10; segment_1();segment_2();anod();delayMicroseconds(200);segm1=10;segm2=a[3]; an=3; anod(); segment_2();break;// mM
    case 4: segm1=10;segm2=10; segment_1();segment_2();anod();delayMicroseconds(200);segm1=10;segm2=a[4]; an=4; anod(); segment_2();break;// Ss
    case 5: segm1=10;segm2=10; segment_1();segment_2();anod();delayMicroseconds(200);segm1=10;segm2=a[5]; an=5; anod(); segment_2();break;// sS        
  }
   i++;if(i>5){i=0;} 
  }
void segment_1(){
  switch(segm1){                                                                 
             //  A          B           C            D          E          F         G  
    case 0: ch(SEG_A1,1);ch(SEG_B1,1);ch(SEG_C1,1);ch(SEG_D1,1);ch(SEG_E1,1);ch(SEG_F1,1);ch(SEG_G1,0);break;// 0 
    case 1: ch(SEG_A1,0);ch(SEG_B1,1);ch(SEG_C1,1);ch(SEG_D1,0);ch(SEG_E1,0);ch(SEG_F1,0);ch(SEG_G1,0);break;// 1
    case 2: ch(SEG_A1,1);ch(SEG_B1,1);ch(SEG_C1,0);ch(SEG_D1,1);ch(SEG_E1,1);ch(SEG_F1,0);ch(SEG_G1,1);break;// 2
    case 3: ch(SEG_A1,1);ch(SEG_B1,1);ch(SEG_C1,1);ch(SEG_D1,1);ch(SEG_E1,0);ch(SEG_F1,0);ch(SEG_G1,1);break;// 3   
    case 4: ch(SEG_A1,0);ch(SEG_B1,1);ch(SEG_C1,1);ch(SEG_D1,0);ch(SEG_E1,0);ch(SEG_F1,1);ch(SEG_G1,1);break;// 4 
    case 5: ch(SEG_A1,1);ch(SEG_B1,0);ch(SEG_C1,1);ch(SEG_D1,1);ch(SEG_E1,0);ch(SEG_F1,1);ch(SEG_G1,1);break;// 5 
    case 6: ch(SEG_A1,1);ch(SEG_B1,0);ch(SEG_C1,1);ch(SEG_D1,1);ch(SEG_E1,1);ch(SEG_F1,1);ch(SEG_G1,1);break;// 6 
    case 7: ch(SEG_A1,1);ch(SEG_B1,1);ch(SEG_C1,1);ch(SEG_D1,0);ch(SEG_E1,0);ch(SEG_F1,0);ch(SEG_G1,0);break;// 7 
    case 8: ch(SEG_A1,1);ch(SEG_B1,1);ch(SEG_C1,1);ch(SEG_D1,1);ch(SEG_E1,1);ch(SEG_F1,1);ch(SEG_G1,1);break;// 8
    case 9: ch(SEG_A1,1);ch(SEG_B1,1);ch(SEG_C1,1);ch(SEG_D1,1);ch(SEG_E1,0);ch(SEG_F1,1);ch(SEG_G1,1);break;// 9 
   case 10: ch(SEG_A1,0);ch(SEG_B1,0);ch(SEG_C1,0);ch(SEG_D1,0);ch(SEG_E1,0);ch(SEG_F1,0);ch(SEG_G1,0);break;// пусто  
  }}
void segment_2(){
  switch(segm2){                                                                 
             //  A          B           C            D          E          F         G  
    case 0: ch(SEG_A2,1);ch(SEG_B2,1);ch(SEG_C2,1);ch(SEG_D2,1);ch(SEG_E2,1);ch(SEG_F2,1);ch(SEG_G2,0);break;// 0 
    case 1: ch(SEG_A2,0);ch(SEG_B2,1);ch(SEG_C2,1);ch(SEG_D2,0);ch(SEG_E2,0);ch(SEG_F2,0);ch(SEG_G2,0);break;// 1
    case 2: ch(SEG_A2,1);ch(SEG_B2,1);ch(SEG_C2,0);ch(SEG_D2,1);ch(SEG_E2,1);ch(SEG_F2,0);ch(SEG_G2,1);break;// 2
    case 3: ch(SEG_A2,1);ch(SEG_B2,1);ch(SEG_C2,1);ch(SEG_D2,1);ch(SEG_E2,0);ch(SEG_F2,0);ch(SEG_G2,1);break;// 3   
    case 4: ch(SEG_A2,0);ch(SEG_B2,1);ch(SEG_C2,1);ch(SEG_D2,0);ch(SEG_E2,0);ch(SEG_F2,1);ch(SEG_G2,1);break;// 4 
    case 5: ch(SEG_A2,1);ch(SEG_B2,0);ch(SEG_C2,1);ch(SEG_D2,1);ch(SEG_E2,0);ch(SEG_F2,1);ch(SEG_G2,1);break;// 5 
    case 6: ch(SEG_A2,1);ch(SEG_B2,0);ch(SEG_C2,1);ch(SEG_D2,1);ch(SEG_E2,1);ch(SEG_F2,1);ch(SEG_G2,1);break;// 6 
    case 7: ch(SEG_A2,1);ch(SEG_B2,1);ch(SEG_C2,1);ch(SEG_D2,0);ch(SEG_E2,0);ch(SEG_F2,0);ch(SEG_G2,0);break;// 7 
    case 8: ch(SEG_A2,1);ch(SEG_B2,1);ch(SEG_C2,1);ch(SEG_D2,1);ch(SEG_E2,1);ch(SEG_F2,1);ch(SEG_G2,1);break;// 8
    case 9: ch(SEG_A2,1);ch(SEG_B2,1);ch(SEG_C2,1);ch(SEG_D2,1);ch(SEG_E2,0);ch(SEG_F2,1);ch(SEG_G2,1);break;// 9 
   case 10: ch(SEG_A2,0);ch(SEG_B2,0);ch(SEG_C2,0);ch(SEG_D2,0);ch(SEG_E2,0);ch(SEG_F2,0);ch(SEG_G2,0);break;// пусто  
  }} 
void segment_3(){
  switch(segm3){                                                                 
             //  A          B           C            D          E          F         G  
    case 0: ch(SEG_A3,1);ch(SEG_B3,1);ch(SEG_C3,1);ch(SEG_D3,1);ch(SEG_E3,1);ch(SEG_F3,1);ch(SEG_G3,0);break;// 0 
    case 1: ch(SEG_A3,0);ch(SEG_B3,1);ch(SEG_C3,1);ch(SEG_D3,0);ch(SEG_E3,0);ch(SEG_F3,0);ch(SEG_G3,0);break;// 1
    case 2: ch(SEG_A3,1);ch(SEG_B3,1);ch(SEG_C3,0);ch(SEG_D3,1);ch(SEG_E3,1);ch(SEG_F3,0);ch(SEG_G3,1);break;// 2
    case 3: ch(SEG_A3,1);ch(SEG_B3,1);ch(SEG_C3,1);ch(SEG_D3,1);ch(SEG_E3,0);ch(SEG_F3,0);ch(SEG_G3,1);break;// 3   
    case 4: ch(SEG_A3,0);ch(SEG_B3,1);ch(SEG_C3,1);ch(SEG_D3,0);ch(SEG_E3,0);ch(SEG_F3,1);ch(SEG_G3,1);break;// 4 
    case 5: ch(SEG_A3,1);ch(SEG_B3,0);ch(SEG_C3,1);ch(SEG_D3,1);ch(SEG_E3,0);ch(SEG_F3,1);ch(SEG_G3,1);break;// 5 
    case 6: ch(SEG_A3,1);ch(SEG_B3,0);ch(SEG_C3,1);ch(SEG_D3,1);ch(SEG_E3,1);ch(SEG_F3,1);ch(SEG_G3,1);break;// 6 
    case 7: ch(SEG_A3,1);ch(SEG_B3,1);ch(SEG_C3,1);ch(SEG_D3,0);ch(SEG_E3,0);ch(SEG_F3,0);ch(SEG_G3,0);break;// 7 
    case 8: ch(SEG_A3,1);ch(SEG_B3,1);ch(SEG_C3,1);ch(SEG_D3,1);ch(SEG_E3,1);ch(SEG_F3,1);ch(SEG_G3,1);break;// 8
    case 9: ch(SEG_A3,1);ch(SEG_B3,1);ch(SEG_C3,1);ch(SEG_D3,1);ch(SEG_E3,0);ch(SEG_F3,1);ch(SEG_G3,1);break;// 9 
   case 10: ch(SEG_A3,0);ch(SEG_B3,0);ch(SEG_C3,0);ch(SEG_D3,0);ch(SEG_E3,0);ch(SEG_F3,0);ch(SEG_G3,0);break;// пусто  
  }} 
   
void anod(){ // 34:51:23 BIG NUMBER
  switch(an){                                                             
    case 0:ch(AN_3,0);ch(AN_4,1);ch(AN_5,1);ch(AN_1,1);ch(AN_2,1);ch(AN_3,1);break;  
    case 1:ch(AN_3,1);ch(AN_4,0);ch(AN_5,1);ch(AN_1,1);ch(AN_2,1);ch(AN_3,1);break; 
    case 2:ch(AN_3,1);ch(AN_4,1);ch(AN_5,0);ch(AN_1,1);ch(AN_2,1);ch(AN_3,1);break;  
    case 3:ch(AN_3,1);ch(AN_4,1);ch(AN_5,1);ch(AN_1,0);ch(AN_2,1);ch(AN_3,1);break;  
    case 4:ch(AN_3,1);ch(AN_4,1);ch(AN_5,1);ch(AN_1,1);ch(AN_2,0);ch(AN_3,1);break; 
    case 5:ch(AN_3,1);ch(AN_4,1);ch(AN_5,1);ch(AN_1,1);ch(AN_2,1);ch(AN_3,0);break;   
  }}
void ch(int pin, int logic){digitalWrite(pin,logic);}
  

88

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

http://forum.rcl-radio.ru/uploads/images/2023/08/f5a1a7001e6c3d87ad2c1556374ed11a.jpg готов к тестированию

89

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

Я немного поменял провода

AN1 == Q1
AN2 == Q2
AN3 == Q3
AN4 == Q4
AN5 == Q5

90

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

Тестовый скетч под все

//// Катоды 1 группа
#define SEG_A1       28 // 33 
#define SEG_B1       29 // 32 
#define SEG_C1       30 // 31
#define SEG_D1       31 // 30
#define SEG_E1       23 // 26
#define SEG_F1       22 // 25
#define SEG_G1       21 // 24 
//// Катоды 2 группа
#define SEG_A2       11 // 13 
#define SEG_B2       12 // 14 
#define SEG_C2       13 // 15
#define SEG_D2       14 // 16
#define SEG_E2       15 // 17
#define SEG_F2       18 // 21
#define SEG_G2       19 // 22 
//// Катоды 3 группа
#define SEG_A3        1 // 44
#define SEG_B3        2 // 43 
#define SEG_C3        3 // 42
#define SEG_D3        4 // 41
#define SEG_E3        5 // 1
#define SEG_F3        6 // 2
#define SEG_G3        7 // 3 
//// Аноды
// 34:51:23 == HH:MM:SS большые цифры > 34:51:23 === номер транзистора Q1-Q5
#define AN_1        27 // 34
#define AN_2        26 // 35
#define AN_3        25 // 36
#define AN_4        24 // 37
#define AN_5        0  // 40

#include <MsTimer2.h>           // http://rcl-radio.ru/wp-content/uploads/2018/11/MsTimer2.zip       

long oldPosition  = -999,newPosition,times;
int an,segm1,segm2,segm3,i;
byte d1,d0,h1,h0,m1,m0,s1,s0,t1,t0,g0,g1,dn;
  
void setup() {
  MsTimer2::set(2, to_Timer);MsTimer2::start();
    pinMode(SEG_A1,OUTPUT);
    pinMode(SEG_B1,OUTPUT);
    pinMode(SEG_C1,OUTPUT);
    pinMode(SEG_D1,OUTPUT);
    pinMode(SEG_E1,OUTPUT);
    pinMode(SEG_F1,OUTPUT);
    pinMode(SEG_G1,OUTPUT);
    pinMode(AN_1,OUTPUT);
    pinMode(AN_2,OUTPUT);
    pinMode(AN_3,OUTPUT);
    pinMode(AN_4,OUTPUT);
    pinMode(AN_5,OUTPUT);
    pinMode(SEG_A2,OUTPUT);
    pinMode(SEG_B2,OUTPUT);
    pinMode(SEG_C2,OUTPUT);
    pinMode(SEG_D2,OUTPUT);
    pinMode(SEG_E2,OUTPUT);
    pinMode(SEG_F2,OUTPUT);
    pinMode(SEG_G2,OUTPUT);

    pinMode(SEG_A3,OUTPUT);
    pinMode(SEG_B3,OUTPUT);
    pinMode(SEG_C3,OUTPUT);
    pinMode(SEG_D3,OUTPUT);
    pinMode(SEG_E3,OUTPUT);
    pinMode(SEG_F3,OUTPUT);
    pinMode(SEG_G3,OUTPUT);
}

void loop() {
   d0=6;// дата _1
   d1=2;// дата 1_
   m0=2; // мин  _0
   m1=2; // мин  1_
   g1=2; // год  1_
   g0=3; // год  _1
   m1=2;
   m0=6;
   s1=2;
   s0=5;
   t1=2;
   t0=5;
   dn=3;
   delay(1000);
}

void to_Timer(){
  switch(i){
    case 0: segm1=10;segm2=10;segm3=10;segment_1();segment_2();segment_3();an=5;anod();delayMicroseconds(200);
     segm1=d0;segm2=m0;segm3=g1; an=0; anod(); segment_1();segment_2();segment_3();break;
     
    case 1: segm1=10;segm2=10;segm3=10;segment_1();segment_2();segment_3();an=5;anod();delayMicroseconds(200);
     segm1=dn;segm2=s1;segm3=g0; an=1; anod(); segment_1();segment_2();segment_3();break;   

    case 2: segm1=10;segm2=10;segm3=10;segment_1();segment_2();segment_3();an=5;anod();delayMicroseconds(200);
     segm1=h1;segm2=s0;segm3=m1; an=2; anod(); segment_1();segment_2();segment_3();break; 

    case 3: segm1=10;segm2=10;segm3=10;segment_1();segment_2();segment_3();an=5;anod();delayMicroseconds(200);
     segm1=h0;segm2=t1;segm3=g0; an=3; anod(); segment_1();segment_2();segment_3();break;   

    case 4: segm1=10;segm2=10;segm3=10;segment_1();segment_2();segment_3();an=5;anod();delayMicroseconds(200);
     segm1=m1;segm2=t0;segm3=d1; an=4; anod(); segment_1();segment_2();segment_3();break;           
  }
   i++;if(i>4){i=0;} 
  }
void segment_1(){
  switch(segm1){                                                                 
             //  A          B           C            D          E          F         G  
    case 0: ch(SEG_A1,1);ch(SEG_B1,1);ch(SEG_C1,1);ch(SEG_D1,1);ch(SEG_E1,1);ch(SEG_F1,1);ch(SEG_G1,0);break;// 0 
    case 1: ch(SEG_A1,0);ch(SEG_B1,1);ch(SEG_C1,1);ch(SEG_D1,0);ch(SEG_E1,0);ch(SEG_F1,0);ch(SEG_G1,0);break;// 1
    case 2: ch(SEG_A1,1);ch(SEG_B1,1);ch(SEG_C1,0);ch(SEG_D1,1);ch(SEG_E1,1);ch(SEG_F1,0);ch(SEG_G1,1);break;// 2
    case 3: ch(SEG_A1,1);ch(SEG_B1,1);ch(SEG_C1,1);ch(SEG_D1,1);ch(SEG_E1,0);ch(SEG_F1,0);ch(SEG_G1,1);break;// 3   
    case 4: ch(SEG_A1,0);ch(SEG_B1,1);ch(SEG_C1,1);ch(SEG_D1,0);ch(SEG_E1,0);ch(SEG_F1,1);ch(SEG_G1,1);break;// 4 
    case 5: ch(SEG_A1,1);ch(SEG_B1,0);ch(SEG_C1,1);ch(SEG_D1,1);ch(SEG_E1,0);ch(SEG_F1,1);ch(SEG_G1,1);break;// 5 
    case 6: ch(SEG_A1,1);ch(SEG_B1,0);ch(SEG_C1,1);ch(SEG_D1,1);ch(SEG_E1,1);ch(SEG_F1,1);ch(SEG_G1,1);break;// 6 
    case 7: ch(SEG_A1,1);ch(SEG_B1,1);ch(SEG_C1,1);ch(SEG_D1,0);ch(SEG_E1,0);ch(SEG_F1,0);ch(SEG_G1,0);break;// 7 
    case 8: ch(SEG_A1,1);ch(SEG_B1,1);ch(SEG_C1,1);ch(SEG_D1,1);ch(SEG_E1,1);ch(SEG_F1,1);ch(SEG_G1,1);break;// 8
    case 9: ch(SEG_A1,1);ch(SEG_B1,1);ch(SEG_C1,1);ch(SEG_D1,1);ch(SEG_E1,0);ch(SEG_F1,1);ch(SEG_G1,1);break;// 9 
   case 10: ch(SEG_A1,0);ch(SEG_B1,0);ch(SEG_C1,0);ch(SEG_D1,0);ch(SEG_E1,0);ch(SEG_F1,0);ch(SEG_G1,0);break;// пусто  
  }}
void segment_2(){
  switch(segm2){                                                                 
             //  A          B           C            D          E          F         G  
    case 0: ch(SEG_A2,1);ch(SEG_B2,1);ch(SEG_C2,1);ch(SEG_D2,1);ch(SEG_E2,1);ch(SEG_F2,1);ch(SEG_G2,0);break;// 0 
    case 1: ch(SEG_A2,0);ch(SEG_B2,1);ch(SEG_C2,1);ch(SEG_D2,0);ch(SEG_E2,0);ch(SEG_F2,0);ch(SEG_G2,0);break;// 1
    case 2: ch(SEG_A2,1);ch(SEG_B2,1);ch(SEG_C2,0);ch(SEG_D2,1);ch(SEG_E2,1);ch(SEG_F2,0);ch(SEG_G2,1);break;// 2
    case 3: ch(SEG_A2,1);ch(SEG_B2,1);ch(SEG_C2,1);ch(SEG_D2,1);ch(SEG_E2,0);ch(SEG_F2,0);ch(SEG_G2,1);break;// 3   
    case 4: ch(SEG_A2,0);ch(SEG_B2,1);ch(SEG_C2,1);ch(SEG_D2,0);ch(SEG_E2,0);ch(SEG_F2,1);ch(SEG_G2,1);break;// 4 
    case 5: ch(SEG_A2,1);ch(SEG_B2,0);ch(SEG_C2,1);ch(SEG_D2,1);ch(SEG_E2,0);ch(SEG_F2,1);ch(SEG_G2,1);break;// 5 
    case 6: ch(SEG_A2,1);ch(SEG_B2,0);ch(SEG_C2,1);ch(SEG_D2,1);ch(SEG_E2,1);ch(SEG_F2,1);ch(SEG_G2,1);break;// 6 
    case 7: ch(SEG_A2,1);ch(SEG_B2,1);ch(SEG_C2,1);ch(SEG_D2,0);ch(SEG_E2,0);ch(SEG_F2,0);ch(SEG_G2,0);break;// 7 
    case 8: ch(SEG_A2,1);ch(SEG_B2,1);ch(SEG_C2,1);ch(SEG_D2,1);ch(SEG_E2,1);ch(SEG_F2,1);ch(SEG_G2,1);break;// 8
    case 9: ch(SEG_A2,1);ch(SEG_B2,1);ch(SEG_C2,1);ch(SEG_D2,1);ch(SEG_E2,0);ch(SEG_F2,1);ch(SEG_G2,1);break;// 9 
   case 10: ch(SEG_A2,0);ch(SEG_B2,0);ch(SEG_C2,0);ch(SEG_D2,0);ch(SEG_E2,0);ch(SEG_F2,0);ch(SEG_G2,0);break;// пусто  
  }} 
void segment_3(){
  switch(segm3){                                                                 
             //  A          B           C            D          E          F         G  
    case 0: ch(SEG_A3,1);ch(SEG_B3,1);ch(SEG_C3,1);ch(SEG_D3,1);ch(SEG_E3,1);ch(SEG_F3,1);ch(SEG_G3,0);break;// 0 
    case 1: ch(SEG_A3,0);ch(SEG_B3,1);ch(SEG_C3,1);ch(SEG_D3,0);ch(SEG_E3,0);ch(SEG_F3,0);ch(SEG_G3,0);break;// 1
    case 2: ch(SEG_A3,1);ch(SEG_B3,1);ch(SEG_C3,0);ch(SEG_D3,1);ch(SEG_E3,1);ch(SEG_F3,0);ch(SEG_G3,1);break;// 2
    case 3: ch(SEG_A3,1);ch(SEG_B3,1);ch(SEG_C3,1);ch(SEG_D3,1);ch(SEG_E3,0);ch(SEG_F3,0);ch(SEG_G3,1);break;// 3   
    case 4: ch(SEG_A3,0);ch(SEG_B3,1);ch(SEG_C3,1);ch(SEG_D3,0);ch(SEG_E3,0);ch(SEG_F3,1);ch(SEG_G3,1);break;// 4 
    case 5: ch(SEG_A3,1);ch(SEG_B3,0);ch(SEG_C3,1);ch(SEG_D3,1);ch(SEG_E3,0);ch(SEG_F3,1);ch(SEG_G3,1);break;// 5 
    case 6: ch(SEG_A3,1);ch(SEG_B3,0);ch(SEG_C3,1);ch(SEG_D3,1);ch(SEG_E3,1);ch(SEG_F3,1);ch(SEG_G3,1);break;// 6 
    case 7: ch(SEG_A3,1);ch(SEG_B3,1);ch(SEG_C3,1);ch(SEG_D3,0);ch(SEG_E3,0);ch(SEG_F3,0);ch(SEG_G3,0);break;// 7 
    case 8: ch(SEG_A3,1);ch(SEG_B3,1);ch(SEG_C3,1);ch(SEG_D3,1);ch(SEG_E3,1);ch(SEG_F3,1);ch(SEG_G3,1);break;// 8
    case 9: ch(SEG_A3,1);ch(SEG_B3,1);ch(SEG_C3,1);ch(SEG_D3,1);ch(SEG_E3,0);ch(SEG_F3,1);ch(SEG_G3,1);break;// 9 
   case 10: ch(SEG_A3,0);ch(SEG_B3,0);ch(SEG_C3,0);ch(SEG_D3,0);ch(SEG_E3,0);ch(SEG_F3,0);ch(SEG_G3,0);break;// пусто  
  }} 
   
void anod(){ 
  switch(an){                                                             
    case 0:ch(AN_1,0);ch(AN_2,1);ch(AN_3,1);ch(AN_4,1);ch(AN_5,1);break;  
    case 1:ch(AN_1,1);ch(AN_2,0);ch(AN_3,1);ch(AN_4,1);ch(AN_5,1);break; 
    case 2:ch(AN_1,1);ch(AN_2,1);ch(AN_3,0);ch(AN_4,1);ch(AN_5,1);break;  
    case 3:ch(AN_1,1);ch(AN_2,1);ch(AN_3,1);ch(AN_4,0);ch(AN_5,1);break;  
    case 4:ch(AN_1,1);ch(AN_2,1);ch(AN_3,1);ch(AN_4,1);ch(AN_5,0);break; 
    case 5:ch(AN_1,1);ch(AN_2,1);ch(AN_3,1);ch(AN_4,1);ch(AN_5,1);break; 
  }}
void ch(int pin, int logic){digitalWrite(pin,logic);}
  

91

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

тот же скетч с инверсией выходов анода

//// Катоды 1 группа
#define SEG_A1       28 // 33 
#define SEG_B1       29 // 32 
#define SEG_C1       30 // 31
#define SEG_D1       31 // 30
#define SEG_E1       23 // 26
#define SEG_F1       22 // 25
#define SEG_G1       21 // 24 
//// Катоды 2 группа
#define SEG_A2       11 // 13 
#define SEG_B2       12 // 14 
#define SEG_C2       13 // 15
#define SEG_D2       14 // 16
#define SEG_E2       15 // 17
#define SEG_F2       18 // 21
#define SEG_G2       19 // 22 
//// Катоды 3 группа
#define SEG_A3        1 // 44
#define SEG_B3        2 // 43 
#define SEG_C3        3 // 42
#define SEG_D3        4 // 41
#define SEG_E3        5 // 1
#define SEG_F3        6 // 2
#define SEG_G3        7 // 3 
//// Аноды
// 34:51:23 == HH:MM:SS большые цифры > 34:51:23 === номер транзистора Q1-Q5
#define AN_1        27 // 34
#define AN_2        26 // 35
#define AN_3        25 // 36
#define AN_4        24 // 37
#define AN_5        0  // 40

#include <MsTimer2.h>           // http://rcl-radio.ru/wp-content/uploads/2018/11/MsTimer2.zip       

long oldPosition  = -999,newPosition,times;
int an,segm1,segm2,segm3,i;
byte d1,d0,h1,h0,m1,m0,s1,s0,t1,t0,g0,g1,dn;
  
void setup() {
  MsTimer2::set(2, to_Timer);MsTimer2::start();
    pinMode(SEG_A1,OUTPUT);
    pinMode(SEG_B1,OUTPUT);
    pinMode(SEG_C1,OUTPUT);
    pinMode(SEG_D1,OUTPUT);
    pinMode(SEG_E1,OUTPUT);
    pinMode(SEG_F1,OUTPUT);
    pinMode(SEG_G1,OUTPUT);
    pinMode(AN_1,OUTPUT);
    pinMode(AN_2,OUTPUT);
    pinMode(AN_3,OUTPUT);
    pinMode(AN_4,OUTPUT);
    pinMode(AN_5,OUTPUT);
    pinMode(SEG_A2,OUTPUT);
    pinMode(SEG_B2,OUTPUT);
    pinMode(SEG_C2,OUTPUT);
    pinMode(SEG_D2,OUTPUT);
    pinMode(SEG_E2,OUTPUT);
    pinMode(SEG_F2,OUTPUT);
    pinMode(SEG_G2,OUTPUT);

    pinMode(SEG_A3,OUTPUT);
    pinMode(SEG_B3,OUTPUT);
    pinMode(SEG_C3,OUTPUT);
    pinMode(SEG_D3,OUTPUT);
    pinMode(SEG_E3,OUTPUT);
    pinMode(SEG_F3,OUTPUT);
    pinMode(SEG_G3,OUTPUT);
}

void loop() {
   d0=6;// дата _1
   d1=2;// дата 1_
   m0=2; // мин  _0
   m1=2; // мин  1_
   g1=2; // год  1_
   g0=3; // год  _1
   m1=2;
   m0=6;
   s1=2;
   s0=5;
   t1=2;
   t0=5;
   dn=3;
   delay(1000);
}

void to_Timer(){
  switch(i){
    case 0: segm1=10;segm2=10;segm3=10;segment_1();segment_2();segment_3();an=5;anod();delayMicroseconds(200);
     segm1=d0;segm2=m0;segm3=g1; an=0; anod(); segment_1();segment_2();segment_3();break;
     
    case 1: segm1=10;segm2=10;segm3=10;segment_1();segment_2();segment_3();an=5;anod();delayMicroseconds(200);
     segm1=dn;segm2=s1;segm3=g0; an=1; anod(); segment_1();segment_2();segment_3();break;   

    case 2: segm1=10;segm2=10;segm3=10;segment_1();segment_2();segment_3();an=5;anod();delayMicroseconds(200);
     segm1=h1;segm2=s0;segm3=m1; an=2; anod(); segment_1();segment_2();segment_3();break; 

    case 3: segm1=10;segm2=10;segm3=10;segment_1();segment_2();segment_3();an=5;anod();delayMicroseconds(200);
     segm1=h0;segm2=t1;segm3=g0; an=3; anod(); segment_1();segment_2();segment_3();break;   

    case 4: segm1=10;segm2=10;segm3=10;segment_1();segment_2();segment_3();an=5;anod();delayMicroseconds(200);
     segm1=m1;segm2=t0;segm3=d1; an=4; anod(); segment_1();segment_2();segment_3();break;           
  }
   i++;if(i>4){i=0;} 
  }
void segment_1(){
  switch(segm1){                                                                 
             //  A          B           C            D          E          F         G  
    case 0: ch(SEG_A1,1);ch(SEG_B1,1);ch(SEG_C1,1);ch(SEG_D1,1);ch(SEG_E1,1);ch(SEG_F1,1);ch(SEG_G1,0);break;// 0 
    case 1: ch(SEG_A1,0);ch(SEG_B1,1);ch(SEG_C1,1);ch(SEG_D1,0);ch(SEG_E1,0);ch(SEG_F1,0);ch(SEG_G1,0);break;// 1
    case 2: ch(SEG_A1,1);ch(SEG_B1,1);ch(SEG_C1,0);ch(SEG_D1,1);ch(SEG_E1,1);ch(SEG_F1,0);ch(SEG_G1,1);break;// 2
    case 3: ch(SEG_A1,1);ch(SEG_B1,1);ch(SEG_C1,1);ch(SEG_D1,1);ch(SEG_E1,0);ch(SEG_F1,0);ch(SEG_G1,1);break;// 3   
    case 4: ch(SEG_A1,0);ch(SEG_B1,1);ch(SEG_C1,1);ch(SEG_D1,0);ch(SEG_E1,0);ch(SEG_F1,1);ch(SEG_G1,1);break;// 4 
    case 5: ch(SEG_A1,1);ch(SEG_B1,0);ch(SEG_C1,1);ch(SEG_D1,1);ch(SEG_E1,0);ch(SEG_F1,1);ch(SEG_G1,1);break;// 5 
    case 6: ch(SEG_A1,1);ch(SEG_B1,0);ch(SEG_C1,1);ch(SEG_D1,1);ch(SEG_E1,1);ch(SEG_F1,1);ch(SEG_G1,1);break;// 6 
    case 7: ch(SEG_A1,1);ch(SEG_B1,1);ch(SEG_C1,1);ch(SEG_D1,0);ch(SEG_E1,0);ch(SEG_F1,0);ch(SEG_G1,0);break;// 7 
    case 8: ch(SEG_A1,1);ch(SEG_B1,1);ch(SEG_C1,1);ch(SEG_D1,1);ch(SEG_E1,1);ch(SEG_F1,1);ch(SEG_G1,1);break;// 8
    case 9: ch(SEG_A1,1);ch(SEG_B1,1);ch(SEG_C1,1);ch(SEG_D1,1);ch(SEG_E1,0);ch(SEG_F1,1);ch(SEG_G1,1);break;// 9 
   case 10: ch(SEG_A1,0);ch(SEG_B1,0);ch(SEG_C1,0);ch(SEG_D1,0);ch(SEG_E1,0);ch(SEG_F1,0);ch(SEG_G1,0);break;// пусто  
  }}
void segment_2(){
  switch(segm2){                                                                 
             //  A          B           C            D          E          F         G  
    case 0: ch(SEG_A2,1);ch(SEG_B2,1);ch(SEG_C2,1);ch(SEG_D2,1);ch(SEG_E2,1);ch(SEG_F2,1);ch(SEG_G2,0);break;// 0 
    case 1: ch(SEG_A2,0);ch(SEG_B2,1);ch(SEG_C2,1);ch(SEG_D2,0);ch(SEG_E2,0);ch(SEG_F2,0);ch(SEG_G2,0);break;// 1
    case 2: ch(SEG_A2,1);ch(SEG_B2,1);ch(SEG_C2,0);ch(SEG_D2,1);ch(SEG_E2,1);ch(SEG_F2,0);ch(SEG_G2,1);break;// 2
    case 3: ch(SEG_A2,1);ch(SEG_B2,1);ch(SEG_C2,1);ch(SEG_D2,1);ch(SEG_E2,0);ch(SEG_F2,0);ch(SEG_G2,1);break;// 3   
    case 4: ch(SEG_A2,0);ch(SEG_B2,1);ch(SEG_C2,1);ch(SEG_D2,0);ch(SEG_E2,0);ch(SEG_F2,1);ch(SEG_G2,1);break;// 4 
    case 5: ch(SEG_A2,1);ch(SEG_B2,0);ch(SEG_C2,1);ch(SEG_D2,1);ch(SEG_E2,0);ch(SEG_F2,1);ch(SEG_G2,1);break;// 5 
    case 6: ch(SEG_A2,1);ch(SEG_B2,0);ch(SEG_C2,1);ch(SEG_D2,1);ch(SEG_E2,1);ch(SEG_F2,1);ch(SEG_G2,1);break;// 6 
    case 7: ch(SEG_A2,1);ch(SEG_B2,1);ch(SEG_C2,1);ch(SEG_D2,0);ch(SEG_E2,0);ch(SEG_F2,0);ch(SEG_G2,0);break;// 7 
    case 8: ch(SEG_A2,1);ch(SEG_B2,1);ch(SEG_C2,1);ch(SEG_D2,1);ch(SEG_E2,1);ch(SEG_F2,1);ch(SEG_G2,1);break;// 8
    case 9: ch(SEG_A2,1);ch(SEG_B2,1);ch(SEG_C2,1);ch(SEG_D2,1);ch(SEG_E2,0);ch(SEG_F2,1);ch(SEG_G2,1);break;// 9 
   case 10: ch(SEG_A2,0);ch(SEG_B2,0);ch(SEG_C2,0);ch(SEG_D2,0);ch(SEG_E2,0);ch(SEG_F2,0);ch(SEG_G2,0);break;// пусто  
  }} 
void segment_3(){
  switch(segm3){                                                                 
             //  A          B           C            D          E          F         G  
    case 0: ch(SEG_A3,1);ch(SEG_B3,1);ch(SEG_C3,1);ch(SEG_D3,1);ch(SEG_E3,1);ch(SEG_F3,1);ch(SEG_G3,0);break;// 0 
    case 1: ch(SEG_A3,0);ch(SEG_B3,1);ch(SEG_C3,1);ch(SEG_D3,0);ch(SEG_E3,0);ch(SEG_F3,0);ch(SEG_G3,0);break;// 1
    case 2: ch(SEG_A3,1);ch(SEG_B3,1);ch(SEG_C3,0);ch(SEG_D3,1);ch(SEG_E3,1);ch(SEG_F3,0);ch(SEG_G3,1);break;// 2
    case 3: ch(SEG_A3,1);ch(SEG_B3,1);ch(SEG_C3,1);ch(SEG_D3,1);ch(SEG_E3,0);ch(SEG_F3,0);ch(SEG_G3,1);break;// 3   
    case 4: ch(SEG_A3,0);ch(SEG_B3,1);ch(SEG_C3,1);ch(SEG_D3,0);ch(SEG_E3,0);ch(SEG_F3,1);ch(SEG_G3,1);break;// 4 
    case 5: ch(SEG_A3,1);ch(SEG_B3,0);ch(SEG_C3,1);ch(SEG_D3,1);ch(SEG_E3,0);ch(SEG_F3,1);ch(SEG_G3,1);break;// 5 
    case 6: ch(SEG_A3,1);ch(SEG_B3,0);ch(SEG_C3,1);ch(SEG_D3,1);ch(SEG_E3,1);ch(SEG_F3,1);ch(SEG_G3,1);break;// 6 
    case 7: ch(SEG_A3,1);ch(SEG_B3,1);ch(SEG_C3,1);ch(SEG_D3,0);ch(SEG_E3,0);ch(SEG_F3,0);ch(SEG_G3,0);break;// 7 
    case 8: ch(SEG_A3,1);ch(SEG_B3,1);ch(SEG_C3,1);ch(SEG_D3,1);ch(SEG_E3,1);ch(SEG_F3,1);ch(SEG_G3,1);break;// 8
    case 9: ch(SEG_A3,1);ch(SEG_B3,1);ch(SEG_C3,1);ch(SEG_D3,1);ch(SEG_E3,0);ch(SEG_F3,1);ch(SEG_G3,1);break;// 9 
   case 10: ch(SEG_A3,0);ch(SEG_B3,0);ch(SEG_C3,0);ch(SEG_D3,0);ch(SEG_E3,0);ch(SEG_F3,0);ch(SEG_G3,0);break;// пусто  
  }} 
   
void anod(){ 
  switch(an){                                                             
    case 0:ch(AN_1,1);ch(AN_2,0);ch(AN_3,0);ch(AN_4,0);ch(AN_5,0);break;  
    case 1:ch(AN_1,0);ch(AN_2,1);ch(AN_3,0);ch(AN_4,0);ch(AN_5,0);break; 
    case 2:ch(AN_1,0);ch(AN_2,0);ch(AN_3,1);ch(AN_4,0);ch(AN_5,0);break;  
    case 3:ch(AN_1,0);ch(AN_2,0);ch(AN_3,0);ch(AN_4,1);ch(AN_5,0);break;  
    case 4:ch(AN_1,0);ch(AN_2,0);ch(AN_3,0);ch(AN_4,0);ch(AN_5,1);break; 
    case 5:ch(AN_1,0);ch(AN_2,0);ch(AN_3,0);ch(AN_4,0);ch(AN_5,0);break; 
  }}
void ch(int pin, int logic){digitalWrite(pin,logic);}
  

92

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

Я поменял настройки таймера

Частота таймера 200Гц

//// Катоды 1 группа
#define SEG_A1       28 // 33 
#define SEG_B1       29 // 32 
#define SEG_C1       30 // 31
#define SEG_D1       31 // 30
#define SEG_E1       23 // 26
#define SEG_F1       22 // 25
#define SEG_G1       21 // 24 
//// Катоды 2 группа
#define SEG_A2       11 // 13 
#define SEG_B2       12 // 14 
#define SEG_C2       13 // 15
#define SEG_D2       14 // 16
#define SEG_E2       15 // 17
#define SEG_F2       18 // 21
#define SEG_G2       19 // 22 
//// Катоды 3 группа
#define SEG_A3        1 // 44
#define SEG_B3        2 // 43 
#define SEG_C3        3 // 42
#define SEG_D3        4 // 41
#define SEG_E3        5 // 1
#define SEG_F3        6 // 2
#define SEG_G3        7 // 3 
//// Аноды
// 34:51:23 == HH:MM:SS большые цифры > 34:51:23 === номер транзистора Q1-Q5
#define AN_1        27 // 34
#define AN_2        26 // 35
#define AN_3        25 // 36
#define AN_4        24 // 37
#define AN_5        0  // 40


long oldPosition  = -999, newPosition, times;
int an, segm1, segm2, segm3, i;
byte d1, d0, h1, h0, m1, m0, s1, s0, t1, t0, g0, g1, dn;

void setup() {
  cli();
  TCCR2 = 0;
  TCNT2 = 0;
  // (8000000/((155+1)x256))=200.32051282051 Hz
  OCR2 = 155;
  TCCR2 |= (1 << WGM21);
  // Prescaler 256
  TCCR2 |= (1 << CS22) | (1 << CS21);
  TIMSK |= (1 << OCIE2);
  sei();
  pinMode(SEG_A1, OUTPUT);
  pinMode(SEG_B1, OUTPUT);
  pinMode(SEG_C1, OUTPUT);
  pinMode(SEG_D1, OUTPUT);
  pinMode(SEG_E1, OUTPUT);
  pinMode(SEG_F1, OUTPUT);
  pinMode(SEG_G1, OUTPUT);
  pinMode(AN_1, OUTPUT);
  pinMode(AN_2, OUTPUT);
  pinMode(AN_3, OUTPUT);
  pinMode(AN_4, OUTPUT);
  pinMode(AN_5, OUTPUT);
  pinMode(SEG_A2, OUTPUT);
  pinMode(SEG_B2, OUTPUT);
  pinMode(SEG_C2, OUTPUT);
  pinMode(SEG_D2, OUTPUT);
  pinMode(SEG_E2, OUTPUT);
  pinMode(SEG_F2, OUTPUT);
  pinMode(SEG_G2, OUTPUT);

  pinMode(SEG_A3, OUTPUT);
  pinMode(SEG_B3, OUTPUT);
  pinMode(SEG_C3, OUTPUT);
  pinMode(SEG_D3, OUTPUT);
  pinMode(SEG_E3, OUTPUT);
  pinMode(SEG_F3, OUTPUT);
  pinMode(SEG_G3, OUTPUT);
}

void loop() {
  d0 = 6; // дата _1
  d1 = 2; // дата 1_
  m0 = 2; // мин  _0
  m1 = 2; // мин  1_
  g1 = 2; // год  1_
  g0 = 3; // год  _1
  m1 = 2;
  m0 = 6;
  s1 = 2;
  s0 = 5;
  t1 = 2;
  t0 = 5;
  dn = 3;
  delay(1000);
}

ISR(TIMER2_COMPA_vect){
  switch (i) {
    case 0: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(200);
      segm1 = d0; segm2 = m0; segm3 = g1; an = 0; anod(); segment_1(); segment_2(); segment_3(); break;

    case 1: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(200);
      segm1 = dn; segm2 = s1; segm3 = g0; an = 1; anod(); segment_1(); segment_2(); segment_3(); break;

    case 2: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(200);
      segm1 = h1; segm2 = s0; segm3 = m1; an = 2; anod(); segment_1(); segment_2(); segment_3(); break;

    case 3: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(200);
      segm1 = h0; segm2 = t1; segm3 = g0; an = 3; anod(); segment_1(); segment_2(); segment_3(); break;

    case 4: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(200);
      segm1 = m1; segm2 = t0; segm3 = d1; an = 4; anod(); segment_1(); segment_2(); segment_3(); break;
  }
  i++; if (i > 4) {
    i = 0;
  }
}
void segment_1() {
  switch (segm1) {
    //  A          B           C            D          E          F         G
    case 0: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 0); break; // 0
    case 1: ch(SEG_A1, 0); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 1
    case 2: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 1); break; // 2
    case 3: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 0); ch(SEG_F1, 0); ch(SEG_G1, 1); break; // 3
    case 4: ch(SEG_A1, 0); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // 4
    case 5: ch(SEG_A1, 1); ch(SEG_B1, 0); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 0); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // 5
    case 6: ch(SEG_A1, 1); ch(SEG_B1, 0); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // 6
    case 7: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 7
    case 8: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // 8
    case 9: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 0); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // 9
    case 10: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // пусто
  }
}
void segment_2() {
  switch (segm2) {
    //  A          B           C            D          E          F         G
    case 0: ch(SEG_A2, 1); ch(SEG_B2, 1); ch(SEG_C2, 1); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 0); break; // 0
    case 1: ch(SEG_A2, 0); ch(SEG_B2, 1); ch(SEG_C2, 1); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 1
    case 2: ch(SEG_A2, 1); ch(SEG_B2, 1); ch(SEG_C2, 0); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 0); ch(SEG_G2, 1); break; // 2
    case 3: ch(SEG_A2, 1); ch(SEG_B2, 1); ch(SEG_C2, 1); ch(SEG_D2, 1); ch(SEG_E2, 0); ch(SEG_F2, 0); ch(SEG_G2, 1); break; // 3
    case 4: ch(SEG_A2, 0); ch(SEG_B2, 1); ch(SEG_C2, 1); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 1); ch(SEG_G2, 1); break; // 4
    case 5: ch(SEG_A2, 1); ch(SEG_B2, 0); ch(SEG_C2, 1); ch(SEG_D2, 1); ch(SEG_E2, 0); ch(SEG_F2, 1); ch(SEG_G2, 1); break; // 5
    case 6: ch(SEG_A2, 1); ch(SEG_B2, 0); ch(SEG_C2, 1); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 1); break; // 6
    case 7: ch(SEG_A2, 1); ch(SEG_B2, 1); ch(SEG_C2, 1); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 7
    case 8: ch(SEG_A2, 1); ch(SEG_B2, 1); ch(SEG_C2, 1); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 1); break; // 8
    case 9: ch(SEG_A2, 1); ch(SEG_B2, 1); ch(SEG_C2, 1); ch(SEG_D2, 1); ch(SEG_E2, 0); ch(SEG_F2, 1); ch(SEG_G2, 1); break; // 9
    case 10: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // пусто
  }
}
void segment_3() {
  switch (segm3) {
    //  A          B           C            D          E          F         G
    case 0: ch(SEG_A3, 1); ch(SEG_B3, 1); ch(SEG_C3, 1); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 0); break; // 0
    case 1: ch(SEG_A3, 0); ch(SEG_B3, 1); ch(SEG_C3, 1); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 1
    case 2: ch(SEG_A3, 1); ch(SEG_B3, 1); ch(SEG_C3, 0); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 0); ch(SEG_G3, 1); break; // 2
    case 3: ch(SEG_A3, 1); ch(SEG_B3, 1); ch(SEG_C3, 1); ch(SEG_D3, 1); ch(SEG_E3, 0); ch(SEG_F3, 0); ch(SEG_G3, 1); break; // 3
    case 4: ch(SEG_A3, 0); ch(SEG_B3, 1); ch(SEG_C3, 1); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 1); ch(SEG_G3, 1); break; // 4
    case 5: ch(SEG_A3, 1); ch(SEG_B3, 0); ch(SEG_C3, 1); ch(SEG_D3, 1); ch(SEG_E3, 0); ch(SEG_F3, 1); ch(SEG_G3, 1); break; // 5
    case 6: ch(SEG_A3, 1); ch(SEG_B3, 0); ch(SEG_C3, 1); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 1); break; // 6
    case 7: ch(SEG_A3, 1); ch(SEG_B3, 1); ch(SEG_C3, 1); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 7
    case 8: ch(SEG_A3, 1); ch(SEG_B3, 1); ch(SEG_C3, 1); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 1); break; // 8
    case 9: ch(SEG_A3, 1); ch(SEG_B3, 1); ch(SEG_C3, 1); ch(SEG_D3, 1); ch(SEG_E3, 0); ch(SEG_F3, 1); ch(SEG_G3, 1); break; // 9
    case 10: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // пусто
  }
}

void anod() {
  switch (an) {
    case 0: ch(AN_1, 1); ch(AN_2, 0); ch(AN_3, 0); ch(AN_4, 0); ch(AN_5, 0); break;
    case 1: ch(AN_1, 0); ch(AN_2, 1); ch(AN_3, 0); ch(AN_4, 0); ch(AN_5, 0); break;
    case 2: ch(AN_1, 0); ch(AN_2, 0); ch(AN_3, 1); ch(AN_4, 0); ch(AN_5, 0); break;
    case 3: ch(AN_1, 0); ch(AN_2, 0); ch(AN_3, 0); ch(AN_4, 1); ch(AN_5, 0); break;
    case 4: ch(AN_1, 0); ch(AN_2, 0); ch(AN_3, 0); ch(AN_4, 0); ch(AN_5, 1); break;
    case 5: ch(AN_1, 0); ch(AN_2, 0); ch(AN_3, 0); ch(AN_4, 0); ch(AN_5, 0); break;
  }
}
void ch(int pin, int logic) {
  digitalWrite(pin, logic);
}

93

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

Инвертировал все катоды

//// Катоды 1 группа
#define SEG_A1       28 // 33 
#define SEG_B1       29 // 32 
#define SEG_C1       30 // 31
#define SEG_D1       31 // 30
#define SEG_E1       23 // 26
#define SEG_F1       22 // 25
#define SEG_G1       21 // 24 
//// Катоды 2 группа
#define SEG_A2       11 // 13 
#define SEG_B2       12 // 14 
#define SEG_C2       13 // 15
#define SEG_D2       14 // 16
#define SEG_E2       15 // 17
#define SEG_F2       18 // 21
#define SEG_G2       19 // 22 
//// Катоды 3 группа
#define SEG_A3        1 // 44
#define SEG_B3        2 // 43 
#define SEG_C3        3 // 42
#define SEG_D3        4 // 41
#define SEG_E3        5 // 1
#define SEG_F3        6 // 2
#define SEG_G3        7 // 3 
//// Аноды
// 34:51:23 == HH:MM:SS большые цифры > 34:51:23 === номер транзистора Q1-Q5
#define AN_1        27 // 34
#define AN_2        26 // 35
#define AN_3        25 // 36
#define AN_4        24 // 37
#define AN_5        0  // 40


long oldPosition  = -999, newPosition, times;
int an, segm1, segm2, segm3, i;
byte d1, d0, h1, h0, m1, m0, s1, s0, t1, t0, g0, g1, dn;

void setup() {
  cli();
  TCCR2 = 0;
  TCNT2 = 0;
  // (8000000/((155+1)x256))=200.32051282051 Hz
  OCR2 = 155;
  TCCR2 |= (1 << WGM21);
  // Prescaler 256
  TCCR2 |= (1 << CS22) | (1 << CS21);
  TIMSK |= (1 << OCIE2);
  sei();
  pinMode(SEG_A1, OUTPUT);
  pinMode(SEG_B1, OUTPUT);
  pinMode(SEG_C1, OUTPUT);
  pinMode(SEG_D1, OUTPUT);
  pinMode(SEG_E1, OUTPUT);
  pinMode(SEG_F1, OUTPUT);
  pinMode(SEG_G1, OUTPUT);
  pinMode(AN_1, OUTPUT);
  pinMode(AN_2, OUTPUT);
  pinMode(AN_3, OUTPUT);
  pinMode(AN_4, OUTPUT);
  pinMode(AN_5, OUTPUT);
  pinMode(SEG_A2, OUTPUT);
  pinMode(SEG_B2, OUTPUT);
  pinMode(SEG_C2, OUTPUT);
  pinMode(SEG_D2, OUTPUT);
  pinMode(SEG_E2, OUTPUT);
  pinMode(SEG_F2, OUTPUT);
  pinMode(SEG_G2, OUTPUT);

  pinMode(SEG_A3, OUTPUT);
  pinMode(SEG_B3, OUTPUT);
  pinMode(SEG_C3, OUTPUT);
  pinMode(SEG_D3, OUTPUT);
  pinMode(SEG_E3, OUTPUT);
  pinMode(SEG_F3, OUTPUT);
  pinMode(SEG_G3, OUTPUT);
}

void loop() {
  d0 = 6; // дата _1
  d1 = 2; // дата 1_
  m0 = 2; // мин  _0
  m1 = 2; // мин  1_
  g1 = 2; // год  1_
  g0 = 3; // год  _1
  m1 = 2;
  m0 = 6;
  s1 = 2;
  s0 = 5;
  t1 = 2;
  t0 = 5;
  dn = 3;
  delay(1000);
}

ISR(TIMER2_COMPA_vect){
  switch (i) {
    case 0: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(200);
      segm1 = d0; segm2 = m0; segm3 = g1; an = 0; anod(); segment_1(); segment_2(); segment_3(); break;

    case 1: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(200);
      segm1 = dn; segm2 = s1; segm3 = g0; an = 1; anod(); segment_1(); segment_2(); segment_3(); break;

    case 2: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(200);
      segm1 = h1; segm2 = s0; segm3 = m1; an = 2; anod(); segment_1(); segment_2(); segment_3(); break;

    case 3: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(200);
      segm1 = h0; segm2 = t1; segm3 = g0; an = 3; anod(); segment_1(); segment_2(); segment_3(); break;

    case 4: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(200);
      segm1 = m1; segm2 = t0; segm3 = d1; an = 4; anod(); segment_1(); segment_2(); segment_3(); break;
  }
  i++; if (i > 4) {
    i = 0;
  }
}
void segment_1() {
  switch (segm1) {
    //  A          B           C            D          E          F         G
    case 0: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 0); ch(SEG_G1, 1); break; // 0
    case 1: ch(SEG_A1, 1); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // 1
    case 2: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 1); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 1); ch(SEG_G1, 0); break; // 2
    case 3: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 0); break; // 3
    case 4: ch(SEG_A1, 1); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 4
    case 5: ch(SEG_A1, 0); ch(SEG_B1, 1); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 5
    case 6: ch(SEG_A1, 0); ch(SEG_B1, 1); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 6
    case 7: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // 7
    case 8: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 8
    case 9: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 9
    case 10: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // пусто
  }
}
void segment_2() {
  switch (segm2) {
    //  A          B           C            D          E          F         G
    case 0: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 0); ch(SEG_G2, 1); break; // 0
    case 1: ch(SEG_A2, 1); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 1); break; // 1
    case 2: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 1); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 1); ch(SEG_G2, 0); break; // 2
    case 3: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 0); break; // 3
    case 4: ch(SEG_A2, 1); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 4
    case 5: ch(SEG_A2, 0); ch(SEG_B2, 1); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 1); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 5
    case 6: ch(SEG_A2, 0); ch(SEG_B2, 1); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 6
    case 7: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 1); break; // 7
    case 8: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 8
    case 9: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 1); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 9
    case 10: ch(SEG_A2, 1); ch(SEG_B2, 1); ch(SEG_C2, 1); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 1); break; // пусто
  }
}
void segment_3() {
  switch (segm3) {
    //  A          B           C            D          E          F         G
    case 0: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 0); ch(SEG_G3, 1); break; // 0
    case 1: ch(SEG_A3, 1); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 1); break; // 1
    case 2: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 1); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 1); ch(SEG_G3, 0); break; // 2
    case 3: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 0); break; // 3
    case 4: ch(SEG_A3, 1); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 4
    case 5: ch(SEG_A3, 0); ch(SEG_B3, 1); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 1); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 5
    case 6: ch(SEG_A3, 0); ch(SEG_B3, 1); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 6
    case 7: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 1); break; // 7
    case 8: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 8
    case 9: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 1); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 9
    case 10: ch(SEG_A3, 1); ch(SEG_B3, 1); ch(SEG_C3, 1); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 1); break; // пусто
  }
}

void anod() {
  switch (an) {
    case 0: ch(AN_1, 1); ch(AN_2, 0); ch(AN_3, 0); ch(AN_4, 0); ch(AN_5, 0); break;
    case 1: ch(AN_1, 0); ch(AN_2, 1); ch(AN_3, 0); ch(AN_4, 0); ch(AN_5, 0); break;
    case 2: ch(AN_1, 0); ch(AN_2, 0); ch(AN_3, 1); ch(AN_4, 0); ch(AN_5, 0); break;
    case 3: ch(AN_1, 0); ch(AN_2, 0); ch(AN_3, 0); ch(AN_4, 1); ch(AN_5, 0); break;
    case 4: ch(AN_1, 0); ch(AN_2, 0); ch(AN_3, 0); ch(AN_4, 0); ch(AN_5, 1); break;
    case 5: ch(AN_1, 0); ch(AN_2, 0); ch(AN_3, 0); ch(AN_4, 0); ch(AN_5, 0); break;
  }
}
void ch(int pin, int logic) {
  digitalWrite(pin, logic);
}

94

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

На всех индикаторах я установил цифру 1

//// Катоды 1 группа
#define SEG_A1       28 // 33 
#define SEG_B1       29 // 32 
#define SEG_C1       30 // 31
#define SEG_D1       31 // 30
#define SEG_E1       23 // 26
#define SEG_F1       22 // 25
#define SEG_G1       21 // 24 
//// Катоды 2 группа
#define SEG_A2       11 // 13 
#define SEG_B2       12 // 14 
#define SEG_C2       13 // 15
#define SEG_D2       14 // 16
#define SEG_E2       15 // 17
#define SEG_F2       18 // 21
#define SEG_G2       19 // 22 
//// Катоды 3 группа
#define SEG_A3        1 // 44
#define SEG_B3        2 // 43 
#define SEG_C3        3 // 42
#define SEG_D3        4 // 41
#define SEG_E3        5 // 1
#define SEG_F3        6 // 2
#define SEG_G3        7 // 3 
//// Аноды
// 34:51:23 == HH:MM:SS большые цифры > 34:51:23 === номер транзистора Q1-Q5
#define AN_1        27 // 34
#define AN_2        26 // 35
#define AN_3        25 // 36
#define AN_4        24 // 37
#define AN_5        0  // 40


long oldPosition  = -999, newPosition, times;
int an, segm1, segm2, segm3, i;
byte d1, d0, h1, h0, m1, m0, s1, s0, t1, t0, g0, g1, dn;

void setup() {
  cli();
  TCCR2 = 0;
  TCNT2 = 0;
  // (8000000/((155+1)x256))=200.32051282051 Hz
  OCR2 = 155;
  TCCR2 |= (1 << WGM21);
  // Prescaler 256
  TCCR2 |= (1 << CS22) | (1 << CS21);
  TIMSK |= (1 << OCIE2);
  sei();
  pinMode(SEG_A1, OUTPUT);
  pinMode(SEG_B1, OUTPUT);
  pinMode(SEG_C1, OUTPUT);
  pinMode(SEG_D1, OUTPUT);
  pinMode(SEG_E1, OUTPUT);
  pinMode(SEG_F1, OUTPUT);
  pinMode(SEG_G1, OUTPUT);
  pinMode(AN_1, OUTPUT);
  pinMode(AN_2, OUTPUT);
  pinMode(AN_3, OUTPUT);
  pinMode(AN_4, OUTPUT);
  pinMode(AN_5, OUTPUT);
  pinMode(SEG_A2, OUTPUT);
  pinMode(SEG_B2, OUTPUT);
  pinMode(SEG_C2, OUTPUT);
  pinMode(SEG_D2, OUTPUT);
  pinMode(SEG_E2, OUTPUT);
  pinMode(SEG_F2, OUTPUT);
  pinMode(SEG_G2, OUTPUT);

  pinMode(SEG_A3, OUTPUT);
  pinMode(SEG_B3, OUTPUT);
  pinMode(SEG_C3, OUTPUT);
  pinMode(SEG_D3, OUTPUT);
  pinMode(SEG_E3, OUTPUT);
  pinMode(SEG_F3, OUTPUT);
  pinMode(SEG_G3, OUTPUT);
}

void loop() {
  d0 = 1; // дата _1
  d1 = 1; // дата 1_
  m0 = 1; // мин  _0
  m1 = 1; // мин  1_
  g1 = 1; // год  1_
  g0 = 1; // год  _1
  m1 = 1;
  m0 = 1;
  s1 = 1;
  s0 = 1;
  t1 = 1;
  t0 = 1;
  dn = 1;
  delay(1000);
}

ISR(TIMER2_COMPA_vect){
  switch (i) {
    case 0: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(200);
      segm1 = d0; segm2 = m0; segm3 = g1; an = 0; anod(); segment_1(); segment_2(); segment_3(); break;

    case 1: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(200);
      segm1 = dn; segm2 = s1; segm3 = g0; an = 1; anod(); segment_1(); segment_2(); segment_3(); break;

    case 2: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(200);
      segm1 = h1; segm2 = s0; segm3 = m1; an = 2; anod(); segment_1(); segment_2(); segment_3(); break;

    case 3: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(200);
      segm1 = h0; segm2 = t1; segm3 = g0; an = 3; anod(); segment_1(); segment_2(); segment_3(); break;

    case 4: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(200);
      segm1 = m1; segm2 = t0; segm3 = d1; an = 4; anod(); segment_1(); segment_2(); segment_3(); break;
  }
  i++; if (i > 4) {
    i = 0;
  }
}
void segment_1() {
  switch (segm1) {
    //  A          B           C            D          E          F         G
    case 0: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 0); ch(SEG_G1, 1); break; // 0
    case 1: ch(SEG_A1, 1); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // 1
    case 2: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 1); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 1); ch(SEG_G1, 0); break; // 2
    case 3: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 0); break; // 3
    case 4: ch(SEG_A1, 1); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 4
    case 5: ch(SEG_A1, 0); ch(SEG_B1, 1); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 5
    case 6: ch(SEG_A1, 0); ch(SEG_B1, 1); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 6
    case 7: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // 7
    case 8: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 8
    case 9: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 9
    case 10: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // пусто
  }
}
void segment_2() {
  switch (segm2) {
    //  A          B           C            D          E          F         G
    case 0: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 0); ch(SEG_G2, 1); break; // 0
    case 1: ch(SEG_A2, 1); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 1); break; // 1
    case 2: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 1); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 1); ch(SEG_G2, 0); break; // 2
    case 3: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 0); break; // 3
    case 4: ch(SEG_A2, 1); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 4
    case 5: ch(SEG_A2, 0); ch(SEG_B2, 1); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 1); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 5
    case 6: ch(SEG_A2, 0); ch(SEG_B2, 1); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 6
    case 7: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 1); break; // 7
    case 8: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 8
    case 9: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 1); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 9
    case 10: ch(SEG_A2, 1); ch(SEG_B2, 1); ch(SEG_C2, 1); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 1); break; // пусто
  }
}
void segment_3() {
  switch (segm3) {
    //  A          B           C            D          E          F         G
    case 0: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 0); ch(SEG_G3, 1); break; // 0
    case 1: ch(SEG_A3, 1); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 1); break; // 1
    case 2: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 1); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 1); ch(SEG_G3, 0); break; // 2
    case 3: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 0); break; // 3
    case 4: ch(SEG_A3, 1); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 4
    case 5: ch(SEG_A3, 0); ch(SEG_B3, 1); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 1); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 5
    case 6: ch(SEG_A3, 0); ch(SEG_B3, 1); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 6
    case 7: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 1); break; // 7
    case 8: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 8
    case 9: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 1); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 9
    case 10: ch(SEG_A3, 1); ch(SEG_B3, 1); ch(SEG_C3, 1); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 1); break; // пусто
  }
}

void anod() {
  switch (an) {
    case 0: ch(AN_1, 1); ch(AN_2, 0); ch(AN_3, 0); ch(AN_4, 0); ch(AN_5, 0); break;
    case 1: ch(AN_1, 0); ch(AN_2, 1); ch(AN_3, 0); ch(AN_4, 0); ch(AN_5, 0); break;
    case 2: ch(AN_1, 0); ch(AN_2, 0); ch(AN_3, 1); ch(AN_4, 0); ch(AN_5, 0); break;
    case 3: ch(AN_1, 0); ch(AN_2, 0); ch(AN_3, 0); ch(AN_4, 1); ch(AN_5, 0); break;
    case 4: ch(AN_1, 0); ch(AN_2, 0); ch(AN_3, 0); ch(AN_4, 0); ch(AN_5, 1); break;
    case 5: ch(AN_1, 0); ch(AN_2, 0); ch(AN_3, 0); ch(AN_4, 0); ch(AN_5, 0); break;
  }
}
void ch(int pin, int logic) {
  digitalWrite(pin, logic);
}

95

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

С микроконтроллера (катоды) импульсы подаете через токоограничивающие резисторы?

96

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

Как выглядет индикация на последнем скетче?

97

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

liman324 пишет:

Как выглядет индикация на последнем скетче?

Горят все сегменты

98

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

Погасил катодами все цифры

//// Катоды 1 группа
#define SEG_A1       28 // 33 
#define SEG_B1       29 // 32 
#define SEG_C1       30 // 31
#define SEG_D1       31 // 30
#define SEG_E1       23 // 26
#define SEG_F1       22 // 25
#define SEG_G1       21 // 24 
//// Катоды 2 группа
#define SEG_A2       11 // 13 
#define SEG_B2       12 // 14 
#define SEG_C2       13 // 15
#define SEG_D2       14 // 16
#define SEG_E2       15 // 17
#define SEG_F2       18 // 21
#define SEG_G2       19 // 22 
//// Катоды 3 группа
#define SEG_A3        1 // 44
#define SEG_B3        2 // 43 
#define SEG_C3        3 // 42
#define SEG_D3        4 // 41
#define SEG_E3        5 // 1
#define SEG_F3        6 // 2
#define SEG_G3        7 // 3 
//// Аноды
// 34:51:23 == HH:MM:SS большые цифры > 34:51:23 === номер транзистора Q1-Q5
#define AN_1        27 // 34
#define AN_2        26 // 35
#define AN_3        25 // 36
#define AN_4        24 // 37
#define AN_5        0  // 40


long oldPosition  = -999, newPosition, times;
int an, segm1, segm2, segm3, i;
byte d1, d0, h1, h0, m1, m0, s1, s0, t1, t0, ms1, ms0, g0, g1, dn;

void setup() {
  cli();
  TCCR2 = 0;
  TCNT2 = 0;
  // (8000000/((155+1)x256))=200.32051282051 Hz
  OCR2 = 155;
  TCCR2 |= (1 << WGM21);
  // Prescaler 256
  TCCR2 |= (1 << CS22) | (1 << CS21);
  TIMSK |= (1 << OCIE2);
  sei();
  pinMode(SEG_A1, OUTPUT);
  pinMode(SEG_B1, OUTPUT);
  pinMode(SEG_C1, OUTPUT);
  pinMode(SEG_D1, OUTPUT);
  pinMode(SEG_E1, OUTPUT);
  pinMode(SEG_F1, OUTPUT);
  pinMode(SEG_G1, OUTPUT);
  pinMode(AN_1, OUTPUT);
  pinMode(AN_2, OUTPUT);
  pinMode(AN_3, OUTPUT);
  pinMode(AN_4, OUTPUT);
  pinMode(AN_5, OUTPUT);
  pinMode(SEG_A2, OUTPUT);
  pinMode(SEG_B2, OUTPUT);
  pinMode(SEG_C2, OUTPUT);
  pinMode(SEG_D2, OUTPUT);
  pinMode(SEG_E2, OUTPUT);
  pinMode(SEG_F2, OUTPUT);
  pinMode(SEG_G2, OUTPUT);

  pinMode(SEG_A3, OUTPUT);
  pinMode(SEG_B3, OUTPUT);
  pinMode(SEG_C3, OUTPUT);
  pinMode(SEG_D3, OUTPUT);
  pinMode(SEG_E3, OUTPUT);
  pinMode(SEG_F3, OUTPUT);
  pinMode(SEG_G3, OUTPUT);
}

void loop() {
  d0 = 10; // дата _1
  d1 = 10; // дата 1_
  m0 = 10; // мин  _0
  m1 = 10; // мин  1_
  h1 = 10; //
  h0 = 10;
  g1 = 10; // год  1_
  g0 = 10; // год  _1
  ms1 = 10;
  ms0 = 10;
  s1 = 10;
  s0 = 10;
  t1 = 10;
  t0 = 10;
  dn = 10;
  delay(1000);
}

ISR(TIMER2_COMPA_vect){
  switch (i) {
    // Q1
    case 0: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(200);
      segm2 = m0; segm1 = d0; segm3 = g1; an = 0; anod(); segment_1(); segment_2(); segment_3(); break;
    // Q2
    case 1: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(200);
      segm2 = s1; segm1 = dn; segm3 = g0; an = 1; anod(); segment_1(); segment_2(); segment_3(); break;
    // Q3
    case 2: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(200);
      segm1 = h1; segm2 = s0; segm3 = ms1; an = 2; anod(); segment_1(); segment_2(); segment_3(); break;
    // Q4
    case 3: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(200);
      segm1 = h0; segm2 = t1; segm3 = ms0; an = 3; anod(); segment_1(); segment_2(); segment_3(); break;
    // Q5
    case 4: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(200);
      segm1 = m1; segm2 = t0; segm3 = d1; an = 4; anod(); segment_1(); segment_2(); segment_3(); break;
  }
  i++; if (i > 4) {
    i = 0;
  }
}
void segment_1() {
  switch (segm1) {
    //  A          B           C            D          E          F         G
    case 0: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 0); ch(SEG_G1, 1); break; // 0
    case 1: ch(SEG_A1, 1); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // 1
    case 2: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 1); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 1); ch(SEG_G1, 0); break; // 2
    case 3: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 0); break; // 3
    case 4: ch(SEG_A1, 1); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 4
    case 5: ch(SEG_A1, 0); ch(SEG_B1, 1); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 5
    case 6: ch(SEG_A1, 0); ch(SEG_B1, 1); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 6
    case 7: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // 7
    case 8: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 8
    case 9: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 9
    case 10: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // пусто
  }
}
void segment_2() {
  switch (segm2) {
    //  A          B           C            D          E          F         G
    case 0: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 0); ch(SEG_G2, 1); break; // 0
    case 1: ch(SEG_A2, 1); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 1); break; // 1
    case 2: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 1); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 1); ch(SEG_G2, 0); break; // 2
    case 3: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 0); break; // 3
    case 4: ch(SEG_A2, 1); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 4
    case 5: ch(SEG_A2, 0); ch(SEG_B2, 1); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 1); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 5
    case 6: ch(SEG_A2, 0); ch(SEG_B2, 1); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 6
    case 7: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 1); break; // 7
    case 8: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 8
    case 9: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 1); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 9
    case 10: ch(SEG_A2, 1); ch(SEG_B2, 1); ch(SEG_C2, 1); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 1); break; // пусто
  }
}
void segment_3() {
  switch (segm3) {
    //  A          B           C            D          E          F         G
    case 0: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 0); ch(SEG_G3, 1); break; // 0
    case 1: ch(SEG_A3, 1); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 1); break; // 1
    case 2: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 1); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 1); ch(SEG_G3, 0); break; // 2
    case 3: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 0); break; // 3
    case 4: ch(SEG_A3, 1); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 4
    case 5: ch(SEG_A3, 0); ch(SEG_B3, 1); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 1); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 5
    case 6: ch(SEG_A3, 0); ch(SEG_B3, 1); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 6
    case 7: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 1); break; // 7
    case 8: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 8
    case 9: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 1); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 9
    case 10: ch(SEG_A3, 1); ch(SEG_B3, 1); ch(SEG_C3, 1); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 1); break; // пусто
  }
}

void anod() {
  switch (an) {
    case 0: ch(AN_1, 1); ch(AN_2, 0); ch(AN_3, 0); ch(AN_4, 0); ch(AN_5, 0); break;
    case 1: ch(AN_1, 0); ch(AN_2, 1); ch(AN_3, 0); ch(AN_4, 0); ch(AN_5, 0); break;
    case 2: ch(AN_1, 0); ch(AN_2, 0); ch(AN_3, 1); ch(AN_4, 0); ch(AN_5, 0); break;
    case 3: ch(AN_1, 0); ch(AN_2, 0); ch(AN_3, 0); ch(AN_4, 1); ch(AN_5, 0); break;
    case 4: ch(AN_1, 0); ch(AN_2, 0); ch(AN_3, 0); ch(AN_4, 0); ch(AN_5, 1); break;
    case 5: ch(AN_1, 0); ch(AN_2, 0); ch(AN_3, 0); ch(AN_4, 0); ch(AN_5, 0); break;
  }
}
void ch(int pin, int logic) {
  digitalWrite(pin, logic);
}

99

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

Понизил частоту до 30 Гц, должно быть мерцание

минуты 33

//// Катоды 1 группа
#define SEG_A1       28 // 33 
#define SEG_B1       29 // 32 
#define SEG_C1       30 // 31
#define SEG_D1       31 // 30
#define SEG_E1       23 // 26
#define SEG_F1       22 // 25
#define SEG_G1       21 // 24 
//// Катоды 2 группа
#define SEG_A2       11 // 13 
#define SEG_B2       12 // 14 
#define SEG_C2       13 // 15
#define SEG_D2       14 // 16
#define SEG_E2       15 // 17
#define SEG_F2       18 // 21
#define SEG_G2       19 // 22 
//// Катоды 3 группа
#define SEG_A3        1 // 44
#define SEG_B3        2 // 43 
#define SEG_C3        3 // 42
#define SEG_D3        4 // 41
#define SEG_E3        5 // 1
#define SEG_F3        6 // 2
#define SEG_G3        7 // 3 
//// Аноды
// 34:51:23 == HH:MM:SS большые цифры > 34:51:23 === номер транзистора Q1-Q5
#define AN_1        27 // 34
#define AN_2        26 // 35
#define AN_3        25 // 36
#define AN_4        24 // 37
#define AN_5        0  // 40


long oldPosition  = -999, newPosition, times;
int an, segm1, segm2, segm3, i;
byte d1, d0, h1, h0, m1, m0, s1, s0, t1, t0, ms1, ms0, g0, g1, dn;

void setup() {
  cli();
  TCCR2 = 0;
  TCNT2 = 0;
  // (8000000/((155+1)x256))=200.32051282051 Hz
  OCR2 = 255;
  TCCR2 |= (1 << WGM21);
  // Prescaler 256
  TCCR2 |= (1 << CS22) | (1 << CS21) | (1 << CS20);
  TIMSK |= (1 << OCIE2);
  sei();
  pinMode(SEG_A1, OUTPUT);
  pinMode(SEG_B1, OUTPUT);
  pinMode(SEG_C1, OUTPUT);
  pinMode(SEG_D1, OUTPUT);
  pinMode(SEG_E1, OUTPUT);
  pinMode(SEG_F1, OUTPUT);
  pinMode(SEG_G1, OUTPUT);
  pinMode(AN_1, OUTPUT);
  pinMode(AN_2, OUTPUT);
  pinMode(AN_3, OUTPUT);
  pinMode(AN_4, OUTPUT);
  pinMode(AN_5, OUTPUT);
  pinMode(SEG_A2, OUTPUT);
  pinMode(SEG_B2, OUTPUT);
  pinMode(SEG_C2, OUTPUT);
  pinMode(SEG_D2, OUTPUT);
  pinMode(SEG_E2, OUTPUT);
  pinMode(SEG_F2, OUTPUT);
  pinMode(SEG_G2, OUTPUT);

  pinMode(SEG_A3, OUTPUT);
  pinMode(SEG_B3, OUTPUT);
  pinMode(SEG_C3, OUTPUT);
  pinMode(SEG_D3, OUTPUT);
  pinMode(SEG_E3, OUTPUT);
  pinMode(SEG_F3, OUTPUT);
  pinMode(SEG_G3, OUTPUT);
}

void loop() {
  h1 = 10; 
  h0 = 10;
  m0 = 3; 
  m1 = 3; 
  s1 = 10;
  s0 = 10;
  
  d0 = 10; 
  d1 = 10; 
  ms1 = 10;
  ms0 = 10;
  
  g1 = 10; 
  g0 = 10; 

  dn = 10;
  
  t1 = 10;
  t0 = 10;
  delay(1000);
}

ISR(TIMER2_COMPA_vect){
  switch (i) {
    // Q1
    case 0: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(200);
      segm2 = m0; segm1 = d0; segm3 = g1; an = 0; anod(); segment_1(); segment_2(); segment_3(); break;
    // Q2
    case 1: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(200);
      segm2 = s1; segm1 = dn; segm3 = g0; an = 1; anod(); segment_1(); segment_2(); segment_3(); break;
    // Q3
    case 2: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(200);
      segm1 = h1; segm2 = s0; segm3 = ms1; an = 2; anod(); segment_1(); segment_2(); segment_3(); break;
    // Q4
    case 3: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(200);
      segm1 = h0; segm2 = t1; segm3 = ms0; an = 3; anod(); segment_1(); segment_2(); segment_3(); break;
    // Q5
    case 4: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(200);
      segm1 = m1; segm2 = t0; segm3 = d1; an = 4; anod(); segment_1(); segment_2(); segment_3(); break;
  }
  i++; if (i > 4) {
    i = 0;
  }
}
void segment_1() {
  switch (segm1) {
    //  A          B           C            D          E          F         G
    case 0: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 0); ch(SEG_G1, 1); break; // 0
    case 1: ch(SEG_A1, 1); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // 1
    case 2: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 1); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 1); ch(SEG_G1, 0); break; // 2
    case 3: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 0); break; // 3
    case 4: ch(SEG_A1, 1); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 4
    case 5: ch(SEG_A1, 0); ch(SEG_B1, 1); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 5
    case 6: ch(SEG_A1, 0); ch(SEG_B1, 1); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 6
    case 7: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // 7
    case 8: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 8
    case 9: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 9
    case 10: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // пусто
  }
}
void segment_2() {
  switch (segm2) {
    //  A          B           C            D          E          F         G
    case 0: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 0); ch(SEG_G2, 1); break; // 0
    case 1: ch(SEG_A2, 1); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 1); break; // 1
    case 2: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 1); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 1); ch(SEG_G2, 0); break; // 2
    case 3: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 0); break; // 3
    case 4: ch(SEG_A2, 1); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 4
    case 5: ch(SEG_A2, 0); ch(SEG_B2, 1); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 1); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 5
    case 6: ch(SEG_A2, 0); ch(SEG_B2, 1); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 6
    case 7: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 1); break; // 7
    case 8: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 8
    case 9: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 1); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 9
    case 10: ch(SEG_A2, 1); ch(SEG_B2, 1); ch(SEG_C2, 1); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 1); break; // пусто
  }
}
void segment_3() {
  switch (segm3) {
    //  A          B           C            D          E          F         G
    case 0: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 0); ch(SEG_G3, 1); break; // 0
    case 1: ch(SEG_A3, 1); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 1); break; // 1
    case 2: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 1); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 1); ch(SEG_G3, 0); break; // 2
    case 3: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 0); break; // 3
    case 4: ch(SEG_A3, 1); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 4
    case 5: ch(SEG_A3, 0); ch(SEG_B3, 1); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 1); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 5
    case 6: ch(SEG_A3, 0); ch(SEG_B3, 1); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 6
    case 7: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 1); break; // 7
    case 8: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 8
    case 9: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 1); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 9
    case 10: ch(SEG_A3, 1); ch(SEG_B3, 1); ch(SEG_C3, 1); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 1); break; // пусто
  }
}

void anod() {
  switch (an) {
    case 0: ch(AN_1, 1); ch(AN_2, 0); ch(AN_3, 0); ch(AN_4, 0); ch(AN_5, 0); break;
    case 1: ch(AN_1, 0); ch(AN_2, 1); ch(AN_3, 0); ch(AN_4, 0); ch(AN_5, 0); break;
    case 2: ch(AN_1, 0); ch(AN_2, 0); ch(AN_3, 1); ch(AN_4, 0); ch(AN_5, 0); break;
    case 3: ch(AN_1, 0); ch(AN_2, 0); ch(AN_3, 0); ch(AN_4, 1); ch(AN_5, 0); break;
    case 4: ch(AN_1, 0); ch(AN_2, 0); ch(AN_3, 0); ch(AN_4, 0); ch(AN_5, 1); break;
    case 5: ch(AN_1, 0); ch(AN_2, 0); ch(AN_3, 0); ch(AN_4, 0); ch(AN_5, 0); break;
  }
}
void ch(int pin, int logic) {
  digitalWrite(pin, logic);
}

100

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

Транзисторынй ключ в схеме ведь не инвертирует импульс?

На ножку контроллера 4 RST подали 5в через резистор 10 кОм?