Mention légal| Contact

MAX 7219

Comprendre le MAX 7219

Le MAX 7219 est un circuit intégré permettant le contrôle d'afficheur sept segments jusqu'à huit digits et de matrices à leds.

L’aspect le plus important du MAX 7219 est de pouvoir être contrôlé par un bus compatible SPI, QSPI et MICROWIRE. N'utilisant que trois fils pour la communication, il permet ainsi de libérer des sorties de la carte Arduino pour d'autres usages.

Tout d’abord, je commencerai par détailler le fonctionnement  du MAX 7219  à l’aide du "datasheet". Ensuite, je vous proposerai la librairie « SPI .h » et « LedControl.h »  pour l'exploiter dans vos programmes.

Exploiter le DATASHEET.

Le "datasheet" est un document (pdf) fourni par le fabriquant du composant dans lequel nous y trouverons toutes les explications nous permettant son exploitation. Nous nous appuierons donc sur ce document et les tableaux qui y sont représentés. Vous verrez par conséquent, comment lire un "datasheet".

Le format de transmission des données série du MAX 7219

En premier lieu le MAX 7219 utilise un format de transmission sur 16Bits  de D0 à D15 représenté par le tableau ci-dessous.

Vous y observerez de gauche à droite:

  • Les huit premiers bit de D0 à D7 pour des données (data). D0 étant le bit, dit de poids faible (LSB) et D7 le bit de poids fort (MSB).
  • Les quatre prochains bits de D8 à D11 sont utilisés pour les adresses (registre).
  • Les quatre bits de D12 à D15 restent par contre inexploités.

Ainsi, le MAX 7219 utilise 14 registres de 0xX0 à 0xXF représentés dans le tableau (N°) ci- dessous. Le registre OxXD n’étant pas exploité.

Tableau des adresses de registre

Commençons par examiner les registres « «DIGIT0 » à « DIGIT7 » représentés en hexadécimale de 0xX1 à 0xX8. En fait, ces huit registres permettent d’affecter une donnée à chaque Digit. Vous observerez qu'il y a aussi des fonctions spécifiques.

Les fonctions du MAX 7219.

1) La fonction "decode mode" - "0xx9".

Commençons par  le registre "decode Mode" "0xX9", il permet d'activer le code "B font". Le code B s'active sur les digits de votre choix en y inscrivant un bit à 1. Le tableau 4 ci-dessous, nous donne quelques exemples d'activation du  "decode mode". 

002-max7219

Il suffit de prendre pour exemple la deuxième ligne du tableau pour comprendre comment activer le code B. L'activation à 1 du digit 0 de l'afficheur par la donnée 0x01(héxa.) implique que seul le digit 0 sera en code B. Les sept autres digits à 0 de l'affichage ne seront pas gérés par le code B.

Par exemple, si l'on souhaite activer le code B seulement au digit quatre (4), cela nous donnera en binaire et respectivement au tableau ceci: 0001 0000 soit en hexadécimale 0x10. Nous avons donc la donnée utile à renseigner au registre "decode mode" "0xX9" pour activer le code B au digit 4 "D4". Bien-sûr, vous remarquerez que cette donnée est la suivante après 0x0f.

Qu'est-ce que le "code B" ?

Pour comprendre le code B, il faut tout d’abord savoir que c'est une fonction interne au MAX 7219 qui décode les données d'affichage selon un tableau prédéfini et représenté ci-dessous.

001-max7219

Plus précisément ce tableau nous montre comment, en fonction du registre appelé correspondant à un caractère , le MAX 7219 va activer les segments pour afficher les chiffres et caractères inscrits dans le tableau du code B .

Ainsi, chaque donnée d'affichage d'un caractère présent dans ce tableau sera systématiquement décodé, si le mode code B est activé au digit piloté pour l'affichage de la donnée qu'il reçoit .

