dimanche 6 décembre 2015

Matrice de 64 LEDs, Max7219 et Arduino

Aujourd'hui, je vous présente quelques petits conseils qui vous permettront de contrôler une matrice de 64 LEDs (8 X 8) au moyen d'une carte Arduino et d'un pilote de LEDs Max7219.

La matrice de LEDs

J'ai utilisé une matrice constituée de 64 LEDs rouges et munie de 16 pins:  chacune des 8 lignes est associée à une pin, et chacune des 8 colonnes est associée à une autre pin.

Il ne faudrait pas croire que toutes les matrices 8 X 8 sont identiques.  Dans certains cas, les lignes sont des cathodes et les colonnes sont des anodes (ce qui signifie que la LED s'allume si la pin qui contrôle sa colonne est à un potentiel plus élevé que la pin qui contrôle sa ligne).  Mais il existe également des matrices dont les lignes sont des anodes et les colonnes sont des cathodes (et alors la LED s'allume si la pin qui contrôle sa ligne est à un potentiel plus élevé que la pin qui contrôle sa colonne).

Pour compliquer les choses encore un peu plus, les pins situées sous la matrice ne sont pas disposées dans l'ordre, et j'ai cru comprendre que la disposition des pins peut être très différente d'une matrice à l'autre.

Puisque j'avais l'intention d'utiliser la bibliothèque LEDControl et que cette bibliothèque a été conçue en fonction des matrices "ligne = cathode et colonne = anode", j'ai opté pour une matrice de LEDs dont le brochage est illustré ci-contre (le numéro inscrit sur ma matrice est HSN-1088AS).

D'après ce schéma, pour allumer la première LED en haut à droite, il faut soumettre la pin numéro 13 à un potentiel plus élevé que la pin numéro 9.  Pour allumer sa voisine de droite, il faut que la pin numéro 3 soit à une tension plus élevée que la pin numéro 9, etc.

Il reste à déterminer quelle pin porte le numéro 13, etc.  Au verso de ma matrice, il y a un petit chiffre "1" sous la pin 1, et un petit chiffre 9 vis-à-vis la pin 9.



Donc si je place la matrice du côté des LEDs, avec le numéro situé en bas, les pins sont numérotées de la même façon que sur un circuit intégré:


Si vous ne disposez pas d'un schéma indiquant le brochage de votre matrice de LED, vous devriez pouvoir le déduire par vous mêmes en effectuant des tests au moyen d'une source de tension et d'une résistance de protection.

Si votre matrice est de type "ligne = anode et colonne = cathode", pas de panique; ça va quand même fonctionner, à la condition d'en tenir compte lors de la connexion avec le Max7219 et de la conception du programme.

Bien entendu, si vous préférez, vous pouvez construire votre propre matrice au moyen de 68 LEDs individuelles que vous aurez patiemment soudées ensemble.

À l'autre extrême, vous pouvez utiliser un module comportant une matrice 8 X 8 déjà connectée à un Max7219 (vous en trouverez facilement sur eBay), auquel cas il ne vous reste plus qu'à programmer l'Arduino...

Le circuit intégré Max7219 (ou Max7221)

Les circuits intégrés Max7219 et Max7221 sont pratiquement interchangeables:  ils sont spécialement conçus pour allumer et éteindre un grand nombre de LEDs en maintenant dans celles-ci un courant constant.

Dans le schéma ci-contre, "Dig" et "Seg" font référence aux digits et aux segments d'un afficheur à 7 segments.

Pour piloter notre matrice de LEDs, il s'agit de brancher chaque pin "Dig" à une pin contrôlant une ligne de la matrice, et chaque pin "Seg" à une pin contrôlant une colonne de la matrice (mais c'est le contraire si vous utilisez une matrice de type "ligne = anode et colonne = cathode").

Pin 1 (DIN) du Max7219 : Pin 12 de l'Arduino
Pin 2 (DIG 0) du Max7219:  Ligne 1 de la matrice (1ère en haut) (pin 9*)
Pin 3 (DIG 4) du Max7219:  Ligne 5 de la matrice (pin 1*)
Pin 4 (GND) de Max7219:  GND de l'Arduino
Pin 5 (DIG 6) du Max7219:  Ligne 7 de la matrice (pin 2*)
Pin 6 (DIG 2) du Max7219:  Ligne 3 de la matrice (pin 8*)
Pin 7 (DIG 3) du Max7219:  Ligne 4 de la matrice (pin 12*)
Pin 8 (DIG 7) du Max7219:  Ligne 8 de la matrice (pin 5*)
Pin 9 (GND) du Max7219:  GND de l'Arduino
Pin 10 (DIG 5) du Max7219:  Ligne 6 de la matrice (pin 7*)
Pin 11 (DIG 1) du Max7219:  Ligne 2 de la matrice (pin 9*)
Pin 12 (LOAD) du Max7219:  Pin 10 de l'Arduino
Pin 13 (CLK) du Max7219:  Pin 11 de l'Arduino
Pin 14 (SEG A) du Max7219:  Colonne 2 de la matrice (2e à gauche) (pin 3*)
Pin 15 (SEG F) du Max7219:  Colonne 7 de la matrice (pin 15*)
Pin 16 (SEG B) du Max7219:  Colonne 3 de la matrice (pin 4*)
Pin 17 (SEG G) du Max7219: Colonne 8 de la matrice (pin 16*)
Pin 18 (ISET) brancher une résistance de 33 kΩ entre cette pin et 5 V
Pin 19 (V+) du Max7219:  sortie 5 V de l'Arduino
Pin 20 (SEG C) du Max7219:  Colonne 4 de la matrice (pin 10*)
Pin 21 (SEG E) du Max7219:  Colonne 6 de la matrice (pin 11*)
Pin 22 (SEG DP) du Max7219:  Colonne 1 de la matrice (1ère à gauche) (pin 13*)
Pin 23 (SEG D) du Max7219: Colonne 5 de la matrice (pin 6*)
Pin 24 (DOUT):  utile pour brancher plusieurs matrices en cascade

*Les numéros de pin en rouge sont valides pour la matrice que j'ai utilisée, mais pas nécessairement pour toutes les matrices.

La bibliothèque LEDControl:

Pour faciliter la programmation, j'ai utilisé la bibliothèque LEDControl (voir ici pour des instructions détaillées).

Pour allumer une LED individuelle sur la matrice, on utilise cette syntaxe:

setLed(adresse,ligne,colonne,état)
  • "adresse" est le numéro de la matrice (le nombre "0" si vous n'en avez qu'une)
  • "ligne" est le numéro de la ligne (en commençant par "0" pour la première en haut)
  • "colonne" est le numéro de la colonne (en commençant par "0" pour la première à gauche)
  • "état" est un booléen:  true pour allumer la LED, false pour l'éteindre
Pour une matrice de type "ligne = anode et colonne = cathode", les lignes et les colonnes sont inversées:  vous faites donc setLed(adresse,colonne,ligne,état)




Un exemple de sketch

Voici finalement un sketch qui affiche tour à tour toutes les lettres de l'alphabet, puis tous les chiffres.


Yves Pelletier   (TwitterFacebook)

Aucun commentaire:

Enregistrer un commentaire

Related Posts Plugin for WordPress, Blogger...