PDA

View Full Version : Matrice di led e PIC: mi spiegate un po come funziona?


Dani88
11-09-2008, 10:03
Ciao raga
sto iniziando un progetto nel quale vorrei costruire un display a matrice di led, sul quale far scorrere (per il momento mi basta riuscire a visualizzarle, poi si vedrà :D ) delle scritte preimpostate....
Ora innanzi tutto vorrei capire bene, se qualcuno riesce a spiegarmi, come funziona una matrice a led, ovvero come pilotare tutti quei led semplicemente con poche uscite a disposizione.
Da quel poco che ne so il trucco dovrebbe essere nella velocità di accensione dei led che a causa della persistenza dell'img sembrano poi tutti accesi (almeno quelli che devono esserlo), però non capisco come posso, con poche uscite, comandare anche tanti led (ad esempio QUI (http://www.instructables.com/id/How-to-drive-a-lot-of-LEDs-from-a-few-microcontrol/) con 5 uscite comanda 20 led :eek: ) :help: :help:

alecomputer
11-09-2008, 21:59
Le matrici di led vengono pilotate su righe e su colonne .
Sulle righe in genere sono inviati i dati per accendere i led , mentre le colonne vengono accese in sequenza dalla prima all' ultima , e alla fine il ciclo ricomincia e si ripete all' infinito .
Sincronizzando l' accensione delle righe con l' accensione delle colonne puoi ottenere l' accensione solo dei led che desideri .

Dani88
12-09-2008, 07:54
quindi ad esempio se voglio scrivere uno zero supponiamo di 5 colonne devo fare una cosa di questo tipo giusto?
http://img525.imageshack.us/img525/2994/ledmatrixzd1.th.jpg (http://img525.imageshack.us/my.php?image=ledmatrixzd1.jpg)

buttando giù un codice moooolto veloce potrei fare una routine di questo tipo?

...declarations...

int zero[]={126,129,129,129,126,0}; //126=01111110 e 129=10000001
// lo zero finale è lo spazio tra un carattere e l'altro

void main(){
while(true){
for(int i=0,i<6,i++){
PORTB=zero[i];
//incrementa colonna
}
}
}


oppure una funzione da chiamare ogni volta, in cui gli passo il carattere che voglio stampare:

void display_char(*int ptr){
for(int i=0,i<6,i++){
PORTB=ptr[i];
//incrementa colonna
}
}

....code......


display_char(zero);