Pagina 1 di 5

[PROGETTO] Controllo per matrice RGB 8x8

MessaggioInviato: 3 ago 2011, 18:18
da mattyyy
Ciao a tutti!
Verso settembre-ottobre dello scorso anno ho iniziato a lavorare ad un progettino riguardante un sistema di controllo per una matrice RGB 8x8 (cioè 8 righe e 24 colonne). A causa degli studi, purtroppo, ho dovuto abbandonare il progetto quasi sul nascere ma ora l'ho ripreso. Avrei bisogno del vostro aiuto per capire se, la soluzione finora ideata, potrebbe funzionare oppure è meglio adottarne un'altra (che tipo / perché?).

Vi allego uno schema a blocchi (**in fondo)

SPIEGAZIONE: il microcontrollore permette di selezionare la riga da abilitare mediante il decoder righe (3 to 8) e la colonna mediante il decoder colonne (5 to 32 ==> dato che di colonne ce ne sono solamente 24 alcune combinazioni non saranno disponibili).
(Vi allego un'immagine della matrice così da rendervi le idee più chiare sulla mia decisione).

A questo punto mi chiedevo: "ma sarebbe più appropiato l'uso di qualche shift-register per comandare le righe e le colonne?"
Questo dilemma mi è sorto perché probabilmente se abbiamo intenzione di accendere una grande quantità di LEDs contemporaneamente, il sistema "a decoder" potrebbe influenzare la luminosità di questi ultimi. Si immagini di voler accendere il LED ROSSO della colonna[0]-fila[0] e il LED ROSSO della colonna[0]-fila[1]. Dato che in un decoder c'è la possibilità di attivare un unica uscita alla volta, sarà necessario attivare il pin (1) della matrice (lo attiviamo con un segnale HIGH) e altarnare l'attivazione dei pin (25) e (26) (mandandoli allo stato LOW) ad alta velocità in maniera da generare un effetto ottico che renda omogeneo il controllo. Questo significa che se alterniamo i pin(25) e pin(26) dallo stato HIGH allo stato LOW per 1ms ognuno otterremo l'accensione dei due LEDs con un dutycycle del 50%.

Ipotizziamo ora di voler accendere i LEDs ROSSI della prima colonna e delle file[0], [1] e [2] (pin corrispondenti ==> pin(26), (25) e (24)).
Come prima portiamo a livello HIGH il pin(1) della matrice e alterniamo lo stato LOW tra i pin(26,25,24) per 1ms ognuno. Il dutycycle scende ancora, al 33%. Ed è proprio questo quello che vorrei evitare, cioè che l'accensione di molti LEDs "contemporaneamente" (in realtà stiamo facendo un lavoro di accensione e spegnimento molto rapido in maniera che l'occhio non sia in grado di distinguerlo) diminuisca l'intensità luminosa.

Usando un sistema differente da quello della decodifica (come ho detto prima, ad es con l'uso di vari shift registers) posso ovviare a questo problema?
Grazie delle risposte

PS: una domanda su fidocadj - come mai provando ad immettere il codice tra la "funzione" ... non accade nulla? Questo è il risultato che ottengo


Ho sbagliato qualcosa?

Re: [PROGETTO] Controllo per matrice RGB 8x8

MessaggioInviato: 3 ago 2011, 19:18
da g.schgor
mattyyy ha scritto:Ho sbagliato qualcosa?

Credo tu abbia sbagliato la "scala" del disegno
Eccolo con scala dimezzata


In sostanza vuoi realizzare un'accensione in
"multiplexing"? Se la frequenza di scansione
è abbastanza elevata possono essere maggiorate
le correnti nei singoli LED in modo da compensare
il duty-cycle. Bisogna però consultare il datasheet
dei LED per vedere di quanto tali valori possono
essere maggiorati, in funzione appunto del duty-cycle
previsto.

Re: [PROGETTO] Controllo per matrice RGB 8x8

MessaggioInviato: 3 ago 2011, 19:27
da crestus
perché non processa il "null"

l'ultima riga da così:
Codice: Seleziona tutto
RV 110 75 140 85 9
null[/fcd]

deve diventare così:
Codice: Seleziona tutto
RV 110 75 140 85 9
[/fcd]


Di solito usano degli shift register! guarda questo.
in particolare allo schema: Link

è solo a 2 colori... ma il concetto è lo stesso...:)

Re: [PROGETTO] Controllo per matrice RGB 8x8

MessaggioInviato: 3 ago 2011, 21:10
da mattyyy
g.schgor ha scritto:Se la frequenza di scansione
è abbastanza elevata possono essere maggiorate
le correnti nei singoli LED in modo da compensare
il duty-cycle.

Questa potrebbe essere un'idea, però avrei intenzione di implementare una "funzione" che permette di cambiare l'intensità luminosa via software e farlo variando la corrente sarebbe una difficoltà - preferirei farlo utilizzando un modulo PWM e credo che con gli shift register sia più facile.

Leggo i documenti che mi ha consigliato crestus e proporrò uno schema a blocchi + schema circuitale con la nuova soluzione.

Grazie ad entrambi!

Re: [PROGETTO] Controllo per matrice RGB 8x8

