multiplexing leds

Ok grazie mille. E se anziché led fossero lampadine? Come dovrei fare?

Lampadine consumano molto piú corrente rispetto ai LED e sono piú costose.
In quel caso Ti serve Un pilotaggio tramite transistori.

Ciao Uwe

Quindi quello che avevo proposto io all'inizio? NPN collegato poi ad un PNP?
p.s. So che le lampadine sono sconvenienti, ma è solo per capire meglio!

Ma il multiplexing sfrutta appunto l'accensione sequenziale dei led.
Avendo un quadrato 7x7, come ti ha detto Uwe nel peggiore dei casi hai 7 led accesi.
Il multiplexing funziona proprio così.

Se vuoi stare assolutamente tranquillo, metti uno shift register, come il 74595, per pilotare gli anodi dei led (con 7 resistenze, una per ogni uscita, calcolata però per alimentare 1 singolo LED per volta). Sui catodi hai 2 soluzioni: o 7 transistor PNP oppure metti un ULN2803 (un array di darlingthon). Io opterei per il secondo, meno componenti da usare: considera che per i 7 transistor ti servono poi anche 7 resistenze per pilotare le basi e 7 resistenze di pull-down tra base ed emettitore.

Quindi, come operi? Con l'ULN2803 metti a massa la prima fila di LED, poi con lo shift register dai corrente ai LED che devi accendere. Tieni acceso per qualche istante, poi passi alla seconda fila e così via. Per pilotare il 595 usi 3 pin. Per pilotare l'ULN2803 ne usi 7. Ma puoi ridurre il consumo di pin a 3 soli se piloti l'ULN2803 interponendo un 74238 (un decoder 3-a-8), così impieghi anche in questo caso solo 3 pin.

Leo non hai parlato delle resistenze per limitare la corrente dei LED. Quelli vanno tra catodo e il transistore o ULN2803.
Il ULN2803 puó essere pilotato da un altro shift register come il 74HC595. Il vantaggio del 74HC238 é che sempre solo una uscita é H e percui una sicurezza per non accendere piú file di catodi.

Ciao Uwe

uwefed:
Leo non hai parlato delle resistenze per limitare la corrente dei LED. Quelli vanno tra catodo e il transistore o ULN2803.

Ho consigliato di metterle sulle uscite del 595, in ingresso agli anodi dei led.

Il ULN2803 puó essere pilotato da un altro shift register come il 74HC595 Il vantaggio del 74HC238 é che sempre solo una uscita é H e percui una sicurezza per non accendere piú file di catodi.

Esatto, così siamo sicuri di non avere mai più di 7 led accesi insieme neanche per sbaglio.

leo72:

uwefed:
Leo non hai parlato delle resistenze per limitare la corrente dei LED. Quelli vanno tra catodo e il transistore o ULN2803.

Ho consigliato di metterle sulle uscite del 595, in ingresso agli anodi dei led.

Hai ragione. Ho fatto il l'errore.
Ciao Leo

Ma questi shift register come funzionano? Io una volta ho usato un 4511 per un display 7 segmenti, è simile? cioè, ho quattro pin, se ne metto high il primo e il secondo e low il terzo mi si accendono determinati pin dell'integrato?

I 74595 sono shift register del tipo serial in/parallel out, cioè che ricevono i dati serialmente ed attivano le uscite in base allo stato del bit corrispondente al pin.
Quindi tu spedisci un byte, es. 0b10101010 e lui mette su HIGH i pin 7/5/3/1 mentre lascia su LOW i pin 6/4/2/0.

Se vuoi invece fare come dici tu, puoi usare un 7447 che è un driver BCD per display a segmenti. Quindi spedisci una tripletta di bit ed attivi il segmento corrispondente:
000->uscita 0; 001->uscita 1; 010->uscita 2 ecc..

ok, penso di aver capito, anche se non ho mai lavorato sui byte. Li devo inviare via seriale?

SUBSEA:
ok, penso di aver capito, anche se non ho mai lavorato sui byte. Li devo inviare via seriale?

NO.
Se usi il 74595 li spedisci con la funzione shiftOut usando 3 pin a tua scelta.
Hai letto la pagina che ti ho linkato? ]:smiley:

Scusa :. hai ragione, non avevo messo il link! E se non volessi usare la libreria? Come potrei fare? ]:smiley:

Non usare il 74595 TTL che, oltre che non trovi piú in comercio, non é compatibile con Arduino a causa dei livelli H e L differenti, ma usa la serie HC dei TTL percui 74HC595.
Ciao Uwe

Ok. Grazie mille!

uwefed:
Non usare il 74595 TTL che, oltre che non trovi piú in comercio, non é compatibile con Arduino a causa dei livelli H e L differenti, ma usa la serie HC dei TTL percui 74HC595.

Ovviamente.

Domani vado a comprare l'integrato. Comunque non ho ancora capito come funziona (scusate se sono uno spacca balls). Non mi è chiaro

  1. Come si fa a conoscere librerie come la shiftOut che non sono presenti nel reference?
  2. Come si fa a farlo funzionare senza libreria apposita

SUBSEA:
Domani vado a comprare l'integrato. Comunque non ho ancora capito come funziona (scusate se sono uno spacca balls). Non mi è chiaro

  1. Come si fa a conoscere librerie come la shiftOut che non sono presenti nel reference?
  2. Come si fa a farlo funzionare senza libreria apposita

shiftOut non è una libreria, è una funzione presente nel core, dovresti leggere meglio il Reference :wink:

http://arduino.cc/en/Reference/ShiftOut

Scusa ancora... Figura merdæ una altra volta... Avanced I/o.Comunque se volessi farlo senza questa funzione ma utilizzando per esempio la funzione bitWrite sarebbe possibile?

Ma tu sai a cosa serve la bitWrite? :stuck_out_tongue:
Serve a scrivere a 0 o ad 1 un determinato bit di una variabile passata come parametro, non serve a "scrivere" il bit su un pin.

Quindi, usa la shiftOut che è meglio :wink:

Ok domani provo poi vi so dire. Buona domenica!