chiffre quatre sept segmentPrenons le cas de l'envoi de la  donnée du chiffre quatre (4) "0x04" à afficher au digit 0 et activé en "decode Mode", tous les segments correspondant au registre du chiffre 4 seront activés pour afficher 4. Soit les segments B,C,F et G sur l'afficheur sept segments. Comme indiqué par le tableau 5.

A l'inverse, si "décode mode" n'est pas activé, seul le segment E de l'afficheur va s'allumer. Pourquoi ? Car la valeur "0x04" vaut en binaire 0000 0100 et que dans ce cas le MAX 7219 décode l'affichage suivant un mode binaire. On trouve ici un exemple important, à savoir que sans "decode mode" chaque segment est piloté individuellement en fonction du bit à 1. Le tableau 6 ci dessous représente la correspondance des huit segments via les huit bits.

max 7219 sans décode modeEn fait "decode mode" nous simplifie la tâche de façon à ne pas traiter en binaire l'affichage d'un chiffre. Ce qui impliquerait l'envoi de huit données de huit bits les unes après les autres pour piloter chaque segment. Il faut reconnaître que cela serait fastidieux.

En conclusion,  il est possible d'afficher des symboles ou caractères comme le moins "- "ou un "C" en désactivant "decode mode" au digit de notre choix.

2) LA FONCTION "intensity" - "0xXA"

Abordons à présent le registre "intensity" "0xXA". Il permet de définir l'intensité lumineuse de l'afficheur. En fonction du tableau  7, ci-dessous, il peut avoir seize (16) données, sur quatre (4) bits, possible de "0xX0" à "0xXF" (hexa.) allant du plus faible éclairage au plus fort.

003-max7219

LA FONCTION "scan limit" - "OxXB"

Passons ensuite au registre "scan limit" "OxXB" Il a pour rôle de définir le nombre de digits que l'on souhaite exploiter de digit0 à digit8. En fonction du tableau 8 ci-dessous, il peut prendre huit (8) données sur trois (3) bits allant de 0xX0 à 0xX7 sélectionnant ainsi les digits de droite à gauche.

004-max7219

Il faut souligner que le digit 0 sera toujours le minimum configurable et à juste titre, car il ne serait pas logique d'utiliser cette fonction pour une extinction générale alors qu'une fonction de ce type existe.

3) LA FONCTION "shutdown" - "OxXC".

Le registre "shutdown" "OxXC".  Il permet d'allumer ou d’éteindre l'afficheur. Suivant le tableau trois (3) ci-dessous? il ne prend que deux (2) données sur un (1) bit soit "0xX0" ou "0xX1". A zéro (0) "0xX0" l'afficheur est éteint.

005-max7219

4) LA FONCTION "Display test" - "0xXF"

Et enfin, le registre "Display test" "0xXF", il permet de tester l'afficheur en activant toutes les leds de l'afficheur. En fonction du tableau dix (10)  comme "shutdown", il ne prend que deux (2) données sur un (1) bit soit "0xX0" ou "0xX1". A un (1) le mode test de l'afficheur est activé.

006-max7219

Cependant, il est à noter que le mode test reste activé tant qu'une donnée de désactivation "0xX0" n'est pas renvoyé au registre "0xXF".

Concrètement, nous venons de passer en revue les fonctions de registre ainsi que leurs données d'exploitation.

Mais nous ne savons toujours pas comment les transmettre au MAX.

L'ENVOI DES DONNÉES.

Avant propos: Les données transmises.

Dans nos programmes, il va falloir remplacer le "X" majuscule, dans les données des tableaux, par le chiffre ou la lettre correspondant à la bonne donnée hexadécimale.

Prenons le cas de la donnée "0xX6". En premier lieu, regardons les deux premiers "caractères" "0x", ils indiquent que la donnée et de type HEXADÉCIMALE. Voyons ensuite les deux prochain caractères "X6". Ces derniers sont la transcription hexadécimale d'une donnée en bits. Hors le format Hexadécimale n'accepte pas le terme "X" il va donc falloir le remplacer. Mais par quoi ?

