Problema visualizzazione doppio display 7 segmenti
Buongiorno,
mi dareste una mano a risolvere questo problema di visualizzazione ?
In pratica, mi sono trovato un vecchio display doppio a 7 segmenti ad anodo comune con due shift register 74HC595.
https://aliexpressz.hu/5028035-thickbox_default/74hc595-2bit-2-szamjegyu-led-nixie-csoves-kijelzo-modul-33v-5v-digitalis-cso.jpg
e volevo iniziare a capire come pilotarlo ma ho qualche problema nella visualizzazione delle due cifre. Infatti, se per esempio provo a visualizzare il numero decimale 36, dopo l'avvio dello sketch vedo inizialmente blinkare velocemente il 3 su entrambi i digit, praticamente vedo 33, e subito dopo blinka solo il 3 sul digit2 di destra mentre il digit1 di sinistra rimane spento e del 6 nessuna traccia. Se faccio girare solo la parte di codice che riguarda la cifra 6, allora succede che inizialmente vedo il numero 66 e poi sul digit di destra si fissa il 6 mentre il digit di sinistra rimane sempre spento. Sicuramente sbaglierò la logica dello sketch e dei tempi, quella che adotto è quella di switchare da un digit all'altro tramite la digitalWrite di Arduino mantenendo una frequenza tale da poter vedere quasi fisse le due cifre, cioè cosi
1)spengo digit1 e digit2
2)preparo lo shift register
3)accendo digit1 e spengo digit2 + delay(5) ( cosi non dovrei vedere il 3 a sinistra ? )
4)spengo digit1 e digit2
5)preparo lo shift register
6)spengo digit1 e accendo digit2 + delay(5) ( e cosi non dovrei vedere il 6 a destra ? )
7) ricomincio da 1
Qui sotto, il codice di esempio, per visualizzare il numero decimale 36
Per quanto riguarda l'hardware, per selezionare i due digit ho anche usato due transistor bc327 ma non cambiava niente e li ho tolti, qui la foto dei collegamenti
https://i.postimg.cc/13VdvVyN/a20xly.jpg
Grazie
mi dareste una mano a risolvere questo problema di visualizzazione ?
In pratica, mi sono trovato un vecchio display doppio a 7 segmenti ad anodo comune con due shift register 74HC595.
e volevo iniziare a capire come pilotarlo ma ho qualche problema nella visualizzazione delle due cifre. Infatti, se per esempio provo a visualizzare il numero decimale 36, dopo l'avvio dello sketch vedo inizialmente blinkare velocemente il 3 su entrambi i digit, praticamente vedo 33, e subito dopo blinka solo il 3 sul digit2 di destra mentre il digit1 di sinistra rimane spento e del 6 nessuna traccia. Se faccio girare solo la parte di codice che riguarda la cifra 6, allora succede che inizialmente vedo il numero 66 e poi sul digit di destra si fissa il 6 mentre il digit di sinistra rimane sempre spento. Sicuramente sbaglierò la logica dello sketch e dei tempi, quella che adotto è quella di switchare da un digit all'altro tramite la digitalWrite di Arduino mantenendo una frequenza tale da poter vedere quasi fisse le due cifre, cioè cosi
1)spengo digit1 e digit2
2)preparo lo shift register
3)accendo digit1 e spengo digit2 + delay(5) ( cosi non dovrei vedere il 3 a sinistra ? )
4)spengo digit1 e digit2
5)preparo lo shift register
6)spengo digit1 e accendo digit2 + delay(5) ( e cosi non dovrei vedere il 6 a destra ? )
7) ricomincio da 1
Qui sotto, il codice di esempio, per visualizzare il numero decimale 36
- Codice: Seleziona tutto
int clockPin = 7; //pin 11 on the 595, filo marrone (SCLK)
int latchPin = 8; //pin 12 on the 595 , filo blu (RCLK)
int dataPin = 10 ; //pin 14 on the 595 , filo yellow (DATA
int digit1 = 11;
int digit2 = 12;
void setup()
{
pinMode(latchPin, OUTPUT);
pinMode(dataPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(digit1, OUTPUT);
pinMode(digit2, OUTPUT);
}
void loop()
{
visual(); // procedura che visualizza un numero
}
void visual()
///////////////////////////////////////////////////// VISUALIZZARE 36
{ // per visualizzare 3
digitalWrite(digit1, 0);digitalWrite(digit2, 0); //spengo entrambi i digit
digitalWrite(latchPin, HIGH); //metto 3 nello shift register
shiftOut(dataPin, clockPin, MSBFIRST, 48);
digitalWrite(latchPin, LOW);
digitalWrite(digit1, 1); // accendo digit1 che dovrebbe visualizzare il 3
digitalWrite(digit2, 0); // spengo digit2
delay(500); // ritardo lungo per vedere lentamente cosa visualizza
// per visualizzare 3
digitalWrite(digit1, 0);digitalWrite(digit2, 0); //spengo entrambi i digit
digitalWrite(latchPin, HIGH); //metto 6 nello shift register
shiftOut(dataPin, clockPin, MSBFIRST, 2);
digitalWrite(latchPin, LOW);
digitalWrite(digit1, 0); // spengo digit1
digitalWrite(digit2, 1); // accendo digit1 che dovrebbe visualizzare il 6
delay(500); // ritardo lungo per vedere lentamente cosa visualizza
}
Per quanto riguarda l'hardware, per selezionare i due digit ho anche usato due transistor bc327 ma non cambiava niente e li ho tolti, qui la foto dei collegamenti
Grazie

