Salve a tutti,
vi chiedo un consiglio su cosa mettere al posto della X del titolo, dovendo, appunto, controllare 60 LED
Le possibilita' che sto valutando sono:
Elenco i vantaggi e gli svantaggi di ogni tecnica:
Il charlieplexing mi permette di controllare solo un LED per volta, il che potrebbe essere problematico volendoli accendere tutti o quasi (troppo ritardo tra due accensioni consecutive dello stesso diodo), ma permette di usare solo 9 resistenze (pari ai pin di Arduino da utilizzare);
il gugaplexing permette di usare solo 6 pin (potrei usarli tutti PWM, tra l'altro), ma bisogna aggiungere 12 transistor (6 coppie di complementari, 2 transistor per pin) ed il circuito si complica;
il chipiplexing mi permetti di usare gli stessi 9 pin del charlieplexing e, con l'aggiunta di un transistor per pin, di illuminare 8 (numero di pin - 1) LED contemporaneamente, diminuendo il ritardo tra due accensioni consecutive dello stesso LED, ma aumentando la potenza istantanea dissipata).
Voi che mi consigliate?
Scusate il postone, ho cercato di essere il piu' conciso possibile
Up!
Stavo considerando gli integrati MAX7219 o 7221, ma costano una decina di euro (senza contare che nei negozi non li ho trovati e ho da poco fatto l'ordine di Arduino, quindi mi sono rifornito da farnell di tutto quello che per ora mi serve e dovrei pagare, comprandone uno da RS, 6 € di spese di spedizione solo per lui).
In piu', il cirtuito non puo' assorbire piu' di 1A (tutti i LED accesi = 1.2A), ma dovrei riuscire a farcela, da quel che ho capito, in quanto quegli integrati dovrebbero multiplexare le rige di LED.
Il MAX7219 -21 multiplexa i LED in una matrice 8x8; percui accende al massimo 8 Led in contemporanea.
Ha una limitazione della corrente integrata percui non Ti servono resistenze sui LED.
Vedo vantaggioso usarlo.
Ciao Uwe
Grazie Uwe, credo che in effetti questo semplificherebbe anche il codice. Mi tocchera' comprare il chippone
Qualcuno ha provato le librerie sui suddetti integrati che si trovano in giro? Ce n'e' qualcuna migliore/piu' semplice da utilizzare rispetto alle altre?
Non mi va di provarle tutte una per una (senza nemmeno avere l'IC tra l'altro )
Porto la mia esperienza, che magari non è la migliore delle soluzioni, però non si sa mai...
In degli esperimenti che sto facendo, sto utilizzando il TLC5940, che dispone di 16 linee separate, ed ognuna può dare sufficiente corrente ad ogni led. E' necessario utilizzare una sola resistenza, ed è possibile regolare 4096 livelli diversi di illuminazione per ogni led (si tratta di uscite PWM). Poichè io utilizzo led rgb con anodo comune, si capisce che 16 uscite diventano poche, per tale ragione ho sdoppiato la VCC in due vie che controllo alternatamente con due transistor, ma è possibile a mio avviso usare anche più transistor. Ovviamente accendo 16 led per volta
In pratica dovendo tu controllare 60 led, ti basterebbe un TLC5940 + 4 transistor e saresti a posto. Considera che un tlc5940 lo trovi su rs al costo di circa 7€ per la versione dip, e circa 5€ per la versione smd.
La libreria che uso è quella base, dove non è implementato il multiplex ed è semplicissma da usare, poi il multiplex me lo gestisco da solo. Esiste anche una libreria avanzata, nata proprio per il multiplex, ma pare più ostica.
GianfrancoPa:
è possibile regolare 4096 livelli diversi di illuminazione per ogni led
Magnifico! Grazie per l'idea!
Devo dire che le uscite pwm mi fanno gola, ma il pensiero di dover gestire il multiplexing un po' meno
Quindi, secondo te, se voglio accendere tutti i led insieme dovrei riuscirci comunque senza vedere sfarfallii? L'unico problema e' che questa soluzione assorbe il doppio rispetto a quella con il max7219, ma al massimo mi sembra che si arrivi a 320 mA.
Leggendo il topic non ho ben capito di quale libreria si tratta (forse mi e' sfuggito qualcosa). Usi quella di cui si parla qui e non usi questa, giusto?
Nel mio caso potrebbe essere conveniente usare il componente UDN2981 che ti ha consigliato Uwe nell'altro topic, piuttosto che i transistor?
Uhm, l'assorbimento non è dato tanto dal chip che usi, ma dal numero di led che accendi in una volta sola (almeno credo...), nulla ti vieta, ad esempio, di accenderne 8 per volta! Nel mio caso ho deciso di destinare 20mA per ogni led, ma nulla ti vieta di destinarne di meno, ovviamente devi fare i conti anche con la resa che vuoi ottenere.
Ancora non ho implementato un multiplexing vero e proprio, ma già ho qualche idea, tempo permettendo nei prossimi giorni riuscirò a partorire qualche cosa.
Per quanto riguarda gli sfarfallii avendo provato con due sole linee posso dirti che non ho notato nulla, ma quando avrò un pò di tempo, proverò ad emulare più linee e vediamo come si comporta. Sicuramente usare sistemi integrati rispetto che i normali transistor, soprattutto quando non sono pochi, semplifica le cose e la loro gestione, magari migliora la stabilità e magari ancora consente anche un risparmio di pin. Per due sole linee (le prove che ho fatto fino adesso) mi sono accontentato di due transistor, in futuro, a seconda delle evoluzioni, mi riservo l'uso di questi chip!
superkulak:
Magnifico! Grazie per l'idea!
Devo dire che le uscite pwm mi fanno gola, ma il pensiero di dover gestire il multiplexing un po' meno
Quindi, secondo te, se voglio accendere tutti i led insieme dovrei riuscirci comunque senza vedere sfarfallii? L'unico problema e' che questa soluzione assorbe il doppio rispetto a quella con il max7219, ma al massimo mi sembra che si arrivi a 320 mA.
Leggendo il topic non ho ben capito di quale libreria si tratta (forse mi e' sfuggito qualcosa). Usi quella di cui si parla qui e non usi questa, giusto?
Nel mio caso potrebbe essere conveniente usare il componente UDN2981 che ti ha consigliato Uwe nell'altro topic, piuttosto che i transistor?
Il ULN2x03 tira l' uscita a massa e percui non puoi usarli con il TLC5940.
Il TLC5940 ha come uscita una sorgente corente costante che porta la corrente verso massa.
Li serve uno che tira l' uscita a +Alimnetazione come propiro il UDN2981.
GianfrancoPa:
Uhm, l'assorbimento non è dato tanto dal chip che usi, ma dal numero di led che accendi in una volta sola (almeno credo...), nulla ti vieta, ad esempio, di accenderne 8 per volta! Nel mio caso ho deciso di destinare 20mA per ogni led, ma nulla ti vieta di destinarne di meno, ovviamente devi fare i conti anche con la resa che vuoi ottenere.
Si', intendevo con tutti e 16 i LED accesi, ma in effetti, se vedo che va bene, posso accenderne solo 8 XD
GianfrancoPa:
Sicuramente usare sistemi integrati rispetto che i normali transistor, soprattutto quando non sono pochi, semplifica le cose e la loro gestione, magari migliora la stabilità e magari ancora consente anche un risparmio di pin. Per due sole linee (le prove che ho fatto fino adesso) mi sono accontentato di due transistor, in futuro, a seconda delle evoluzioni, mi riservo l'uso di questi chip!
Il discorso si estende al mio intero progetto, meglio un integrato che 9 transistor!
GianfrancoPa:
Invece gli ULN200xA come ti sembrano?
Impercettibilmente piu' veloci degli UDN2981 e molto piu' economici $)
uwefed:
Li serve uno che tira l' uscita a +Alimnetazione come propiro il UDN2981.
Perche'?
Comunque ora mi guardo per bene un po' di datasheet e valuto quali pezzi prendere, tanto ho l'intero fine settimana
Grazie ancora per l'aiuto!
uwefed:
Li serve uno che tira l' uscita a +Alimnetazione come propiro il UDN2981.
Perche'?
Il TLC5940 ha delle uscite che conducono verso massa. I LED devi collegarli a + alimentazione e al uscita. La corrente passa dal positivo attraverso il LED e il TLC a massa.
Per fare il multiplexing devi interrompere la corrente a lato alinmentazione positiva. Percui devi usare il UDN2981.
Per come la pensavo io ad interrompersi era l'alimentazione del driver (chissa' perche' me ne immaginavo due), ma non aveva assolutamente senso (ne devo pilotare uno), non avendo disegnato il circuito non mi rendevo conto dell'assurdita', ho fatto un po' di confusione
Allora, ho fatto una prova, ovvero accendere tutti i led contemporaneamente, facendo un multiplex 2 X 16. In realtà poichè uso led rgb ottengo 5X2 led. Appena perfeziono il codice magari lo posto.
Ho notato solo una cosa, un leggero sfarfallio, dovuto a mio avviso dal tipo di led che uso, infatti capita che accendendo un solo led dei 3 rgb, non so per quale motivo, si accende (molto leggermente) anche un altro dei restanti due (seppur in maniera molto ma molto leggera), creando questo piccolo disturbo. Inoltre uso dei normali transistor, con l'integrato proposto da Uwe possibilmente il tutto avviene in maniera più veloce e quindi con miglior qualità . Per tale ragione mi sono convinto ad utilizzare l'integrato UBN2981 nel mio lavoro.
Ho utilizzato per gestire la mia scheda con due vie di Led usando l'UDN2981, come consigliato dal buon Uwe, che dire, ora va tutto che è una meraviglia!!!
Capperi, se me lo dicevi due giorni fa forse avrei ordinato questi due integrati invece del MAX7219 (tra l'altro volevo in 7221, che e' protetto dai disturbi EM - devo usare gli analog in - ma su RS c'e' solo SMD). Il problema e' che, nel dubbio, ho preferito prendere questo perche' ci sono gia' le librerie belle e pronte per il mio caso e poi il costo del MAX e' quasi uguale a quello TLC5940 + UDN2981. Tanto per il pwm mi posso accontentare di quello del MAX, anche se regola la luminosita' di tutti i led contemporaneamente...
Comunque grazie per aver confermato che funziona bene, ne terro' conto per altri progetti
L'UDn2981 non ha bisogno di libreria, non sono altro che 8 transistor inscatolati, ed ognuno va collegato ad una uscita digitale dell'arduino per essere attivato o meno!
Si', lo so, ma e' comunque una cosa in piu' che devi gestire. Col MAX7219 accendo direttamente il LED che mi serve, senza gestire il transistor. E' giusto una comodita' in piu', non e' stato questo che mi ha fatto cambiare idea, solo che sapevo che il MAX7219 puo' gestire 64 LED senza problemi, ma non ero sicuro che fosse lo stesso con il TLC5940. Ora so che lo e'