Buonasera a tutti.
Sto cercando di costruirmi un orologio digitale ed il primo passo è di far scorrere le 4 cifre dell'ora/minuti.
Per complicarmi la vita voglio utilizzare solo 3 PIN per le 4 cifre utilizzando 4 integrati 74HC595N collegati a cascata e …. primo inghippo!
Nessun problema a visualizzare i numeri, ma se cerco di modificarli in automatico le cifre scorrono troppo velocemente e se aggiungo un "delay" vedo solo l'unità. Inoltre la cifra dell'unità risulta sempre più luminosa (v. foto).
Qualcuno può indicarmi dove sbaglio? Allego anche schema del circuito.
/*
* PROVA 4 numeri 3 PIN
*/
#define DATA_PIN 4
#define LATCH_PIN 3
#define CLOCK_PIN 2
unsigned long a;
unsigned long b;
unsigned long c;
unsigned long d;
int x = 2345;
int e;
int f;
int g;
int h;
unsigned long values[] = {
//gfedcba
0x7E, // 0
0xC, // 1
0xB6, // 2
0x9F, // 3
0xCD, // 4
0xDA, // 5
0xFA, // 6
0xE, // 7
0xFE, // 8
0xDE, // 9
};
void setup() {
pinMode(DATA_PIN, OUTPUT);
pinMode(LATCH_PIN, OUTPUT);
pinMode(CLOCK_PIN, OUTPUT);
Serial.begin(9600);
}
void loop() {
ora();
Serial.println(x);
Serial.println(g);
animation1(1000);
}
void writeRegister(unsigned long value) {
digitalWrite(LATCH_PIN, LOW);
shiftOut(DATA_PIN, CLOCK_PIN, MSBFIRST, value >> 24);
shiftOut(DATA_PIN, CLOCK_PIN, MSBFIRST, value >> 16);
shiftOut(DATA_PIN, CLOCK_PIN, MSBFIRST, value >> 8);
shiftOut(DATA_PIN, CLOCK_PIN, MSBFIRST, value);
digitalWrite(LATCH_PIN, HIGH);
}
void animation1(unsigned long animationDelay) {
a = values[h];
b = values[g];
d = values[f];
c = values[e];
writeRegister(d << 24);
writeRegister(c << 16);
writeRegister(b << 8);
writeRegister(a << 0);
}
void ora() {
e = (x / 1000);
f = (x - (e * 1000)) / 100;
g = (x - (e * 1000) - (f * 100)) / 10;
h = (x - (e * 1000) - (f * 100) - (g * 10));
// delay (1000);
// x = x + 1;
}
Grazie e auguri di una serena Pasqua.
Enrico
4Integrati_schem.pdf (1.03 MB)
