Pages: [1] 2   Go Down
Author Topic: Matrice 256 LED  (Read 839 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Full Member
***
Karma: 0
Posts: 156
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ho creato una semplice matrice di LED 16 colonne x 16 righe = 256.
I LED sono pilotati da Power mosfet 16 canale P e 16 canale N.

Qui sotto un semplice programmino per le prove.
Se assegno 0xFF a tutte 4 le porte, rimangono
tutte a 0 cioè tutto spento.

Se a una delle due porte PORTA o PRTL che sono le colonne
(canale P) le assegno un valore inferiore o uguale a 0xF2 le uscite
si attiveranno, naturalmente per quel valore.

Qualche idea?

Carletto

//-------------------------------------------------------------------------------
//Matrice 16 x 16 = 256 LED
//con arduino mega2560.
void(){
  DDRA=0xFF;  //Colonne da 0 a 7.
  DDRL=0xFF;  //Colonne da 8 a 15.
  DDRB=0xFF;  //Righe da 0 a 7.
  DDRK=0xFF;  //Righe da 8 a 15.
  delay(50);
}
void loop(){
  PORTA=0xFF;
  delay(100);
  PORTL=0xFF;
  delay(50);
  PORTB=0xFF;
  delay(50);
  PORTK=0xFF;
  delay(50);
}
Logged

BZ (I)
Offline Offline
Brattain Member
*****
Karma: 252
Posts: 21283
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quello non é un multiplexing.
Il multiplexing funziona che metti solo una riga a H e i LED che vuoi accendere in quella riga metti a L il numero correspondente per le colonne. Poi fai la stessa cosa per la sucessiva riga ecc. Puoi anche invertire colonne e righe.

Ciao Uwe
Logged

Offline Offline
Full Member
***
Karma: 0
Posts: 156
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quello non é un multiplexing.
Il multiplexing funziona che metti solo una riga a H e i LED che vuoi accendere in quella riga metti a L il numero correspondente per le colonne. Poi fai la stessa cosa per la sucessiva riga ecc. Puoi anche invertire colonne e righe.

Ciao Uwe
Tra i vari giochi di luce ho bisogno di accendere tutti i LED della matrice, quindi necessita che
tutte le colonne e tutte le righe siano poste a livello H.
Si può fare anche in altro modo però arrivato a questo punto mi chiedo se è possibile
attivare tutte queste uscite contemporaneamente.

Ciao Carletto.
Logged

BZ (I)
Offline Offline
Brattain Member
*****
Karma: 252
Posts: 21283
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Dove hai messo quale resistenze?
Una su ogni led? Ok allora si possono accendere tutti i LED assieme.
Ciao Uwe
Logged

Offline Offline
Full Member
***
Karma: 0
Posts: 156
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Dove hai messo quale resistenze?
Una su ogni led? Ok allora si possono accendere tutti i LED assieme.
Ciao Uwe
Naturalmente ogni LED ha una resistenza in serie, corrente sui 15 mA.
Sui gate dei canale N ho messo in serie una resistenza di 4k7 mentre sui gate
dei  canale P ho utilizzato un ULN2803 e relative resistenze per lo spegnimento.

Ho eseguito un circuito del genere pilotato con un PIC18F4525 e non ho
avuto questo problema.

Carletto
Logged

BZ (I)
Offline Offline
Brattain Member
*****
Karma: 252
Posts: 21283
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

allora puoi accendere tutti insieme. Per risparmiare corrente puoi fare anche il multiplexing.
Ciao Uwe
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 325
Posts: 22498
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Con il vero multiplexing usavi solo 16 resistenze. Per accendere "insieme" tutte le 16 righe accendevi per x tempo la 1a riga, poi la spengevi e passavi alla 2a riga, la accendevi per x tempo, poi la spengevi e passavi alla 3a e così via fino in fondo.
In questo modo erano tante resistenze (e saldature) in meno nonché un discreto risparmio in termini di corrente consumata e, conseguentemente, di alimentatore.
Logged


Offline Offline
Full Member
***
Karma: 0
Posts: 156
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ok grazie per le risposte, mi sono piantato però su un altro problema e cioè
visto che il mio mega2560 ha tutte quelle uscite mi chiedo perchè se ne comando
32 (4 porte) mi va in tilt, non mi attiva nessuna uscita mentre se ne comando
di meno funziona.

Risolto questo problema utilizzerò un 595 che con poche
uscite riurirò a pilotare tutti i LED.

Carletto.
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 325
Posts: 22498
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ok grazie per le risposte, mi sono piantato però su un altro problema e cioè
visto che il mio mega2560 ha tutte quelle uscite mi chiedo perchè se ne comando
32 (4 porte) mi va in tilt, non mi attiva nessuna uscita mentre se ne comando
di meno funziona.
Spiegati meglio. Dettaglia un pochino  smiley-wink

Logged


Offline Offline
Full Member
***
Karma: 0
Posts: 156
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset


//Se carico 255 su le 2 porte delle colonne non ho uscite.
void loop(){
  PORTA=255; //Colonne
  PORTL=255; //Colonne
  PORTB=255; //Righe
  PORTK=255; //Righe
}
//Se invece su una delle 2 carico un valore 242 o inferiore tutto OK.
void loop(){
  PORTA=242; //Colonne
  PORTL=255; //Colonne
  PORTB=255; //Righe
  PORTK=255; //Righe
}

Carletto.
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 325
Posts: 22498
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

ma quanta corrente viene assorbita da tutti i pin accesi contemporaneamente? hai fatto un po' di conti?
ricordati che ci sono dei limiti di corrente: max 200 mA su tutto il micro (compreso il core, non solo la corrente che esce/entra dai pin).
Logged


Offline Offline
Full Member
***
Karma: 0
Posts: 156
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ma quanta corrente viene assorbita da tutti i pin accesi contemporaneamente? hai fatto un po' di conti?
ricordati che ci sono dei limiti di corrente: max 200 mA su tutto il micro (compreso il core, non solo la corrente che esce/entra dai pin).

Non ho controllato l'assorbimento totale, domani controllerò.
Ho però gli assorbimenti singoli:
Un pin delle colonne assorbe 0,5 mA, mentre sui pin delle righe rilevo una corrente
quasi trascurabile.

Carletto.
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 325
Posts: 22498
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ma te lo fa indipendentemente dalla porta che usi (cioè se attivi tutte le uscite della porta A non puoi fare altrettanto con la porta L e viceversa) oppure solo su una porta?

Logged


Offline Offline
Full Member
***
Karma: 0
Posts: 156
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

RISOLTO!

Una svista imperdonabile.


Per le prove ho utilizzato l'alimentazione tramite il cavo USB
senza connettere il GND di arduino con quella della scheda.

Quello che mi ha portato fuori strada è stato il fatto che con un
certo numero di uscite funzionava.

Adesso come mi avete suggerito proverò anche con uno shift register,
ho dei 595 sarà la prima volta con questi componenti.

Grazie per i vostri interventi.
Credo che ne avrò bisogno anche con il 595.

Carletto.


 
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 325
Posts: 22498
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Adesso come mi avete suggerito proverò anche con uno shift register,
ho dei 595 sarà la prima volta con questi componenti.

Grazie per i vostri interventi.
Credo che ne avrò bisogno anche con il 595.

Carletto.


 
Allora leggi qui:
http://www.arduino.cc/en/Tutorial/ShiftOut
Logged


Pages: [1] 2   Go Up
Jump to: