multiplexing leds

Ciao a tutti! Avete già fatto l'albero? Restando in tema natalizio, vorrei realizzare delle decorazioni luminose per la finestra della mia cameretta multiplexando dei led. Praticamente faccio un quadrato di 7*7 led e, multiplexandoli, ho 14 uscite da connettere
all'Arduino. utilizzerei dei NPN per i catodi dei led, ma per gli anodi? non penso che l'arduino mi regga 49 led quando sono tutti accesi. devo fare un NPN che controlla un PNP? Ci sono metodi più convenienti? grazie!

Come puoi alimentare 49 LED se li multiplexi 7x7?
Al massimo alimenti 7 LED contemporaneamente.
Se tieni la corrente sui led sui 10mA puoi collegarli direttamente sui pin di Arduino. Se colleghi i Anodi su Arduino puoi usare un ULN2003 per i catodi comuni.

Ciao Uwe

Quindi basta il transistor sul catodo dei leds? Non rischio di bruciare l Arduino? Pensavo che ci volessero dei BJT anche sul positivo...

Sulle uscite del Arduino devi mettere le resistenze per limitare la corrente.
Ciao Uwe

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