[CHIUSO] TLC 5940 - programmazione

Ciao.
Dopo aver abbandonato l'idea di utilizzare il TLC5947 (ho bisogno di pilotare 26 uscite (13+13), ed il 5947 ne ha 24), ho pensato di utilizzare 2 TLC5940 utilizzando 2 circuiti separati (ma questa sarà un'altra storia) in quanto non mi va di "sprecare" 2 chip più costosi solo per utilizzare un circuito unico.
Comunque, a parte lo sproloquio iniziale, ho provato a realizzare un primo circuito di prova, collegando il TLC5940 ad Arduino Uno come descritto sulla playground, e scaricato la libreria Tlc5940.h (e tutto il resto anche).
Quindi ho provato a fare uno sketch di prova.
Lo scopo ultimo di tutto questo sarebbe, a fronte di un input quale un sensore o altro, accendere in sequenza degli spezzoni di led strips, quindi attendere un certo tempo, e farli spegnere, magari in fading.
Non essendo una cima, procedo per gradi (e tentativi, in verità).
Il primo sketch che ho realizzato è il seguente, in cui mi aspetterei di accendere 4 led (per il momento uso dei led singoli per fare i test di prova) in sequenza a diversa intensità:

#include "Tlc5940.h"

const unsigned int accendi=2000;  //creo una costante per il comando delay che accende i singoli LED 
void setup()
{
  Tlc.init(0); // inizializzo TLC5940 e setto  in OFF tutti i canali
}
 
void loop()
{
  {    Tlc.set(0, 50); //setto il canale 0 a intensità 50
  }
 Tlc.update(); //invio i dati al TLC
  delay(accendi); //attendo 2 secondi
 {    Tlc.set(1, 2000);
  }
 Tlc.update();
  delay(accendi);
 {    Tlc.set(2, 50);
  }
 Tlc.update();
 delay(accendi);
 {    Tlc.set(3, 4000);
  }
 Tlc.update();
}

Ottengo più o meno quello che voglio, solo che una volta acceso il 4° led, inizia un loop in cui tutti e 4 i led lampeggiano all'unisono, pur mantenendo l'intensità impostata.
In effetti quello che volevo ottenere è accendere i led in sequenza e poi che rimanessero tutti accesi (magari per un tempo definito per poi spegnersi in fading), ma è un problema che, al momento, non so come impostare (anzi, un consiglio è beneaccetto...).
Potrei anche capire che il programma esegua continuamente il loop, ma in tal caso nn capisco perchè, dopo aver acceso i led in sequenza la prima volta, poi iniziano a lampeggiare all'unisono invece di continuare ad accendersi in sequenza.

Grazie per l'aiuto

Andrea

jocman:
...
Potrei anche capire che il programma esegua continuamente il loop, ma in tal caso nn capisco perchè, dopo aver acceso i led in sequenza la prima volta, poi iniziano a lampeggiare all'unisono invece di continuare ad accendersi in sequenza.

Non si accendon o in sequenza perché non lli hai spento.

Consiglio al posto di usare un TLC5940 usa una strip con i controller WS2812. Puoi pilotare ogni LED singolarmente a colori.

Ciao Uwe

Esatto, non li spengi per cui non puoi vedere i led accendersi in sequenza.
Ricordati che la lib è bufferizzata per cui tutte le modifiche fatte sulle uscite vengono inviate al chip solo con l'uso di Tlc.update().
Se ti studi l'esempio "BasicUse" che c'è nella libreria, vedrai che puoi azzerare tutte le uscite ed impostare quelle che ti servono con comodo PRIMA di fare materialmente l'aggiornamento dello stato del chip.

Grazie dei suggerimenti, ne farò tesoro.

uwefed:
Consiglio al posto di usare un TLC5940 usa una strip con i controller WS2812. Puoi pilotare ogni LED singolarmente a colori.

