Matrice LED 8x8 con MAX7219

ultimo aggiornamento 23 giugno 2018


JLCPCB - 2$ per prototipi di PCB, di qualsiasi colore. Produzione in 24 ore!
L'Azienda di prototipi PCB più popolare, con oltre 700.000 clienti in tutto il mondo!
Sorridi a tutto il mondo qualunque cosa accada!

 

Indice

Descrizione

Il modulo presentato permette di pilotare una matrice di diodi LED, 8x8, per pilotare i singoli led sul modulo è utilizzato l'integrato MAX7219 che è un Driver per display a LED a 8 cifre con interfaccia seriale.
Il modulo ha le seguenti dimensioni: 3.2 * 3.2 * 1,3 centimetri e possiede 4 fori per viti di fissaggio, diametro 3mm.
Viene commercializzato dalla ICStation con il codice 11100

homotix

 

Link per l'acquisto

Il modulo pilota una matrice di led a catodo comune 8x8 tipo 1088AS sul modulo sono presenti 64 LED rossi dal diametro di 3mm. Dispone di 16 pin per pilotare i singoli LED.

Colore emesso  rosso
Colore faccia  nero
Tipo  anodo - colonna ; catodo - riga
Lunghezza d'onda  625 ~ 630 nm
Tensione diretta  2.1V ~ 2.5V
Corrente diretta  20mA
Dimensioni  32 mm x 32 mm x 8,0 mm

Per la connessione del modulo sono disponibili due connettori a 5 pin, questi riportano le seguenti diciture

Dicitura

Funzione

VCC

Alimentazione del modulo +5V

GND

Collegamento di massa

DIN - DOUT

Ingresso dati, e uscita verso il modulo successivo

CS

Selezione del modulo

CLK

Clock dei dati

uno è presente sul lato sinistro del modulo è rappresenta la porta di ingresso, il lato destro è la porta di uscita, per il controllo del singolo modulo, è necessario solo collegare la porta di ingresso con la CPU
Quando più moduli si collegano in cascata, la prima porta di ingresso del modulo si collega alla CPU, la porta di uscita si collega alla porta di ingresso del secondo modulo, la porta di uscita del secondo modulo si collega alla porta di ingresso del terzo modulo e così via

 

Il modulo viene spedito all'interno di una busta antistatica con dei Pinstrip di collegamento che devono essere saldati a cura dell'utilizzatore

Schema elettrico del modulo

Lo schema elettrico del modulo è molto semplice in quanto tutti incentrato sull'integrato l'integrato MAX7219 che stato progettato per controllare display a LED a segmenti o matrice di punti.
Il MAX7219 dispone di un interfaccia seriale sincrona e può comandare 8 cifre a 7 segmenti (catodo comune) o 64 LED singoli per realizzare bar-graph o array 5x7 o 8x8 e simili.
Il chip include una codifica BCD code-B programmabile e una memoria statica 8x8 che conserva ogni digit.
Il controller permette di regolare la corrente nei LED con una sola resistenza esterna collegata al pin Iset, oltre a disporre della possibilità di variare la luminosità da programma.
L'interfaccia col microcontroller richiede 3 pin.
Alle sue porte sono collegate le righe e colonne del modulo display, all'integrato sono poi collegati le tre linee che permettono di dialogare con la scheda di controllo. per ultimo sono presenti i pin di alimentazione

Come collegare il modulo

Per collegare il modulo singolo occorre utilizzare 5 cavi e seguendo lo schema sotto riportato

Come usarlo

Per semplificare l'utilizzo del modulo è disponibile un'apposita libreria che può essere scaricata a questo link, per generare gli Sprite da visualizzare sulla matrice è possibile utilizzare un'applicazione online creta da Miro Bozik, che permette di avere i codici numerici da utilizzare nello sketch

Nell'esempio di sketch sotto riportato è visibile per esempio come visualizzare in sequenza delle lettere.   Dopo aver incluso la libreria "LedControl.h" e aver creato l'oggetto LedControl lc = LedControl(12, 11, 10, 1), sono poi definite le composizioni delle varie lettere, che sono poi caricate sequenzialmente con una pausa di attesa prima dell'aggiornamento.


matrix_1.ino

/*
  matrix_1.ino
  Lo sketch mostra in sequenza delle lettere in modo da mostrare la scritta
  "ADRIROBOT"

  Sono utilizzati i seguenti pin
  Pin +5V           -> Alimentazione modulo
  Pin GND           -> GND
  Pin Digitale D10  -> connesso al pin Din
  Pin Digitale D11  -> connesso al pin CLK
  Pin Digitale D12  -> connesso al pin CS

  Creato il 26/12/2017 da Adriano Gandolfo
  Sito web http://www.adrirobot.it
  Blog http://it.emcelettronica.com/author/adrirobot
  Pagina Facebook https://www.facebook.com/Adrirobot-318949048122955
  Istagram https://www.instagram.com/adrirobot/
  This example code is in the public domain.
*/


