Schéma de câblage
Malgré l'utilisation d'un bus de type SPI, la communication est unidirectionnelle (maître vers esclave uniquement). Le pilotage d'un MAX7219/MAX7221 ne nécessite donc que trois signaux :
- DIN : entrée de données série ;
- LOAD (/CS) : entrée de validation des données ;
- CLK : entrée d'horloge.
À noter que les afficheurs 7 segments doivent impérativement être à cathode commune tels que les Liteon LTS-547AHR, Kingbright SC04-11EWA ou Vishay TDSR1360.
Configuration du bus SPI
Le bus SPI doit être configuré en mode 0 (polarité et phase de l'horloge à 0 au repos) comme indiqué par le diagramme des timings ci-dessous :
Pilotage du ciruit
Format des données
La communication avec le MAX7219/MAX7221 se fait à l'aide de données série 16 bits. Les 8 bits de poids fort identifient l'adresse du registre visé tandis que les 8 bits de poids faible indiquent la valeur à affecter au registre.
Registres
Le pilotage du MAX7219/MAX7221 se fait en écrivant des valeurs dans différents registres, chacun ayant un rôle bien déterminé.
Allumage / extinction
Le MAX7219/MAX7221 peut être allumé ou éteint via le registre Shutdown.
Mode de décodage
Le MAX7219/MAX7221 propose deux modes de fonctionnement, avec ou sans décodage des valeurs. Le mode de décodage est configurable digit par digit via le registre Decode Mode.
Avec décodage
Avec décodage des valeurs, le MAX7219/MAX7221 affiche des caractères prédéfinis selon le tableau ci-dessous.
Sans décodage
Sans décodage, chaque bit correspond à un segment. Si le bit est à 0, le segment correspondant est éteint. Si le bit est à 1, le segment correspondant est allumé. Les correspondances bit / segment sont détaillées dans le tableau ci-dessous.
Avec ou sans décodage ?
Si on souhaite afficher un caractère de la liste des caractères prédéfinis ci-dessus, il est plus simple de recourir au mode avec décodage. Par contre si on souhaite afficher un caractère non défini dans cette liste, le mode sans décodage s'impose.
Par exemple, si on souhaite afficher le caractère 2 sur le digit 0, il est nécessaire d'allumer les segments A, B, D, E et G :
En utilisant le mode avec décodage, affecter une valeur à un digit est on ne peut plus naturel : pour afficher le caractère 2 sur le digit 0, on écrit la valeur 2 dans le registre Digit 0.
Si malgré tout on préfère utiliser le mode sans décodage, afficher le caractère 2 sur le digit 0 revient à allumer les segments A, B, D, E et G en écrivant la valeur 0b01101101 dans le registre Digit 0, chaque bit à 1 correspondant à un segment allumé. Il faut admettre que c'est beaucoup moins naturel...
Intensité lumineuse
L'intensité lumineuse des segments ou LEDs est ajustable via le registre Intensity. Si le premier niveau est à peine lisible en intérieur avec éclairage naturel, le dernier l'est bien plus sans pour autant éblouir. À chacun d'affiner ce paramètre en fonction de ses conditions d'utilisation et contraintes de consommation électrique.
Nombre de digits
Le nombre de digits pilotés par le MAX7219/MAX7221 est configurable via le registre Scan Limit, de 0 à 8 digits.
Test de l'affichage
Le MAX7219/MAX7221 offre un mode de test permettant d'allumer tous les segments ou toutes les LEDs via le registre Display Test. Ce mode permet à la fois de tester le fonctionnement du MAX7219 et celui de l'affichage.
Utilisation typique
Une utilisation typique d'un MAX7219/MAX7221 pourrait consister à afficher les caractères 0 à 7 respectivement sur les digits 0 à 7, le tout en réglant la luminosité au maximum et en activant le décodage sur tous les digits.
La procédure est la suivante :
- Réglage du nombre de digits mis en œuvre :
Scan Limit (0x0B) = 0x07. - Réglage de la luminosité :
Intensity (0x0A) = 0x0F. - Activation du décodage :
Decode Mode (0x09) = 0xFF. - Écriture des valeurs des digits 0 à 7 :
Digit 0 (0x01) = 0x00, [...], Digit 7 (0x08) = 0x07. - Allumage de l'affichage :
Shutdown (0x0C)= 0x01.
En avant les projets !
En espérant que cette découverte des contrôleurs d'affichage MAX7219 et MAX7221 ait donné envie de les exploiter, quelques exemples d'utilisation suivront : pilotage d'un MAX7219 à l'aide du Bus Pirate, d'Arduino, etc...