[PROGETTO] Controllo per matrice RGB 8x8
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?
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?


