Tutorials - Elettronica

 
 

MAX7219- MAX7221


Un controller per display LED.

MAX7219 di Maxim è stato progettato per controllare display a LED a segmenti o matrice di punti.

In effetti il foglio dati tratta due componenti: MAX7219, con interfaccia seriale sincrona e MAX7221, identico, ma con interfaccia compatibile SPI/QSPI/Microwire e con la limitazione dello slew rate per minimizzare i disturbi elettromagnetici dovuti alla commutazione delle uscite..

Entrambi possono 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.

L' ordine fisico dei digit è arbitrario e dipende dai collegamenti.

I dati, raccolti in pacchetti da 16 bit, sono inviati al controller sulla linea DIN e sono accettati sul fronte di salita del segnale di clock CLK. Per il MAX7219 lo stato del pin LOAD è indifferente, ma i dati inviati sono caricati nei registri interni sul fronte di salita del segnale applicato a LOAD.
Per il MAX7221 il pin LOAD diventa un CS e l' accesso al chip è possibile solo quando questo pin è a livello basso; anche per MAX7221  i dati inviati sono caricati nei registri interni sul fronte di salita del segnale applicato a  CS.

I pacchetti di bit sono inviati a partire dal più significativo e sono composti da un indirizzo a 8 bit e 8 di dato vero e proprio.

Dato che gli indirizzi dei registri interni vanno solo da 0 a Fh, i primi 4 bit (D15:12) non sono considerati e possono assumere qualsiasi valore.


I registri.

I registri interni sono la chiave del funzionamento del controller. Sono accessibili 16 registri, di cui due non sono utilizzati:

Registro Indirizzo hex hex
recc.
Descrizione Valore dato
D15
-12
D11 D10 D9 D8
Nop x 0 0 0 0 x0h 0h nessuna operazione -
Digit 0 x 0 0 0 1 x1h 11h Digit 0 0h-Fh
Digit 1 x 0 0 1 0 x2h 12h   0h-Fh
Digit 2 x 0 0 1 1 x3h 13h   0h-Fh
Digit 3 x 0 1 0 0 x4h 14h   0h-Fh
Digit 4 x 0 1 0 1 x5h 15h   0h-Fh
Digit 5 x 0 1 1 0 x6h 16h   0h-Fh
Digit 6 x 0 1 1 1 x7h 17h   0h-Fh
Digit 7 x 1 0 0 0 x8h 18h Digit 7 0h-Fh
Decode x 1 0 0 1 x9h 19h Per ogni digit:
- 1 attiva il code-B
- 0 disattiva la codifica
0-FFh
Intensity x 1 0 1 0 xAh 1Ah Intensità luminosa (16 livelli)  0-Fh
Scan Limit x 1 0 1 1 xBh 1Bh Limite scansione (8 valori). 0-8
Shutdown x 1 1 0 0 xCh 1Ch 1 - modo normale
0 - modo shutdown
0-1
nd x         xDh - non utilizzato -
nd x         xEh - non utilizzato -
Test x 1 1 1 1 xFh 1Fh 1 - tutti i LED on
0 - disabilita test
0-1

Gli indirizzi dei registri vanno da 00h a 0Fh, ma, dato che i 4 bit maggiori dell' indirizzo non sono considerati, 10h, 20h, 30h, ecc. fino a F0h sono equivalenti, come 24h, 34h, 54h, e così via. 
Nell' AN876, Maxim raccomanda l'uso dei valori indicati nella colonna hex recc.

Per ogni indirizzo, che corrisponde al controllo di una funzione, va inviato immediatamente il relativo dato.

Registro 0 : NOP
Qualunque dato inviato a questo registro non produce alcuna operazione.
Questo viene utilizzato nel caso in cui siano collegati i cascata più controller, collegando il pin DOUT con il DIN del successivo chip. I pin LOAD/CS sono collegati assieme, come pure il clock CLK.
Così, ad esempio, avendo 4 controller in cascata e volendo scrivere sul quarto, si invieranno i 16 bit voluti e tre NOP. Quando LOAD/CS passerà da livello baso a livello alto, nei primi tre controller sarà caricato il NOP e il dato voluto sarà caricato nel quarto.
Qui sotto un esempio di connessione in cascata di due controller


Registro 1-8 : Digit

In modo code-B i LED sono raccolti a gruppi di 8 con la possibilità di comandare un digit a 7 segmenti + punto decimale.
Ogni registro dati contiene il valore attribuito ai LED. Il valore da inviare come dato corrisponde al simbolo che si vuole visualizzare.

Il punto decimale è comandato dal bit 7.

Anche se si utilizzano LED singoli o altri elementi di visualizzazione, i dati inviati sono conservati nelle celle di memoria a gruppi di 8. 

Il valore da inviare come dato corrisponde ai LED che si vogliono accesi (1 = acceso, 0= spento).


Registro 9 : Decode

Ogni bit a 1 fa si che il digit corrispondente sia codificato. Se il bit è a 0 la codifica è disabilitata.

 

Registro 10 : Intensity

Il dato inviato a questo registro modifica il duty cicle e quindi la luminosità del display. MAX7219 e 7221 hanno un diverso comportamento. La frequenza di scansione tipica è 800Hz.

 
Registro 11 : Scan Limit

