Ciao a tutti,
ho vecchie reminiscenze di programmazione e di elettronica ma mi considero abbastanza scarso lo stesso, per cui vi ringrazio sin d'ora e spero di non tediarvi troppo.
Allora, la settimana scorsa in fiera ho comprato un Arduino Uno e due display a 7 segmenti, uno ad 1 digit a catodo comune e l'altro doppio, cioè a 2-digit con anodo comune in una unica schedina contenente anche due shift register 74hc595 connessi con il pin 9 di uno al pin 14 dell'altro.
Con il display ad 1 digit non ho avuto problemi a visualizzare le cifre da 0 a 9, invece sta andando male con quello doppio perchè non riesco proprio a visualizzare numeri a 2 cifre come il 36, che porto come esempio.
Qui come collego il doppio display ad Arduino
Per visualizzare una cifra su ciascun digit, visto che i due display hanno i segmenti in comune e i due 595 hanno i pin corrispondenti connessi tra loro, la logica che applico nello sketch è questa
1)spengo entrambi i digit, il digit1 (quello a sinistra) e anche digit2 (quello a destra)
2)preparo lo shift register inserendo il 3
3)accendo digit1 e spengo digit2 + delay(5) ( dovrei vedere il 3 a sinistra )
4)spengo digit1 e digit2
5)preparo lo shift register inserendo il 6
6)spengo digit1 e accendo digit2 + delay(5) ( dovrei vedere il 6 a destra )
7) ricomincio da 1
Se qualcuno vuole dare un'occhiata allo sketch, provo ad inserire anche quello
int clockPin = 7; //pin 11 del 595, filo marrone (SCLK)
int latchPin = 8; //pin 12 del 595 , filo blu (RCLK)
int dataPin = 10 ; //pin 14 del 595 , filo yellow (DATA)
int digit1 = 11; // anodo del digit di sinistra al pin digitale 11 di Arduino
int digit2 = 12; // anodo del digit di destra al pin digitale 12 di Arduino
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 a 2 cifre
}
void visual()
///////////////////////////////////////////////////// ESEMPIO per VISUALIZZARE il numero 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 cosa si visualizza
///////////////////////////////////////////
// per visualizzare 6
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 cosa si visualizza
}
Quello che succede dopo l'avvio è che vedo inizialmente blinkare 33 ( quindi i due digit funzionano), e subito dopo rimane il blink del 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, come nel caso precedente della cifra 3.
Non ho altri display doppi con cui provare e, tra l'altro, i due anodi connessi ai pin 11 e 12 di Arduino è come se non ci fossero, infatti se li stacco il comportamento dopo l'avvio rimane immutato.
Grazie per avere letto fin qui e per l'aiuto