Le module MAX7219 - matrice LED 8x8

publication: 17 juin 2022 / mis à jour 21 juin 2022

Read this page in english

 

Appel à collaboration

Vous développez des montages, simples ou complexes avec ESP32 et ESP32forth.

Partagez-les ici sur ce site.

ESP32forth ne pourra se développer qu'avec la collaboration active de toutes les bonnes volontés.

Vos montages peuvent aider d'autres développeurs.

Les montages des autres développeurs peuvent vous aider.

Pour proposer un article ou un montage, cliquez ici


La matrice LED 8x8

Voici notre matrice à LEDs 8x8:

La matrice LEDs 8x8

L'afficheur est consitué de 8 rangées de 8 leds, soit un total de 64 LEDs.

Au dos de l'afficheur, 5 connecteurs à droite et 5 connecteurs à gauche. Tous les connecteurs portent les mêmes indications, excepté le 3ème connecteur qui est marqué DIN à droite, DOUT à gauche.

Signification des connecteurs:

Avec les seuls connecteurs DIN, CS et CLK nous devons gérer les 64 LEDs de cet afficheur...

Caractéristiques de l'afficheur 8x8

Pour utiliser un afficheur 8x8 LEDs sur votre carte ESP32, il faut disposer d'une alimentation 5V annexe.

Le connecteur GND de l'afficheur 8x8 LEDs doit être relié à une borne GND de la carte ESP32.

L'afficheur est piloté par un circuit référencé MAX7219. Ce composant dispose de 2x huit sorties parrallèles gérant la matrice de LEDs. Il dispose également d'un interface de communication série de type SPI (Serial Peripheral Interface), interface dont nous verrons les caractéristiques plus loin.

Aucune indication sur l'afficheur ne permet de déterminer dans quel sens orienter cet afficheur.

Certains articles sur Internet montrent qu'il est possible de mettre en série plusieurs afficheurs 8x8 LEDs:

Raccordement en série de deux matrices 8x8

N'ayant à disposition qu'un seul afficheur LED 8x8, il nous est impossible de tester le raccordement de plusieurs matrices LEDs 8x8 en série.

Nous allons considérer que le bas de l'afficheur correspond aux connecteurs d'entrée, placés en bas. Les cinq connecteurs de sortie sont placés en haut.

Connexion à la carte ESP32

8x8 LED
matrix
ESP32
VCCext. +5V
GNDGND
DINMOSI
CSSS
CLKSCK
DOUT*MISO

* en option - la sortie DOUT est connectée:

La puce MAX7219

C'est une puce intégrée à notre afficheur LED 8x8.

La puce MAX7219 divise un ensemble de 64 LEDs en huit colonnes («chiffres») de huit LEDs chacune. Les colonnes sont numérotées de 1 à 8 et chaque LED d'une colonne est représentée par un seul bit dans le registre de cette colonne.

Spécification de la matrice LED

Tension de fonctionnement: DC 4.7V – 5.3V

Tension typique: 5V

Courant opérationnel: 320mA

Courant max: 2A

Température de fonctionnement: 0 ℃ – 50 ℃

Température typique: 25 ℃

Organisation de la matrice

Chaque rangée correspond à une adresse. Chaque adresse peut recevoir un octet dans l'intervalle hexadécimal [00..ff].

Chaque colonne correspond à un bit dans l'octet transmis comme donnée.

organisation de la matrice 8x8

Donc, l'allumage d'une rangée sera effectué en transmettant deux octets:

Serial-Data Format (16 Bits)

Voici comment sont organisées addr data:

D15D14D13D12 D11D10D9D8 D7D6D5D4 D3D2D1D0
XXXX ADDRESS MSB --- DATA --- LSB

Les adresses $0d et $0e ne sont pas exploitées.

Voici les actions effectuées par les adresses addr:

REGISTER ADDRESS HEX
CODE
D15
D12
D11D10D9D8
No-OpX 0000 $00
Digit 0X 0001 $01
Digit 1X 0010 $02
Digit 2X 0011 $03
Digit 3X 0100 $04
Digit 4X 0101 $05
Digit 5X 0110 $06
Digit 6X 0111 $07
Digit 7X 1000 $08
Decode ModeX 1001 $09
IntensityX 1010 $0a
Scan LimitX 1011 $0b
ShutdownX 1100 $0c
 
Display TestX 1111 $0f

Voici les mots permettant de gérer la matrice LED 8x8 via le module MAX7219:

Le mot MAX7219.send transmet deux octets vers le module MAX7219:

\ send two bytes to MAX7219 thru SPI port 
: MAX7219.send ( c1 c2 -- ) 
    MAX7219.select 
    swap SPI.write SPI.write 
    MAX7219.deselect 
  ; 

Les mots MAX7219.normal et MAX7219.shutdown permettent respectivement d'utiliser le mode d'affichage normal ou désactivé:

: MAX7219.normal   ( -- )  
    $0c $01 MAX7219.send  
  ; 
: MAX7219.shutdown ( -- )  
    $0c $00 MAX7219.send 
  ; 

Les mots MAX7219.test.on et MAX7219.test.off permettent d'activer ou désactiver le mode test des LEDs:

: MAX7219.test.on  ( -- )  
    $0f $01 MAX7219.send  
  ; 
: MAX7219.test.off ( -- )  
    $0f $00 MAX7219.send  
  ; 
MODE ADDRESS
CODE
REGISTER DATA
D7D6D5D4 D3D2D1D0
Shutdown Mode XXXXXXXX0
Normal Operation XXXXXXXX1

Le mot MAX7219.intensity permet de régler l'intensité des LEDs en mode affichage normal. Ce réglage agit sur l'ensemble des LEDs de la matrice 8x8.

: MAX7219.intensity  ( c -- )   
    $0a swap MAX7219.send  
  ; 

Le mot MAX7219.decode permet de sélectionner le mode de décodage du module MAX7219.

: MAX7219.decode     ( c -- )   
    $09 swap MAX7219.send  
  ; 

Le mot MAX7219.scan.limit permet de limiter l'action sur seulement certaines rangées de LEDs.

: MAX7219.scan.limit ( c -- )   
    $0b swap MAX7219.send  
  ; 
SCAN LIMIT REGISTER DATA HEX
CODE
D7D6D5D4D3D2D1D0
Display digit 0 only XXXXX 000 $00
Display digits 0 & 1 XXXXX 001 $01
Display digits 0 1 2 XXXXX 010 $01
Display digits 0 1 2 3 XXXXX 011 $03
Display digits 0 1 2 3 4 XXXXX 100 $04
Display digits 0 1 2 3 4 5 XXXXX 101 $05
Display digits 0 1 2 3 4 5 6 XXXXX 110 $06
Display digits 0 1 2 3 4 5 6 7 XXXXX 111 $07

Et enfin, le mot MAX7219.set.digit

: MAX7219.set.digit  ( cbits cdigit -- )  
    swap MAX7219.send  
  ; 

Ce mot est utilisé dans les exemples de test d'affichage ci-après.

Quelques tests d'affichage

Le mot disp-test-1 permet de tester l'affichage des LEds de la matrice 8x8:

\ all LEDs on full, 232mA needed 
: disp-test-1 ( -- )  
    init.VSPI 
    MAX7219.test.on 
    begin key? until 
    MAX7219.test.off 
    SPI.end 
  ; 

Voici ce que donne l'exécution du mot disp-test-1:

L'exécution est interrompue en appuyant sur une touche du clavier.

Le mot disp-test-2 allume les 4 LEDs de gauche de la première rangée:

\ left 4 LEDs on first row, 42mA needed 
: disp-test-2 ( -- )  
    init.VSPI 
    MAX7219.normal 
    $03 MAX7219.intensity 
    $00 MAX7219.scan.limit 
    $f0 $01 MAX7219.set.digit 
    begin key? until 
    MAX7219.shutdown 
    SPI.end 
  ; 

Voici ce que donne l'exécution du mot disp-test-2:

L'exécution est interrompue en appuyant sur une touche du clavier.

Le mot disp-test-3 affiche un caractère smiley:

\ draw face, 18mA needed 
: disp-test-3 ( -- )  
    init.VSPI 
    MAX7219.normal 
    $01 MAX7219.intensity 
    $07 MAX7219.scan.limit 
    $00 MAX7219.decode 
    [ 2 base ! ] 
    00000000 $01 MAX7219.set.digit 
    01100110 $02 MAX7219.set.digit 
    00000000 $03 MAX7219.set.digit 
    00011000 $04 MAX7219.set.digit 
    00011000 $05 MAX7219.set.digit 
    10000001 $06 MAX7219.set.digit 
    01000010 $07 MAX7219.set.digit 
    00111100 $08 MAX7219.set.digit 
    [ decimal ] 
    begin key? until 
    MAX7219.shutdown 
    SPI.end 
  ; 

Voici ce que donne l'exécution du mot disp-test-3:

L'exécution est interrompue en appuyant sur une touche du clavier.


Legal: site web personnel sans commerce / personal site without seling