Il dato inviato al registro limita la scansione dei digit. In questo modo si può accendere solamente una parte dei LED.

Va notato che la limitazione dei digit influisce sulla luminosità.
La funzione è utile nel caso di controllo di matrici di punti affinché il controller non mandi inutilmente dati ad una colonna inesistente.

 

Registro 12 : Shutdown
Caricando 1 in questo registro il modo shutdown è disabilitato e il display è visibile normalmente.
Caricando 0, si abilita lo shutdown; il display è spento, ma i dati sono conservati e il controller riceve i comandi inviati sulla linea di comunicazione seriale.
Il modo shutdown può essere usato per condizioni di basso consumo o anche per far lampeggiare l'intero display.
Il controller resta nel modo scelto fino a che il registro non è modificato.
 

Registro 13-14 : non utilizzati
dati inviati a questi indirizzi non hanno effetto.


Registro 16 : Test

Portando a 1 il contenuto del registro, si attiva il modo test: tutti i LED sono accesi alla massima luminosità, ma i dati conservati nei registri non vengono modificati.
Portando il registro a 0 si ritorna al modo normale.
Il controller resta nel modo scelto fino a che il registro non è modificato.

All'arrivo dell' alimentazione il controller si predispone in modo shutdown, con la scansione limitata ad 1 digit, modo non decodificato e l'intensità al valore minimo.
Quindi, dopo il power on, occorre inizializzare il controller per la modalità desiderata. 


Le temporizzazioni dell' interfaccia.

Dal punto di vista delle temporizzazioni dei segnali, abbiamo la seguente situazione:

I tempi limite (in ns) sono riportati nella seguente tabella:

Segnale  Simbolo min
CLK pulse low tcl 50
CLK pulse high tch 50
DIN setup time tds 25
DIN hold time tdh 0
CLK to LOAD rise hold time tcsh 0
LOAD to nesxt CLK tldck 50
LOAD pulse high tcsw 50

Possiamo osservare che si tratta di tempi molto brevi, che non richiedono particolare attenzione per microcontroller con clock anche di 40MHz (in cui il ciclo istruzione è 100ns). 

Il collegamento potrà essere effettuato con 3 qualsiasi pin del microcontroller, ma anche utilizzando la modalità SPI del modulo MSSP; in quest'ultima applicazione MAX7221 è più consigliato.

Maggiore è la velocità a cui si intendono inviare dati, minore dovrà essere la lunghezza del cavo di collegamento tra I/O del micro e il MAX7219. Cavi troppo lunghi caricano capacitivamente le linee, deformando i fronti di commutazione dei segnali e richiedono una riduzione della velocità del clock della comunicazione.


Regolazione della corrente nei LED.

La corrente nei LED è circa 100 volte la corrente nel pin ISET. Modificando il valore della Rset è possibile cambiare questa corrente.

Si sconsiglia di superare i 40mA per LED; se sono necessarie correnti maggiore occorrerà inserire buffer esterni. In ogni caso la corrente complessiva massima (tutti i LED accesi) non dovrà superare 330mA.
La corrente che alimenta i LED transita nel controller e quindi è necessario considerare anche la massima dissipazione possibile per package del componente (al massimo circa 1W per la versione DIP e circa 940mW per la versione SO). La formula per valutare la potenza è:

PD = (V + x8mA) + (V+ - Vled) (DUTY x Iseg x N)

dove V+ è la tensione di alimentazione (da 4 a 5.5V), DUTY è il duty cycle impostato nel registro di intensità, N è il numero dei segmenti (caso peggiore 8), Vled è la tensione di conduzione dei LED e Iseg è la corrente impostata con Rset
Occorrerà fare si che la potenza dissipata non faccia superare al chip la temperatura di lavoro prevista.

Va considerato anche che la riduzione della scansione a tre digit o meno porta ad una eccessiva dissipazione. 

Quindi occorrerà regolare la Rset in modo da aggiustare la corrente in funzione del numero di digit. La tabella a lato da una indicazione delle correnti massime ammesse.

Il foglio dati riporta i parametri ed i valori limite per la valutazione della dissipazione.


Note.

MAX7219 non è un componente economico. Il mercato cinese rende disponibili cloni, costruiti in nelle tante foundries cinesi, e che hanno un costo quanto mai minore dell' originale. In rete è possibile trovare svariati riferimenti.
Da quanto si rileva, si tratta di integrati diversamente progettati e realizzati, ma che svolgono le stesse funzioni del MAX7219, del quale riportano la sigla. Da prove effettuate su alcuni di questi cloni, non sono risultati mal funzionamenti rispetto all'originale. 
Se si sta sperimentando o semplicemente non si hanno molti soldi, l'opzione più economica è da provare (anche se probabilmente si sta sostenendo un settore che eticamente non dovrebbe esistere).
Se si tratta di lavoro, è consigliabile verificare a fondo i cloni scelti o, per essere sicuri del risultato a lungo termine, utilizzare gli originali.

In relazione al costo è utile sapere che AMS (AustriaMicroSystems) produce l' integrato AS1107 che è direttamente compatibile con MAX7221/7219 ed ha un costo minore di quello di Maxim.


Documentazione.

 

Copyright © afg. Tutti i diritti riservati.
Aggiornato il 27/08/15.