#include "LedControl.h"

LedControl lc = LedControl(12, 11, 10, 1);


/* aspettiamo sempre un po' tra gli aggiornamenti del display */
unsigned long delaytime = 500;

void setup() {
  /*
    Il MAX72XX è in modalità di risparmio energetico all'avvio,
         dobbiamo fare una chiamata di sveglia
  */
  lc.shutdown(0, false);
  /* Imposta la luminosità su valori medi */
  lc.setIntensity(0, 8);
  /* e cancella il display */
  lc.clearDisplay(0);
}

/*
  Questo metodo mostrerà i caratteri per il
  parola "ADRIROBOT" uno dopo l'altro sulla matrice.
  (si utilizza una matrice di 5x7 led per rappresentare i caratteri)
*/
void writeparolaOnMatrix() {
  /* ecco i dati per i caratteri */
  byte a[5] = {B01111110, B10001000, B10001000, B10001000, B01111110};
  byte b[5] = {B01111100, B10010010, B10010010, B11111110, B10000010};
  byte d[5] = {B01111100, B10000010, B10000010, B11111110, B10000010};
  byte r[5] = {B01100010, B10010100, B10011000, B10010000, B11111110};
  byte i[5] = {B00000000, B10000010, B11111110, B10000010, B00000000};
  byte o[5] = {B01111100, B10000010, B10000010, B10000010, B01111100};
  byte t[5] = {B10000000, B10000000, B11111110, B10000000, B10000000};

  /* ora li mostra uno ad uno con un piccolo ritardo*/
  lc.setRow(0, 0, a[0]);
  lc.setRow(0, 1, a[1]);
  lc.setRow(0, 2, a[2]);
  lc.setRow(0, 3, a[3]);
  lc.setRow(0, 4, a[4]);
  delay(delaytime);
  lc.setRow(0, 0, d[0]);
  lc.setRow(0, 1, d[1]);
  lc.setRow(0, 2, d[2]);
  lc.setRow(0, 3, d[3]);
  lc.setRow(0, 4, d[4]);
  delay(delaytime);
  lc.setRow(0, 0, r[0]);
  lc.setRow(0, 1, r[1]);
  lc.setRow(0, 2, r[2]);
  lc.setRow(0, 3, r[3]);
  lc.setRow(0, 4, r[4]);
  delay(delaytime);
  lc.setRow(0, 0, i[0]);
  lc.setRow(0, 1, i[1]);
  lc.setRow(0, 2, i[2]);
  lc.setRow(0, 3, i[3]);
  lc.setRow(0, 4, i[4]);
  delay(delaytime);
  lc.setRow(0, 0, r[0]);
  lc.setRow(0, 1, r[1]);
  lc.setRow(0, 2, r[2]);
  lc.setRow(0, 3, r[3]);
  lc.setRow(0, 4, r[4]);
  delay(delaytime);
  lc.setRow(0, 0, o[0]);
  lc.setRow(0, 1, o[1]);
  lc.setRow(0, 2, o[2]);
  lc.setRow(0, 3, o[3]);
  lc.setRow(0, 4, o[4]);
  delay(delaytime);
  lc.setRow(0, 0, b[0]);
  lc.setRow(0, 1, b[1]);
  lc.setRow(0, 2, b[2]);
  lc.setRow(0, 3, b[3]);
  lc.setRow(0, 4, b[4]);
  delay(delaytime);
  lc.setRow(0, 0, o[0]);
  lc.setRow(0, 1, o[1]);
  lc.setRow(0, 2, o[2]);
  lc.setRow(0, 3, o[3]);
  lc.setRow(0, 4, o[4]);
  delay(delaytime);
  lc.setRow(0, 0, t[0]);
  lc.setRow(0, 1, t[1]);
  lc.setRow(0, 2, t[2]);
  lc.setRow(0, 3, t[3]);
  lc.setRow(0, 4, t[4]);
  delay(delaytime);
  lc.setRow(0, 0, 0);
  lc.setRow(0, 1, 0);
  lc.setRow(0, 2, 0);
  lc.setRow(0, 3, 0);
  lc.setRow(0, 4, 0);
  delay(delaytime);
}

void loop() {
  writeparolaOnMatrix();
}

 
 

Un post condiviso da Adriano Gandolfo (@adrirobot) in data:

 

Elenco revisioni

23/06/2018

Emissione preliminare