Affichage des articles dont le libellé est MAX7219. Afficher tous les articles
Affichage des articles dont le libellé est MAX7219. Afficher tous les articles

MAX7219: Piloter des LED ...

Le MAX7219 permet de contrôler des matrices de LED, mais aussi des afficheurs 7 segments, bargraphs...

Je ne traiterai que le cas que j'ai moi-même mis en oeuvre dans mon horloge: le driver de LED.


Son utilisation est assez simple: une librairie MATRIX existe pour en faciliter l'usage.

Cette librairie se résume (vue de l'extérieur) à une ligne de déclaration et 3 commandes:

  • Déclaration:
    • Matrix led_clock = Matrix(DIN, CLK, LOAD, nb_MAX);
      Les variables DIN, CLK, LOAD correpondent aux  num de pins Arduino reliées à ces signaux
      La variable nb_MAX correspond au nombre de MAX7219 mis en cascade. Jusqu'à 8 chips peuvent être mis en cascade
  • Commandes:
    • led_clock.setBrightness(taux);Permet de régler la luminosité, de 0 à 15. Le réglage se fait malheureusement pour toutes les LED de façon globale
    • led_clock.clear();
      Eteint toutes les LED
    • led_clock.write(col,rang,valeur);
      Affecte la valeur LOW ou HIGH à la LED située aux coordonnées x,y

Matrice de LED:
Brochage MAX7219:
Din, Load, Clock sont à relier à l'Arduino
Dout n'est utilisé qu'en cas d'utilisation en cascade de plusieurs MAX7219
Iset doit être relié au +5v par l'intermédiaire d'une résistance.

La valeur de cette résistance est à choisir avec précaution car le driver peut surchauffer en cas de mauvais dimensionnement. Un tableau de dimensionnement est disponible dans la datasheet, page 11. Voici son extract:

La datasheet indique d'autre part le positionnement d'une capa de 0.1µF entre la pin 19 et la masse

Sketch:
La mise en oeuvre du MAX7219 est on ne peut plus simple avec ces 4 instructions.
Tout se jouera sur l'imagination du développeur pour faire des animations recherchées.

Il suffit d'allumer/éteindre la LED visée. L'adressage se fait LED à LED (pas de traitement de groupe avec cette librairie)

GrandRoue: Horloge murale

Je vous présente ma dernière "création": une horloge murale (qui essaie d'être) design: GrandRoue

Elle est basée sur:
  • un Arduino (bien-sûr !) , pour le moment c'est un Duemilanove mais ce sera une version Standalone dans la version finale de cette horloge
  • un DS1307 RTC, pour lequel j'avais déjà fait une première approche dans ce billet
  • un MAX7219, driver de LED, permettant de piloter jusqu'à 64 LED. Ca tombre bien: j'en ai 60 dans mon horloge ... sa mise en oeuvre est décrite ici
Les 60 LED sont dispatchées sur le pourtour de la "roue", et représentent chacune un 60ième d'heure.
Pour distinguer l'aiguille de l'heure des minutes et secondes, j'ai choisi le concept suivant:
  • l'aiguille des heures est représentée par 3 LED allumées
  • l'aiguille des minutes par 2 LED allumées
  • l'aiguille des secondes par 1 LED

Fonctionnalités offertes:
Et bien elle donne l'heure !
Ni plus (pour le moment) ni moins ...
Il est bien-sûr possible de régler cette heure, et l'heure courante est conservée en cas de coupure de courant par la pile du module DS1307

Ajout en Version 02: la luminosité des aiguilles est ajustée en fonction de la luminosité ambiante.
Je pensais aussi rajouter une fonction minuterie (pour cuire les oeufs ;) ), voire une fonction réveil, mais je ne sais pas si je vais m'y pencher ...
Je rajouterai aussi certainement des petits effets lumineux qui tourneront toutes les heures, histoire de rendre le tout vraiment original

La GrandRoue en photos, et vidéo:
Pas facile de prendre des photos quand il fait sombre ...



Cette version est juste un test pour voir ce que pouvait donner une horloge avec ce design: elle fait 50cm, les LED sont "plantées" par l'arrière, dans de l'Isorel. Elles sont soudées sur de petites platines d'essais.
Dans la version finale, les LED seront sur des PCB par groupe de 8, et une plaque de plexi opaque couvrira les LED pour mieux diffuser la lumière (les plaques de plexi sont vendues en 50cm de côté, d'où la taille retenue ...)

Explications techniques:
Le sketch peut être décomposé en 2 grandes fonctions:
  • La gestion du DS1307, comprenant la récupération de l'heure courante, le réglage, l'enregistrement d'une nouvelle heure. Le tout est déjà expliqué ici
  • L'affichage de l'heure sur le cercle de LED. Cette fonction est gérée par le MAX7219.
Le MAX7219 gérant les LED sous forme de matrice de 8x8 éléments, j'ai numéroté mes LED comme suit:


C 1  2  3  4  5  6  7  8
R -----------------------
1 0  1  2  3  4  5  6  7
2 8  9  10 11 12 13 14 15
3 16 17 18 19 20 21 22 23
4 24 25 26 27 28 29 30 31
5 32 33 34 35 36 37 38 39
6 40 41 42 43 44 45 46 47
7 48 49 50 51 52 53 54 55
8 56 57 58 59

Il y a donc dans le sketch une petite moulinette permettant de passer d'un adressage matriciel à un adressage linéraire ...