74hc595, 7segments-display

Ciao a tutti, volevo chiedervi se era possibile pilotare 4 (o più) display 7 segmenti con 2 shift register 74hc595 e dei transistor. Cercando in rete ho visto che in qualche modo sfruttando solamente 3 uscite di Arduino era possibile ma non sono riuscito a capire il principio di funzionamento.. qualche idea?? Grazie.

Ti conviene usare dei driver appositi, consumano 3 pin come il 74595 ma non richiedono l'uso di resistenze esterne e posso gestire più corrente dei 595.
Dipende da che tipo di display hai, se a catodo od anodo comune. Io preferirei i primi, con i quali potresti usare i MAX7219.
Qui c'è un bel tutorial:
http://www.arduino.cc/playground/Main/MAX72XXHardware

ah si ero già a conoscenza del MAX7219 e volevo pure provarlo è che mi piacerebbe intanto riuscire per la strada difficile visto anche che quei 2 integrati li ho già a casa...

Se usi gli shift register prendi display a catodo comune, non è un problema a gestire 4 display (io sono arrivato a 9 su un progetto).
Per il collegamento guarda il tutorial sul playground http://www.arduino.cc/en/Tutorial/ShiftOut, è la stessa cosa che devi fare tu infatti nei display che devi usare tu ci sono 8 led.
Il codice se usi gli shift register non è impegnativo, basta che colleghi allo stesso modo i pin dei display alle uscite degli shift register, con lo stesso ordine; successivamente ti fai un array con 10 elementi, 20 se devi fare anche i numeri decimali ed il gioco è fatto.
Il MAX7219 o il 7221 sono un'altra bella alternativa ma costano di più degli shift register e non so se li trovi facilmente
Saluti

+1 per il tutorial:
stavo per suggerirtelo anch'io.

Puoi fare anche una ricerca sul forum e su internet con "arduino 7-segment 74hc595", escono diverse cose. ad es.:
http://forum.sparkfun.com/viewtopic.php?f=14&t=21510
http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1247631566

Nel mio progetto ho usato uno shift register per ogni display e rileggendo il tuo post ho notato che ne hai solo due, calma e sangue freddo: si può fare lo stesso con una specie di multiplexing. In pratica colleghi gli anodi di tutti i display al primo shift register in ordine (ad esempio tutti i segmenti A sull'uscita 0 dello shift register, B su 1, C su 2 ecc) mentre i catodi li colleghi sul secondo shift register per mezzo di un transistor in modo che porti la massa al catodo del display che devi accendere (uscita 1 s.r. -> transistor -> catodo display 1, uscita 2 -> transistor -> catodo display 2, ecc).
Quindi invii al primo shift register il numero che deve comparire sul primo display e al secondo shift register gli invii il byte che satura il transistor che porta la massa al catodo del primo display e così via per gli altri... ricorda però che così devi inviare sempre i dati di continuo altrimenti "sfarfalla".
Perdonate il linguaggio poco tecnico :blush:

Esatto era quello che volevo fare.. quello che non riesco a capire è come devo fare (visto che da quel che ho capito quelle 3 uscite dell'arduino comandano entrambi gli integrati) per comunicare al primo integrato il numero che finirà su tutti i display e sul secondo integrato quale display accendere.. spero di essermi spiegato.. in ogni caso domani credo che provo perché fin ora ho solamente cercato informazioni, così magari posso comunicarvi il problema in modo più specifico.. Grazie. :slight_smile:

Il multiplexing con 2 ShiftRegister é impegnativo visto che devi programmare col Arduino il multiplex. I 2 shiftregister sono in serie percui devi mandare 16 Bit, 8 per la cifra e 8 per discriminare la posizione della cifra.
Il vantaggio del MAX 7219 é che non hai bisogno di resistenze sui LED e che fa lui da solo il multiplexing. Basta scrivergli i dati.
Ciao Uwe

uwefed:
Il vantaggio del MAX 7219 é che non hai bisogno di resistenze sui LED e che fa lui da solo il multiplexing. Basta scrivergli i dati.

D'altronde quando qualcuno lavora per te lo devi pur pagare $)
(un modo scherzoso per dire che se il MAX costa è perché va a fare molto del lavoro che altrimenti saresti costretto a far tu con componenti extra e codice)

Ciao gente! :slight_smile: Scusate se non mi son più fatto sentire ma sono stato impegnato in questi giorni.. quindi ho provato il tutto oggi pomeriggio e tutto è andato a buon fine 8) Grazie dell'aiuto!! :slight_smile:

E cosa hai usato, alla fine?

Bertallo:
Ciao gente! :slight_smile: Scusate se non mi son più fatto sentire ma sono stato impegnato in questi giorni.. quindi ho provato il tutto oggi pomeriggio e tutto è andato a buon fine 8) Grazie dell'aiuto!! :slight_smile:

Tre oggi siete troppi!
Spiegate come risolvete, altrimenti non serve a niente discuterne!
F

Federico:
Tre oggi siete troppi!
Spiegate come risolvete, altrimenti non serve a niente discuterne!
F

]:smiley:

Alla fine ho usato i 2 Shift Register come da titolo, ho seguito la guida che mi era stata linkata sopra (http://arduino.cc/en/Tutorial/ShiftOut) e quindi ho usato il primo SR per impostare il valore su tutti i display (essendo gli stessi segmenti di tutti i display collegati insieme) mentre sul secondo SR inserisco il valore relativo allo schermo da abilitare (ogni uscita è collegata alla base di un transistor BC548 che una volta saturato porta i 2 catodi a massa).