home

Guida n. 83

Un modulo con il chip MAX7219, cinque fili e Arduino UNO: una faccina disegnata riga per riga, poi una scritta che scorre su quattro matrici.

A cura di Ada Intelisano · redazione tecnica di informaticait.it

Scarica il PDF (A4, 6 pagine) Stampabile e condivisibile, senza modifiche — CC BY-ND 4.0
In breve
  • Il MAX7219 comanda da solo i 64 LED della matrice: Arduino gli manda gli ordini con tre fili, DIN, CLK e CS.
  • Cinque fili: VCC al 5V, GND al GND, DIN al pin 11, CLK al 13, CS al 10. Il modulo si tiene con l'ingresso a destra.
  • Una figura sono otto numeri, uno per riga: ogni 1 è un LED acceso. Libreria MD_MAX72XX.
  • Con il modulo da quattro matrici e la libreria MD_Parola una scritta scorre da destra a sinistra.
Tempo: 45 minutiLivello: si salda un pettinePrima: guide n. 53 e 70

Otto righe e otto colonne di LED rossi: con una matrice così si disegnano faccine, frecce, numeri, e con più matrici in fila si fanno scorrere le scritte come sulle insegne dei negozi. Accendere 64 LED uno per uno chiederebbe troppi pin, quindi sul modulo c'è un chip, il MAX7219, che fa tutto il lavoro. Arduino gli parla con tre fili.

1Prepara il materiale

  • un modulo matrice 8×8 con il MAX7219: arriva con due pettini a cinque pin da saldare, uno dritto e uno piegato ad angolo;
  • Arduino UNO con il cavo USB e cinque cavetti femmina-maschio;
  • per l'ultimo passo, il modulo da quattro matrici (32 × 8 LED), che ha già il pettine saldato.
Parola nuova: matrice di LEDLED messi in righe e colonne. Qui ognuno dei 64 punti è un LED: accendendone alcuni e non altri si disegna una figura, come con i quadretti di un foglio.

2Come fa un chip a comandare 64 LED

Il MAX7219 non tiene accesi tutti i LED insieme. Accende una riga alla volta e passa alla successiva così in fretta che l'occhio vede l'immagine intera: il datasheet indica 800 giri al secondo tipici su tutte e otto le righe. Una sola resistenza sul modulo decide quanta corrente passa nei LED, e da Arduino arrivano solo gli ordini: quale riga cambiare e con quali LED accesi.

Parola nuova: multiplexingAccendere a turno, molto velocemente, parti diverse di un display. Servono meno fili e meno corrente, e l'occhio non si accorge del trucco. Lo usano anche i display a 7 segmenti della guida n. 53.

3Salda il pettine e gira il modulo

Salda il pettine ad angolo sui cinque fori del lato IN, quello con DIN, con i pin che escono di lato, verso l'esterno (guida n. 70). Il pettine dritto serve sul lato OUT solo se un giorno vorrai attaccare un secondo modulo.

Il modulo MAX7219 8×8: tienilo con l'ingresso a destra→INOUT→MHVCCVCCGNDGNDDOUTDINCSCSCLKCLK← OUTIN ←CLKCSDINGNDVCCdavantidietroingresso (IN) a destragirato dall'alto in bassoscritte capovolte: va bene cosìinformaticait.it

Poi tieni il modulo con l'ingresso a destra. Le scritte «→IN» e «OUT→» del circuito stampato restano a testa in giù, ed è giusto così: la documentazione della libreria che useremo dice proprio che questi moduli vanno tenuti con il lato DIN a destra e che le scritte possono apparire capovolte.

4Collega i cinque fili

I collegamenti: cinque fili, nessuna resistenzaSCLSDAAREFGND131211109876543210IOREFRESET3.3V5VGNDGNDVINDIGITAL (PWM ~)POWERANALOG INUNO→INOUT→modulo MAX7219 (davanti)i cinque filiCLK → pin 13CS → pin 10DIN → pin 11GND → GNDVCC → 5Vinformaticait.it
  • VCC al 5V e GND al GND: il chip lavora tra 4 e 5,5 V.
  • DIN al pin 11 e CLK al 13: sono i pin dell'SPI di Arduino UNO, il collegamento veloce che la libreria usa per mandare i dati, e non si possono cambiare.
  • CS al pin 10. Questo invece puoi spostarlo, basta scrivere il nuovo numero nello sketch.