circa le led strips con WS2812 integrato, sembra un'ottima alternativa e mi sto documentando in merito.
Per quello che ho visto al momento (molto fugacemente): ogni led ha un proprio indirizzo, quindi la comodità è senz'altro indubbia. Pare (pare) che li ho trovati a un prezzo ottimissimo (cina ovviamente....).
Dal punto di vista tecnico, potendoli pilotare con un solo pin (se ho capito bene) mi risolverebbe anche dei bei problemi circa arduino (anzi, se fattibile, potrei usare un ATTiny85 e rimpicciolirei tutto), e per quanto riguarda l'alimentazione (5V no?) potrei sempre usare l'alimentazione a 12V riducendola (o non ce ne è bisogno?). L'assorbimento sarebbe relativo perchè per l'uso che ne vorrei fare potrei portare tranquillamente l'alimentazione in più punti.
Ma a questo punto permettetemi di chiedervi un parere e relativi (eventualmente) consigli.
Il tutto mi serviva per illuminare la mia scala interna di casa, gradino per gradino.
Nel mio progetto c'era di posizionare sotto ogni gradino 2 spezzoni bianco freddo con in mezzo uno spezzone RGB.
L'idea era, tramite uno switch IR, di illuminare all'occorrenza (bianco) ogni scalino al momento in cui si saliva o scendeva (l'accensione rispettava la direzione) per poi spegnersi dopo un tot. Lo spezzone RGB aveva scopo puramente estetico: un ciclo infinito di crossfading tra colori, giusto per creare ambient light quando se ne ha voglia.
A occhio, mi sovviene che da un lato utilizzare il WS2812 mi comporterebbe (a parte la "facilità" di gestione tramite arduino) forse anche un risparmio in quantità (magari metterei 2 spezzoni anzicchè 3), e potrei fare in modo, ipotesi, di mandare in crossfading continuo finchè viene attivato lo switch e cambia al bianco per illuminare la scala. L'idea non mi dispiace, ma riguardo al bianco (che sarebbe di tipo composito) mi sapete dire che gradazione K avrebbe?
Mi converrebbe alterare il progetto in questa ottica o mi converrebbe invece restare sull'idea originaria con i TLC e sbattere la testa?

Grazie
Andrea

Sì, puoi comandare i TLC5940 anche con un Attiny85. Mi pare che esista una lib apposita ma non so dove si trova. Però l'utente ER ha sviluppato un progetto proprio con questa combinazione:

Su quale sia la combinazione più economica dal punto di vista dei consumi non so dirti.

Se vuoi degli auti su come gestire i giochi di luce ed i fading, tempo fa ho realizzato una lampada a LED RGB:
http://www.leonardomiliani.com/2012/lampada-da-tavolo-con-led-rgb/

Nel codice puoi trovare un pò di idee su come pilotare i 5940.

Purtroppo per quello che ho in mente utilizzare il TLC5940 con l'ATTiny85 non penso sia possibile: avrei bisogno di 5 pin solo per il TLC e almeno 2 per i due switch IR (a meno forse di usare degli shift in, ma non vorrei - oltre a non averne mai fatti). Forse gli ATTiny44.....
Invece, se non dico sciocchezze, potrei invece usare un ATTiny85 con i WS2812 per gestire tutte e 2 le rampe di scale: ogni rampa necessiterebbe di 1 pin per i WS2812 e 2 per gli switch IR, quindi 3 pin + 3 pin, giusto i 6 pin dell'ATTiny85.
Ma anche se fossi obbligato a fare 2 circuiti separati per rampa, un ATTiny85 per rampa sarebbe più che sufficiente.

Riguardo i tuoi suggerimenti, grazie per i links, che ho spulciato subito, anche se, a dire il vero, il tuo sito l'ho spulciato ben più di una volta sin da quando ho conosciuto arduino (7-8 mesi fa circa) trovandoci tanti spunti interessanti. Solo ad averci il tempo e lo spazio per fare tutto.........

I WS2812 non li conosco. Mi parli di 1 solo pin, comunicano in OneWire?

Ah, i Tiny85 hanno 5 pin utili. Il 6° è il pin di reset, che non disabiliterei per usare come pin normale perché poi ti serve un programmatore professionale per poter rimettere nelle condizioni normali ma anche solo per programmare un nuovo sketch.

I WS2811/12 necessitano di una tempistica molto stretta. percui la gestioen del flusso seriale dei Dati é stato programmato in assembler. Non so se la libreria funziona anche sui ATtiny.
Ciao Uwe

leo72:
I WS2812 non li conosco. Mi parli di 1 solo pin, comunicano in OneWire?

Ah, i Tiny85 hanno 5 pin utili. Il 6° è il pin di reset, che non disabiliterei per usare come pin normale perché poi ti serve un programmatore professionale per poter rimettere nelle condizioni normali ma anche solo per programmare un nuovo sketch.

Circa i WS2812 ne so meno di te. ho letto questo post:

http://forum.arduino.cc/index.php?topic=161874.0

e ne ho fatto delle deduzioni che possono essere tranquillamente errate.
Del resto se avessi le capacità, non incontrerei tanti problemi nella programmazione di questi TLC5940 (per dirne una non riesco a capire come accendere in sequenza X led e poi farli spegnere; ottengo sempre e solo un blinking continuo se provo ad inserire una istruzione delay, e senza di questa ottengo solo una accensione simultanea fissa...)
Con i MAX7991 avevo ottenuto il risultato che cercavo; peccato che la matrice led non mi consentiva di usare i 12V per alimentare le led stripes: funzionava solo con led singoli...... Comunque mi tornerà utile per il prossimo Natale per animare il presepe di un amico

Sull'ATTiny, come premesso, ho detto una sciocchezza, e comunque vedi che non sarebbe adatto allo scopo neanche con il TLC.

uwefed:
I WS2811/12 necessitano di una tempistica molto stretta. percui la gestioen del flusso seriale dei Dati é stato programmato in assembler. Non so se la libreria funziona anche sui ATtiny.
Ciao Uwe

Ecco, come non detto..... A questo punto mi converrebbe orientarmi su un AtMega standalone per gestire tutto quello che mi serve in un unico circuito, no?

uwefed:
I WS2811/12 necessitano di una tempistica molto stretta. percui la gestioen del flusso seriale dei Dati é stato programmato in assembler. Non so se la libreria funziona anche sui ATtiny.
Ciao Uwe

Funziona, funziona ...
... e Leo ha visto i miei orologi neoPixel (basati su ATtiny85) in funzione :grin: :grin: :grin:

Guglielmo

nessuno mi ha detto niente... :roll_eyes: :roll_eyes:

uwefed:
nessuno mi ha detto niente... :roll_eyes: :roll_eyes:

... te l'ho fatto anche vedere ... ti ho mandato la foto via Skype XD XD XD

Guglielmo

Ne approfitto perchiudere il mio topic, in quanto mi sono procurato delle strip di test con i WS2812 e sto sperimentando con quelli.
Ovviamente (perchè sennò che gusto c'è) sto avendo qualche intoppo nella programmazione, ma apro un post apposito.
Vorrei solo ringraziare chi mi ha consigliato di provare i WS2812 (in particolare Uwe - tra l'altro, avendo vissuto 11 anni in Val Passira, se avessi conosciuto prima arduino sarei andato volentieri a prendere un caffè con lui a BZ): sono eccezionali.
Anche se il costo è maggiore, ma ritengo che il rapporto costo/beneficio/stress ne valga la pena......