MessaggioInviato: 3 ago 2011, 22:28
da g.schgor
Non vedo come il PWM sia compatibile con gli shift-register.
Se pur non facile, il comando diretto di ciascuna riga e colonna
dovrebbe permettere anche una modulazione del duty-cycle
di ciascun LED (ammesso che la frequenza di controllo sia
sufficiente)

Re: [PROGETTO] Controllo per matrice RGB 8x8

MessaggioInviato: 4 ago 2011, 2:00
da IsidoroKZ
Avevi sbagliato a non abilitare i BBCode, cosa che puoi fare cliccando l'apposita voce sotto la finestra dove scrivi il messaggio. Ora te l'ho messo a posto.

Vuoi controllare la luminosita` di tutto il display in blocco oppure quella di ogni singolo led? Nel primo caso si puo` fare il multiplexing anche con uno shift register, nel secondo caso invece no.

Re: [PROGETTO] Controllo per matrice RGB 8x8

MessaggioInviato: 4 ago 2011, 2:15
da TardoFreak
Alura,
Non puoi pensare di usare un decoder per le righe ed uno per le colonne. Il valore di multiplexing accettabile è, al massimo, di 1:8 e siamo già "tirati".
Quindi se hai una matrice RGB 8x8 devi considerare 8 colonne per 24 righe. Su ogni riga, con opportuni artifizi, parzializzi il tempo di accensione per ottenere le diverse intensità.
Usare uno shift register non è una buona idea perché il caricamento dello stesso necessita di tempo, quindi di velocità elevata che vuol dire micro velocissimo. A questo punto è meglio usare 24 uscite dirette dal micro che deve comunque essere veloce se vuoi avere un certo range di variazione della luminosità.
A Time Square (NY) ci sono pareti intere fatte con matrici di LED RGB che si comportano come megaschermi galattici. Io le ho osservate bene. Non usano multiplexing ma pilotaggio diretto o comunque pilotaggio PWM separato per ogni LED a frequenza altissima. :shock: :shock: :shock:
Se vuoi ottenere buoni risultati non devi andare al risparmio. -:-
Un vestito di alta moda non può costare 2€. ;-)

Re: [PROGETTO] Controllo per matrice RGB 8x8

MessaggioInviato: 4 ago 2011, 8:19
da IsidoroKZ
TardoFreak ha scritto:Usare uno shift register non è una buona idea perché il caricamento dello stesso necessita di tempo, quindi di velocità elevata che vuol dire micro velocissimo.


Usare una porta SPI? Mi pare che si possa collegare direttamente uno shift register, bastano poche decine di kilobit al secondo di transfer rate, mi pare si fattibile. O no? :-)

Re: [PROGETTO] Controllo per matrice RGB 8x8

MessaggioInviato: 4 ago 2011, 8:29
da posta10100
Potresti utilizzare una soluzione tipo questa, ma anche in questo caso il micro deve viaggiare veloce altrimenti la luminosita` e` troppo bassa.
Oltretutto non e` facilissimo da gestire via sw, ma se vuoi ne discutiamo.

O_/

Re: [PROGETTO] Controllo per matrice RGB 8x8

MessaggioInviato: 4 ago 2011, 9:46
da TardoFreak
IsidoroKZ ha scritto:...Usare una porta SPI? Mi pare che si possa collegare direttamente uno shift register, bastano poche decine di kilobit al secondo di transfer rate, mi pare si fattibile. O no? :-)

In teoria si, ma ragioniamoci sopra un attimo.
Supponiamo di utilizzare una frequenza di scansione di 100Hz se vogliamo fare un qualcosa che non ti sfarfalli davanti agli occhi ogni volta che giri la testa vuol dure caricare lo S-R- 800 volte al secondo.
L' accensione deve essere però parzializzata per implementare i livelli di luminostà. Supponiamo di fare una cosa da barboni e prevedere 16 livelli per ogni LED vuol dire caricare lo S-R 12800 volte al secondo. Se utilizziamo registri con buffer il clock dovrà funzionare a 307,2 kHz ma se non sono bufferizzati deve funzionare ad una frequenza almeno 10 volte superiore quindi a 3MHz circa perché, durante il caricamento, i LED devono essere spenti.
E tutto questo per ottenere un risultato poco più che mediocre.
Una soluzione più elegante sarebbe quella di utilizzare 4 74HC373. Uno per l' uscita delle colonne e 3 per le 24 uscite dei LED. Il collegamento al micro sarebbe fatto con 8 linee collegate a tuti gli ingressi dei 373 e 4 strobe.
A questo punto potremmo permetterci il lusso di aumentare il numero di livelli di luminosità di ogni LED per esempio, e di sicuro avremo il micro meno impegnato a "correre dieto" al multiplexing visto che con pochissime istruzioni noi caricheremmo tutto l' ambaradan.
Se dovessi farlo io taglierei la testa al toro ed utilizzerei 32 linee di I/O dirette dal micro. Non ci vedo molto senso nell' utilizzare integrati aggiuntivi quando, allo stesso prezzo (forse risparmiandoci pure) e senza fare tanti casini, posso prendermi un micro in contenitore QFP100 che ha tutto quello che mi serve a bordo e che mi pilota direttamente i LED, almeno le 24 righe.