Pilotiamo una matrice di LED 8×8 con un MAX7219 e Arduino

22 03 2013

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

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ò pilotare una matrice di 64 LED con un MAX7219

Ecco come si può pilotare una matrice di 64 LED con un MAX7219

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);
  } 		
}
20130323-132251.jpg

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

About these ads

Azioni

Information

6 responses

14 05 2014
luigi

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

14 05 2014
cfpmanfredini

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.

15 05 2014
luigi

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

9 07 2014
Lorenzo

Complimenti per il blog e per questo articolo!
Ho visto scorrere i numerini sulla matrice senza problemi!!!
p.s. ho utilizzato un Arduino Micro.

9 07 2014
cfpmanfredini

Grazie Lorenzo!
Continua a seguirci che ci sono tante novità in cantiere.

18 09 2014
niccoloborgonovo

salve, avrei bisogno di accendere in sequenza una striscia di 64 led (effetto supercar per capirci), è possibile farlo con questo integrato? grazie

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...




Iscriviti

Ricevi al tuo indirizzo email tutti i nuovi post del sito.

Unisciti agli altri 1.101 follower

%d blogger cliccano Mi Piace per questo: