Su eBay si riescono a trovare display realizzati con matrici di LED come questo per pochi soldi. Addirittura alcuni fornitori, per la prevalenza cinesi, muniscono la matrice LED con un PCB e un integrato MAX7219 che è quanto di meglio si possa desiderare per pilotare con semplicità 64 LED. Questo in figura lo abbiamo pagato meno di 4 euro!

La matrice di LED pilotata da un MAX7219 e Arduino. Servono solo 5 fili: 2 di alimentazione e 3 per i dati
Per pilotare 64 LED a prima vista sarebbero necessari 64 fili e 64 piedini di OUTPUT su Arduino, una cosa alquanto difficile da ottenere. Ci viene in aiuto per questo compito il MAX7219 che permette di pilotare 64 LED se questi vengono collegati a matrice. Per il pilotaggio poi sono necessari solo 3 fili più l’alimentazione.
Ecco come si può pilotarlo per far apparire in sequenza una serie di numeri. La cosa più interessante di questo firmware è che non fa uso di librerie esterne.
// Per realizzare questo firmware ci siamo ispirati a: // http://linksprite.com/wiki/index.php5?title=LED_Matrix_Kit unsigned char i; unsigned char j; /*Port Definitions*/ int Max7219_pinCLK = 10; int Max7219_pinCS = 9; int Max7219_pinDIN = 8; // La conversione da bitmap a codice binario è stata fatta qui: // http://www.pial.net/post/8x8-Dot-matrix-font-generator-based-on-javascript-and-HTML.aspx unsigned char disp1[10][8]={ {B00000000,B00111100,B01100110,B01100110,B01101110,B01110110,B01100110,B00111100},//0 {B00000000,B00001000,B00011000,B00111000,B00011000,B00011000,B00011000,B00111100},//1 {B00000000,B00111100,B01100110,B00000110,B00001100,B00011000,B00110000,B01111110},//2 {B00000000,B00111100,B01100110,B00000110,B00001100,B00000110,B01100110,B00111100},//3 {B00000000,B00100000,B01100000,B01101100,B01101100,B01111110,B00001100,B00001100},//4 {B00000000,B01111110,B01100000,B01100000,B01111100,B00000110,B01100110,B00111100},//5 {B00000000,B00111100,B01100110,B01100000,B01111100,B01100110,B01100110,B00111100},//6 {B00000000,B01111110,B00000110,B00000110,B00001100,B00011000,B00011000,B00011000},//7 {B00000000,B00111100,B01100110,B01100110,B00111100,B01100110,B01100110,B00111100},//8 {B00000000,B00111100,B01100110,B01100110,B00111110,B00000110,B01100110,B00111100},//9 }; void Write_Max7219_byte(unsigned char DATA) { unsigned char i; digitalWrite(Max7219_pinCS,LOW); for(i=8;i>=1;i--) { digitalWrite(Max7219_pinCLK,LOW); digitalWrite(Max7219_pinDIN,DATA&0x80);// Extracting a bit data DATA = DATA<<1; digitalWrite(Max7219_pinCLK,HIGH); } } void Write_Max7219(unsigned char address,unsigned char dat) { digitalWrite(Max7219_pinCS,LOW); Write_Max7219_byte(address); //address,code of LED Write_Max7219_byte(dat); //data,figure on LED digitalWrite(Max7219_pinCS,HIGH); } void Init_MAX7219(void) { Write_Max7219(0x09, 0x00); //decodifica: BCD Write_Max7219(0x0a, 0x06); //luminosità Write_Max7219(0x0b, 0x07); //limite scan;8 LEDs Write_Max7219(0x0c, 0x01); //power-down mode:0,normal mode:1 Write_Max7219(0x0f, 0x00); //test display:1;EOT,display:0 } void setup() { pinMode(Max7219_pinCLK,OUTPUT); pinMode(Max7219_pinCS,OUTPUT); pinMode(Max7219_pinDIN,OUTPUT); delay(50); Init_MAX7219(); } void loop() { for(j=0;j<10;j++) { for(i=1;i<9;i++) Write_Max7219(i,disp1[j][i-1]); delay(500); } }

Layout dei piedini di Arduino che mostrano dove si trovano i collegamenti SPI. Anche il connettore ICSP dispone di tale interfaccia ad eccezione del piedino SS
ho poco da commendare non riesco a farlo funzionare, la matrice lo comprata su ebay le sarei grato se mi desse un aiuto a capire dove sbaglio
Caro Luigi,
come avrai notato dal programma noi abbiamo usato i piedini 8, 9 e 10 di Arduino più le connessioni di alimentazione. Se sei sicuro della funzionalità del circuito che ti hanno inviato dovrebbe accendersi appena dai tensione. Il programma per funzionare non ha bisogno di librerie quindi basta trasferirlo su Arduino per vederlo girare.
Facci sapere come procedono i tuoi esperimenti.
ho sempre avuto il dubbio sulla matrice che ho comprato evidentemente qualcosa non va, proverò con qualcosa di nuovo . grazie e complimenti per il suo blog
Complimenti per il blog e per questo articolo!
Ho visto scorrere i numerini sulla matrice senza problemi!!!
p.s. ho utilizzato un Arduino Micro.
Grazie Lorenzo!
Continua a seguirci che ci sono tante novità in cantiere.
salve, avrei bisogno di accendere in sequenza una striscia di 64 led (effetto supercar per capirci), è possibile farlo con questo integrato? grazie
salve,ho montato il tutto come da voi descritto,si accende ma non girano i numeri.L’alimentazione deve essere esterna? E’ l’unico dubbio.Grazie e complimenti per tutti i progetti.Siete fantastici
Ciao, si è possibile fare l’effetto supercar ma il codice su arduino però devi cambiarlo…
Grazie Federico per i complimenti!
Il circuito deve funzionare sia con l’alimentazione esterna (connettore nero) sia con l’alimentazione data dalla porta USB. Quasi tutti i nostri progetti sono alimentati direttamente dal PC oppure con piccoli alimentatori USB. Tienici informati sui tuoi progressi…
Complimenti per il blog e per questo articolo semplice e efficace.
funziona alla prima con Arduino uno-
grazie
Grazie Mauro, continua a seguirci!
Complimenti per il blog funziona alla prima con Arduino uno compatibile, ho usato 4 display matrix in cascata , dopo il primo credo bisogna aggiungere un clock o togliere il cs in quanto perde alcuni led. Il primo display funziona correttamente
Ad un mercatino mi sono procurato una quantità industriale di queste matrici
Mi piacerebbe fare una scritta scorrevole con 8 o 10 di queste, è possibile o arduino non ce la fa ?
Ciao, è possibile gestire la matrice con Arduino tranquillamente. Noi abbiamo realizzato un display con 8 matrici (metteremo il progetto on line appena inizia la scuola). Ogni matrice è collegata ad un integrato MAX7219. Questo integrato gli allievi se lo sono fatto spedire come “sample” dall’azienda!