La scintilla che ha fatto partire il progetto è stata un video su youTube di un gioco di luci
realizzato con una matrice di 8x8 led RGB; cercando ancora trovato altri esempi, ma sempre basati
su Arduino, piattaforma che non uso. Ho cercato quindi soluzioni con l'uso di PIC senza trovare realizzazioni
complete e dettagliate, soprattutto per il firmware.
Mi sono quindi detto: "questo lo devo fare io, senza copiare in giro"...e così è stato.
Il risultato (ancora in sviluppo a Luglio 2010) è molto soddisfaciente per le numerose sfide, intellettuali
e realizzative, incontrate e risolte.
Gli obiettivi iniziali del progetto sono stati:
Il circuito impiega 4 componenti:
L'IC pilota 24 uscite (quindi 8 led RGB) a corrente costante com modulazione PWM su tutte le uscite
Questo significa non preoccuparsi del dimensionamento delle resistenze di comando per i singoli led; una
sola resistenza specifica quanta corrente fa passare in tutti i led e, quindi, offre la possibilità di
modulare la luminosità complessiva con meccanismi di variazione di questa resistenza.
La modulazione PWM permette di controllare la luminosità di ciascun singolo led da 0 al valore massimo; impostando
il valore PWM per i 3 led R,G,B di un singolo pixel si ottengono tutte le sfumature intermedie di colore.
In effetti, il TLC5947 utilizza 12 bit di controllo PWM per ogni led, ovvero 4096 livelli di luminosità;
questo è fin troppo 'granulare' per applicazioni standard e diventa un grosso problema per la gestione SW.
Altro grande vantaggio di questo componente è la scansione automatica e continua delle uscite (refresh), pilotata da un oscillatore on-chip da 4MHz,
e libera quindi il micro da questo impegno (conteggio dei cicli, incremento dei contatori e driving).
Il chip, a 32pin SSOP (sigh!), dispone di una 'porta' SPI Slave (Serial Peripheral Interface) su 3 pin
(SCLK = Serial Clock), SIN = Serial Data In) e SOUT = Serial Data Out);
il pin SDO non è attualmente utilizzato.
I pin di controllo sono 2: Blank, spegne le uscite quando a '1', e XLAT, carica i data dal registro a scorrimento
nel buffer di pilotaggio.
I rimanenti 3 pin solo l'alimentazione (VDD e VSS) e, importante, lo IREF al quale si collega le resistenza verso massa che
stabilisce il valore di corrente costante erogata.
Come ogni nuovo progetto, le sfide sono continue e, spesso, in relazione alle scelte fatte.
Innanzitutto, il chip TLC5947 è piccolo (minuscolo!): saldare direttamente il chip sullo stampato è difficile e
rischioso; se qualcosa va storto sono guai a rimuoverlo.
Per la fase di sviluppo e prove ho scelto di saldarlo su un'adattatore SSOP - DIN, acquistato online da NKC; purtroppo
non esistono moduli da 32 pin SSOP per cui ho dovuto usare un modulo da 48pin che eventualmente taglierò a
misura in fase finale (o rischierò il montaggio diretto).
Saldarlo è stata un'avventura, ma è bastata tanta luce, una buona lente, molta pazienza e un pò di birra fresca !
Ho usato il metodo della 'strisciata' di stagno e molto deflussante, come si spiega su Internet...ne ho montati 2 finora
con ottimi risultati.
Per il software è stata ancora più dura!
Come detto, l'inghippo sono i 12bit usati per il pilotaggio; non si sposano bene, anzi malissimo, con l'architettura
a 8 bit del PIC, per diversi motivi:
Quest'ultimo punto forza una soluzione basata sull'emulazione (bit banging) del protocollo.
In altre situazioni (esempio: comunicazione con un ADC) non sarebbe un problema inviare 16bit e considerarne solo 12,
ma in questo caso non si può. Lo Shift Register deve essere 'impaccato' con esattamente 288bit consecutivi.
Teoricamente si potrebbero prendere i blocchi di 12 bit e assemblarli in sequenze da 8 bit, usando alternativamente
4 bit del blocco precedente e 4 bit del successivo; fattibile, ma mostruosamente lento!
Le scelte è stata quindi di utilizzare solo 256 (8bit) livelli di luminosità invece di 4096, che semplica
parecchio il codice e riesce a far stare una 'frame' in 192 byte di RAM.
La routine in Assembler di comunicazione SPI aggiunge i 4 bit mancanti, a 0 o 1, in testa o in coda al pacchetto.
In pratica, questo comporta che l'insieme di Led possa essere più o meno luminoso, fatto compensabile
con la variazione della resistenza di controllo corrente.
Anche la scelta del PIC 16F88 (per motivi pratici) ha comportato qualche acrobazia.
(... in completamento ...)
![]() |
![]() |
![]() |
| Piedinatura della matrice led | Disposizione componenti | Schema elettrico |
![]() |
![]() |
![]() |
| Il banco prova | Chip TLC5947 su adapter TSSOP-DIP48 | Finalmente la luce ! |
Inserito il 30/07/2010