007-max7219

Pour le savoir, il suffit d'utiliser la calculette du "PC" en mode programmeur sur "hexa" et "octet" et de reprendre les bits du tableau, en l’occurrence le sept (7), en cliquant sur les bits affichés en calculette. Avec 0000 0110 on trouve 6, ce qui nous fait "06" car ce format s'écrit sur deux caractères et le premier a par défaut 0, si il n'est pas affiché.

A partir de là "0xX6" devient "0x06".

Toutefois, il sera possible de l'écrire simplement par zéro "0 ou un "1" lorsque la donnée n'est que sur un (1) bit.

Le format d'envoi.

Avant tout chose, elles doivent respecter ce que l'on appelle un format d'envoi. Et c'est donc dans vos programmes que ce format devra être respecté.

Nous venons de voir précédemment qu'il fallait renseigner une adresse et sa donnée pour activer la fonction d'un registre. Il nous faudra donc les envoyer toutes les deux.

Considérons une fonction de transfert de données constituée des deux paramètres utiles "adresse" et "data". (data = données en anglais).

  • void transfert(adresse, data);

Pour une compréhension aisée, prenons par exemple, la fonction "Display test" qui a pour adresse "0xXF",  si l'on souhaite l'activer, il faut donc  inscrire "0xX1" comme donnée.

En conclusion, cela nous donne en paramètre de fonction.

  • void transfert(0x0F, 0x01); //Transfert des données.

La fonction transférera de notre carte Arduino vers le MAX7219,  les données selon le protocole choisi via le port série. Dans notre cas, c'est le SPI que nous utiliserons.

LA COMMUNICATION

LE S.P.I.

Le Max 7219 peut fonctionner avec plusieurs protocoles de communication bus. Mais dans ce tutoriel, nous utiliserons et ne parlerons que du protocole de bus SPI qui transmet les données de la platine Arduino vers le MAX 7219.

Qu'est ce que le SPI "Serial Peripheral Interface" ? C'est une communication sur le principe du maître-esclave. Ce qui veut dire que la transmission des données ne se fait que dans un seul sens du maître vers l'esclave, donc la platine Arduino représente le maître et le MAX 7219 l'esclave. Plusieurs esclaves peuvent être reliés à ce bus série et seront sélectionnés pour réception de données via une ligne prévue à cet effet.

LA LIAISON SPI

Ci-dessous,nous avons le schéma de câblage de la liaison série entre la platine Arduino et le MAX 7219.

shéma MOSIOn observe trois liaisons:

    1. MOSI qui signifie "Master Output Slave INput" est une broche de sortie vers DIN qui est l'entrée de traitement des données série.
    2. I/O est une sortie vers LOAD (CS) qui est l'entrée d'activation de chargement de données.
  1. SCK est une sortie vers CLK qui est l'entrée d' horloge série.

Le choix des différentes broches pour la liaison SPI ne s'est pas fait au hasard. Elles ont été définies par la configuration matérielle de la carte Arduino en fonction du mode SPI. Pour le savoir, il faut consulter la documentation de la carte Arduino pour le mode SPI.

008-max7219

Il existe d'autres broches, de type mâle, facilement reconnaissable pour installé cette liaison.

009-max7219

Premièrement la broche onze (11) MOSI configurée en mode sortie va envoyer les données sous forme de suite de bit zéro(0)-un(1).

Deuxièmement la broche dix (10) I/O configurée en mode sortie, activera le chargement des données dans le MAX.

Et troisièmement la broche treize (13) SCK configurée également en mode sortie, elle synchronisera et cadencera la transmission des données.

Voici la représentation schématique de la transmission au niveau du MAX7219..

010-max7219

C'est ainsi que se passe la transmission en fonction de l'état de chaque entrée du MAX. Vous constaterez qu'il y a aussi DOUT qui est une entrée utilisée pour connecter en série plusieurs MAX7219 ou MAX7221 mais nous ne l'utiliserons pas.

