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


Elettrotecnica e non solo (admin)
Un gatto tra gli elettroni (IsidoroKZ)
Esperienza e simulazioni (g.schgor)
Moleskine di un idraulico (RenzoDF)
Il Blog di ElectroYou (webmaster)
Idee microcontrollate (TardoFreak)
PICcoli grandi PICMicro (Paolino)
Il blog elettrico di carloc (carloc)
DirtEYblooog (dirtydeeds)
Di tutto... un po' (jordan20)
AK47 (lillo)
Esperienze elettroniche (marco438)
Telecomunicazioni musicali (clavicordo)
Automazione ed Elettronica (gustavo)
Direttive per la sicurezza (ErnestoCappelletti)
EYnfo dall'Alaska (mir)
Apriamo il quadro! (attilio)
H7-25 (asdf)
Passione Elettrica (massimob)
Elettroni a spasso (guidob)
Bloguerra (guerra)