5Installa la libreria

Nel gestore librerie cerca MD_MAX72XX di majicDesigns e installala; già che ci sei, installa anche MD_Parola dello stesso autore, che servirà alla fine. Se durante la compilazione compare INFO: ARDUINO SPI interface selected, non preoccuparti: è un avviso che la libreria stampa sempre, non un errore.

6Disegna una faccina

Una figura in otto numeri: 1 acceso, 0 spento76543210bit00b0011110010b0100001020b1010010130b1000000140b1010010150b1001100160b0100001070b00111100riganello sketchinformaticait.it

Ogni riga della matrice è un numero di otto cifre binarie, scritto con 0b davanti: 1 è un LED acceso, 0 uno spento, e la cifra a sinistra è il LED a sinistra. Otto numeri, dall'alto in basso, fanno una figura.

// Matrice 8x8 con il MAX7219: una faccina e un cuore, disegnati riga per riga.
// Libreria: MD_MAX72XX di majicDesigns.
#include <Arduino.h>
#include <MD_MAX72xx.h>

// DIN al pin 11 e CLK al 13 (sono fissi), CS al 10
MD_MAX72XX matrice(MD_MAX72XX::FC16_HW, 10, 1);   // tipo di modulo, pin CS, matrici

// otto numeri, uno per riga dall'alto: 1 = LED acceso, 0 = spento
const byte FACCINA[8] = {
  0b00111100,
  0b01000010,
  0b10100101,
  0b10000001,
  0b10100101,
  0b10011001,
  0b01000010,
  0b00111100,
};
const byte CUORE[8] = {
  0b00000000,
  0b01100110,
  0b11111111,
  0b11111111,
  0b01111110,
  0b00111100,
  0b00011000,
  0b00000000,
};

void disegna(const byte figura[8]) {
  for (byte riga = 0; riga < 8; riga++) {
    matrice.setRow(riga, figura[riga]);   // il bit a sinistra è il LED a sinistra
  }
}

void setup() {
  matrice.begin();
  matrice.control(MD_MAX72XX::INTENSITY, 2);   // luminosità da 0 a 15
}

void loop() {
  disegna(FACCINA);
  delay(2000);
  disegna(CUORE);
  delay(2000);
}

setRow(riga, numero) accende i LED di una riga; INTENSITY regola la luminosità da 0 a 15. FC16_HW dice alla libreria com'è collegata la matrice al chip.

✓ Cosa devi vedereLa faccina sorride per due secondi, poi c'è un cuore, poi di nuovo la faccina.
Se non funziona
  • Tutto spento: VCC è sul 5V? DIN e CLK sono sui pin 11 e 13, non scambiati? I cavetti sono sul lato IN?
  • Faccina a testa in giù: gira il modulo di mezzo giro, con il pettine IN a destra.
  • Figura a pezzi o di traverso: il tuo modulo collega i LED al chip in un altro modo. Al posto di FC16_HW prova GENERIC_HW, poi PAROLA_HW e ICSTATION_HW: l'autore della libreria consiglia di provarli uno dopo l'altro, e non si rompe niente.

7Luminosità e corrente

Il MAX7219 regola la luce accendendo i LED per una parte del tempo: con INTENSITY a 0 restano accesi per 1/32 del giro, con 15 per 31/32 (datasheet). Anche a 0 quindi non si spengono del tutto.

  • Con tutti i LED accesi alla corrente massima consigliata, 40 mA, il datasheet indica 330 mA tipici per ogni chip. Quanta corrente passa davvero nel tuo modulo dipende dalla resistenza montata, e chi lo produce non la dichiara.
  • Arduino alimentato dalla porta USB del computer ha a disposizione di solito non più di 500 mA. Con quattro matrici tutte accese al massimo si potrebbe arrivare a 4 × 330 = 1,32 A (calcolo nostro, caso peggiore).
  • Per questo negli sketch la luminosità è bassa, 2 e 1: si vede bene e la porta USB regge. Per una scritta grande e luminosa usa un alimentatore da 5 V a parte per i moduli, con il GND unito a quello di Arduino, come consiglia l'autore della libreria e come nella guida n. 82.