En résumé, la condition de fonctionnement de ce circuit dépend de l'état bas LOAD (CS), de l'envoi des données par MOSI et de leur synchronisation par SCK. Ce schéma illustre bien la transmission des données du  bit de poids fort D15 vers le bit de poids faible D0.

L'exploitation du bus SPI

Tout d’abord pour exploiter le MAX, il va nous falloir configurer notre port série SPI à l'aide de paramètres. Tout comme nous le faisons pour exploiter le port série du moniteur avec la fonction Serial.begin();.

Sauf qu'à la différence du port série moniteur, cela va se faire au travers d'une librairie incluse dans l'IDE de Arduino. Cette librairie s'appelle <SPI.h>

Dans le programme, interviennent plusieurs instructions qu'il va être nécessaire de comprendre.

Les instructions à connaître

include SPI

Cette instruction indique que nous incluons la librairie SPI.

SPI setting

SPISettings est utilisée pour configurer le port SPI, il prend successivement trois paramètres:

    • La vitesse de transmission des données.
    • L'ordre d'envoi des données.
  • Le mode d'envoi.

spi begin transaction SPI

Initialise le bus SPI en utilisant les données  de SPISettings dans notre cas TransferMax7219 .

spi transfert

Transfert des données sous un format  de un (1) octet soit huit (8) bit.

La fonction de transfert de données

Cette tâche étant répétitive, nous avons du créer une fonction de transfert pour dialoguer aisément avec le MAX 7219 dont on fait abondamment usage dans le programme.

fonction de tranfert de données SPI

La fonction prend deux paramètres en considération: le registre auquel on souhaite s'adresser et  la valeur de la donnée.

Exemple:

appel-de-la-fonction

Prenons le cas de l'exemple illustré ci-dessus. On fait appel à la fonction Trsf7219 pour transmettre au registre 0x0A « intensity » la donnée 0x06, soit la valeur 13/32. Ce qui a pour effet de modifier la luminosité de l’afficheur.

Vous savez à présent exploiter l'utilisation des données et leur transmission vers le MAX via la communication SPI. Néanmoins, il existe un moyen plus simple de transférer des données vers le MAX. Ce moyen est une librairie que l'on appelle <LedControl.h>

Utilisation de LedControl

LedControl  est une librairie simple qui offre des fonctions simplifiées de transfert de données vers le MAX7219 rendant ainsi la programmation d'un afficheur sept segments ou d'une matrice plus souple et conviviale. Elle utilise des fonctions sous forme de  texte bien documenté et qui  permettent de réaliser de nombreuses choses.

Les fonctions de bases

Après avoir téléchargé la librairie <ledcontrol.h>, il est nécessaire de l'inclure au programme.

include led controle Ci-dessous LedControl est déclaré par une instance d'un objet et appelé "septSegMax" dans notre programme. Cette fonction prend trois (3) paramètres, définis par le câblage de la platine Arduino et un (1), la dernière valeur correspond  au nombre de contrôleur présent sur le bus.

Instance LED ControleL'objet "septSegMax" servira donc à faire appel aux fonctions fournies par <LedControl.h>.

  • Le premier paramètre définit la broche 10 de l'Arduino comme étant LOAD CS
  • Le deuxième paramètre définit la broche 13 de l'Arduino comme étant CLK
  • Le troisième paramètre définit la broche 11 de l'Arduino comme étant le MOSI
  • Le dernier paramètre correspond au nombre de MAX7219 utilisé. Ici un (1).

Voyons enfin les fonctions de <LedControl.h>

La fonction shutdown();

shutdown LED ControleCette fonction permet d'allumer ou d’éteindre le MAX 7219. Si la valeur est false, le circuit fonctionne normalement et à l'inverse, true le circuit est éteint. Vous constatez de toute évidence que les registres précédemment utilisés ont été remplacés par des fonctions de sorte que leurs noms soient évocateurs à rôle. Dans notre cas, shutdown(paramètre1, paramètre2 ); il faut reconnaître que cela est bien plus simple.

La fonction setIntensity();

Intensité lumineuse SetIntensityVous l'aurez deviné cette fonction permet de définir l'intensité lumineuse de l'afficheur en 16 valeurs différentes; 15 étant notamment  le maximum représentant le nombre de données possible que l'on a vu dans le tableau sept (7).

La fonction clearDisplay();

clearDisplay efface l'afficheurCette fonction éteint l'afficheur et supprime toutes les données précédentes.


fonction AFFICHEUR SEPT SEGMENTS

La fonction setDigit();instruction setDigit 4 paramettreElle prend quatre paramètres:

  • le premier est l'adresse de l'afficheur par défaut toujours à 0.
  • le deuxième est le digit qui a une valeur de 0 à 7.
  • le troisième est la valeur de l'afficheur comprise de 0 à 15 en correspondance hexadécimal (afficher la lettre A vaut 10 et F vaut 15)
  •  le quatrième permet d'afficher le point DP si la valeur est  "true".

La fonction setRow

setrow-led-controleElle prend trois paramètres:

  • le premier est l'adresse de l'afficheur par défaut toujours à 0.
  • le second est le digit en question qui prendre pour valeur de 0 à 7.
  • le troisième est une donnée en octet "B01110111" ou en hexadécimal "0x77". Ce troisième paramètre a pour avantage d'afficher tous les segments que l'on souhaite sur un digit de manière distincte.

icone attention rouge

fonction MATRICE 64 LED

LedControl ne s'aborde pas exactement de la même façon si on travaille en matrice ou en afficheur sept segments.

Info: L'usage de la matrice 1588BS inverse mes colonnes et mes lignes.

Les fonctions de base

la fonction setLed

Fonction setled de led controle

Elle prend quatre paramètres:

  • le premier est l'adresse de l'afficheur par défaut toujours à 0.
  • le second est la ligne de la matrice qui prendre pour valeur de 0 à 7.
  • le troisième est la colonne de la matrice qui prendre pour valeur de 0 à 7.
  • le quatrième si elle a pour paramètre " true" la diode est allumée, sinon elle a  "false" et la diode est éteinte.

la fonction setRow

set row paramettre

Elle prend trois paramètres:

  • le premier est l'adresse de l'afficheur par défaut toujours à 0.
  • le second est la ligne en question qui prend pour valeur de 0 à 7.
  • le troisième est une donnée en octet "B01110111" ou en hexadécimal "0x77". Ce troisième paramètre a pour avantage d'afficher toutes les diodes que l'on souhaite sur la colonne de manière distincte.

la fonction setColumn

set row paramettre

Elle prend trois paramètres:

  • le premier est l'adresse de l'afficheur par défaut toujours à 0.
  • le second est la colonne en question qui prendre pour valeur de 0 à 7.
  • le troisième est une donnée en octet "B01110111" ou en hexadécimal "0x77". Ce troisième paramètre a pour avantage d'afficher toutes les diodes que l'on souhaite sur la ligne de manière distincte.

Schéma de montage

Schéma Afficheur Sept Segments

Maintenant pour utiliser le Max 7219, nous allons faire un montage type avec deux afficheurs 4 digits,  dont il est possible de câbler qu'un seul afficheur.

Vous trouverez un sketch pour 8 et 4 digits en téléchargement. .

schema max 7219

Schéma Matrice 1588BS

Constater que les digits de la matrice correspondent à la cathode commune et que les segments à l'anode commune, ceci inverse l'utilisation de la librairie LedControle où les colonnes correspondent aux segments et les digits aux lignes.  Après avoir tester plusieurs montages celui-ci a été le plus fonctionnel.

Matrice à led 8x8


Recevez gratuitement les codes sources de PlaisirArduino

Amusez-vous tout de suite avec les entrées/sorties de votre carte Arduino Uno

Vous y retrouverez : des scketchs, des schémas et des PDF