8La scritta che scorre

Il modulo da quattro matrici ha quattro MAX7219 in fila, ognuno passa i dati al successivo. Si collega con gli stessi cinque fili al pettine di destra, quello d'ingresso. La libreria conta le matrici da destra: la numero 0 è quella attaccata ad Arduino.

Il modulo da quattro matrici: 32 × 8 LEDmatrice 0matrice 1matrice 2matrice 3quella collegata ad Arduinola scritta scorre verso sinistraINinformaticait.it
// Una scritta che scorre sul modulo da quattro matrici (32 x 8 LED).
// Librerie: MD_Parola e MD_MAX72XX di majicDesigns.
#include <Arduino.h>
#include <MD_Parola.h>

// DIN al pin 11, CLK al 13, CS al 10, come per la matrice singola
MD_Parola scritta(MD_MAX72XX::FC16_HW, 10, 4);   // tipo di modulo, pin CS, matrici

void setup() {
  scritta.begin();
  scritta.setIntensity(1);                                   // da 0 a 15
  scritta.displayScroll("Ciao da Arduino!", PA_LEFT, PA_SCROLL_LEFT, 50);
}

void loop() {
  if (scritta.displayAnimate()) {   // vero quando la scritta è uscita tutta
    scritta.displayReset();         // e allora riparte da destra
  }
}

displayScroll prepara la scritta: allineamento, effetto e velocità, cioè i millesimi di secondo tra un passo e l'altro (più è basso, più corre). displayAnimate() va chiamata di continuo nel loop, senza delay: è lei che sposta le lettere al momento giusto.

✓ Cosa devi vedere«Ciao da Arduino!» entra da destra, attraversa le quattro matrici ed esce a sinistra, poi ricomincia.
Se non funziona
  • Lettere a testa in giù: il pettine d'ingresso dev'essere a destra. È l'errore che l'autore della libreria vede più spesso.
  • Scritta tagliata o ripetuta a pezzi: nella riga MD_Parola scritta(...) l'ultimo numero dev'essere 4.
  • Lettere accentate che escono strane: la libreria ha un esempio apposta (Parola_UFT-8_Display); per cominciare scrivi senza accenti.

9E con l'ESP32?

Con l'ESP32 il modulo non va collegato direttamente. Il MAX7219 vuole da 4 a 5,5 V e riconosce di sicuro un «1» sui fili dei dati solo da 3,5 V in su (datasheet): i 3,3 V dell'ESP32 stanno sotto. Servono il modulo a 5 V e un traslatore di livello su DIN, CLK e CS (guida n. 21). Per i circuiti a 3 V Analog Devices indica un altro chip, il MAX6951. Con Arduino UNO, che lavora a 5 V, questi problemi non ci sono: per questo la guida usa l'UNO.

Prova tu
  • Disegna una freccia, la tua iniziale o una faccina triste: cambia gli otto numeri.
  • Fai lampeggiare il cuore con matrice.clear() e due pause.
  • Cambia la scritta e la velocità, da 20 a 100.
✓ Cosa hai imparato
  • il MAX7219 accende a turno le righe, così in fretta che non si vede;
  • ogni riga è un numero di otto bit, 1 acceso e 0 spento;
  • i moduli si tengono con l'ingresso a destra e si contano da destra.
Fonti: Analog Devices (Maxim Integrated), MAX7219/MAX7221 Serially Interfaced, 8-Digit LED Display Drivers, datasheet 19-4452 Rev 6 (8/2021) · majicDesigns (Marco Colli), librerie MD_MAX72XX 3.5.1 e MD_Parola 3.7.5: documentazione (FC-16 Module, System Connections, coordinate) ed esempi; blog arduinoplusplus, «Parola A to Z» · Arduino, documentazione dei pin di alimentazione della UNO · Guide informaticait n. 21, 53, 70 e 82

Prodotti utili

Altre guide

Tutte le nostre guide →
Caricamento in corso ...
Torna all'inizio