Publié le 1 avril 2014 - par

Bientôt un journal lumineux à base de MAX7219 et de Raspberry Pi

MAX7219_AB_250pxLe rythme des articles s’est un peu ralenti sur framboise314.fr. Pas d’inquiétude, je suis en train de préparer la journée Raspberry Pi au CERN le 12 avril.

La présentation du livre qu’il faut imaginer et répéter, préparer le « stand » framboise314, et monter une démo  de présentation du Raspberry Pi. C’est cette réalisation que je vais aborder ici, en attendant de rédiger tout ça et de le mettre à votre disposition.

Un journal lumineux

max7219J’avais eu envie de démarrer cette réalisation après avoir vu un article sur RasPi.tv concernant le pilotage d’une matrice à LED (8×8) avec un Raspberry Pi et un MAX7219.

Les modules à LED sont intéressants, disponibles sur de nombreux sites en ligne, pas très chers, montés ou en kit, et surtout chaînables, c’est à dire que la sortie du premier module attaque le second et ainsi de suite…

led_matrix_max7219Un module LED matrice 8×8 et MAX7219

Le module est prévu pour un commande par un bus série constitué de 3 fils : un fil CS qui sert à sélectionner le MAX7219 et à latcher les données dans le circuit (les stocker), un fil CLK qui rythme l’envoi des signaux, et enfin un fil DIN qui reçoit les données.

max7219_synoptiqueLa partie intéressante du circuit se trouve en bas du schéma synoptique : La donnée est présentée sur DIN, et le signal CLK la fait avancer dans le registre à décalage. Au bout de 16 coups d’horloge (16,5 si on veut sodomiser les diptères…) la première donnée est disponible sur DOUT et peut être envoyée au MAX7219 suivant.

MAX7219_AB_600pxEnfin, ça c’est la théorie… Parce que si vous cherchez sur Internet, les réalisations à base de Raspberry Pi et de multiples matrices à LED ne sont pas légion (si vous en trouvez envoyez moi l’adresse, je l’ajouterai ici…).

Pourquoi ? Le module MAX7219 est compatible SPI, donc c’est la solution de facilité, et hop on branche le bazar sur le bus SPI et… ça marche.

Ouais mais pourquoi on ne voit partout qu’un seul module ?

Le chainage des modules

Tssss lisez les articles, en général on vous dit quand ça marche avec un module, il suffit de connecter les modules en série (DOUT du premier au DIN du deuxième) et hop… le caractère que vous avez envoyé en premier apparait sue l’afficheur suivant.

MMMMouais… Sauf que ça marche pas … 🙁

led_matrix_max7219_2En fait vous vous retrouvez avec deux afficheurs qui affichent… la même chose !

C’est le cas si vous utilisez les programmes de https://github.com/rm-hull/max7219.git et envoyez du texte sur 2 matrices. Elles affichent exactement les même caractères. De défilement point… De journal lumineux macache !

Mais que se passe-t-il ?

Un coup d’œil à la doc technique du MAX7219 fournit un élément de réponse.

max7219_datasheetAvec le bus SPI, le latch se produit après que le mot de 16 bits a été envoyé au MAX7219. Or pour que le chainage fonctionne, il faut envoyer par exemple 32 octets pour 2 circuits avant de latcher.

Qu’est-ce qu’on fait alors?

On met tout à plat, on lit la doc, on fait marcher son neurone…

Après ces quelques étapes, j’ai décidé d’écrire un programme pour gérer mon journal lumineux. Hésitation… C, Python ?  Finalement après consultation des possibilités et le choix de wiringPi pour commander les ports GPIO (il n’était pas question de réinventer le fil à couper l’eau chaude 😉 ), le C s’est imposé.

led_matrix_max7219_3C’était parti pour afficher sur un caractère sur un module.

J’ai choisi de recréer les signaux à partir du timing figurant dans la notice. Les intervalles de temps minimum sont de 25nS, wiringPi permet de descendre à 1µS, ce qui fera l’affaire pour un journal lumineux où le temps de réponse n’est pas un critère primordial.

max7219_timingLe timing ci-dessus convient pour une matrice. Lorsqu’il y en a deux, il suffit d’envoyer 32 octets avant de latcher avec le fil LOAD (CS0), s’il y en a 3, envoyer 48 octets…

D’où l’idée de passer le paramètre « Nombre de matrices » sur la ligne de commande.

Le programme en est à la version 0.9.3, lorsqu’il sera finalisé en version 1, je le mettrai en ligne. Je n’avais pas programmé en C depuis… Ouuuhhhhhhh ! alors vous pardonnerez les erreurs ou faiblesses du programme, et vous en profiterez pour l’améliorer…

A bientôt donc pour ce journal lumineux sur framboise314.fr.

Une vidéo pour vous faire patienter :


max7219_multi_matrices_LED par francois_m

Share Button

À propos François MOCQ

Électronicien d'origine, devenu informaticien, et passionné de nouvelles technologies, formateur en maintenance informatique puis en Réseau et Télécommunications. Dès son arrivée sur le marché, le potentiel offert par Raspberry Pi m’a enthousiasmé j'ai rapidement créé un blog dédié à ce nano-ordinateur (www.framboise314.fr) pour partager cette passion. .

6 réflexions au sujet de « Bientôt un journal lumineux à base de MAX7219 et de Raspberry Pi »

    1. admin Auteur de l’article

      Bonjour msg
      Effectivement c’est le plan classique…
      Sur les modules que j’utilise c’est bien DOUT (j’ai suivi la piste visuellement et testé à l’ohmmètre)
      Merci pour le schéma
      Cordialement
      François

      Répondre
  1. Ping : Bientôt un journal lumineux à base...

  2. Thomas

    Très intéressent tout ça, moi qui voulait justement bidouiller avec ça (à la base sur arduino); j’attend avec impatience la suite 🙂

    Répondre
  3. mack

    J’attends avec impatience aussi l’article qui va bien

    Cependant, petite question, pourquoi coder en C alors qu’on « s’habitue » doucement a utiliser le python pour beaucoup d’applications avec la framboise ?

    J’ai trouvé ce petit message: http://raspi.tv/2013/8-x-8-led-array-driven-by-max7219-on-the-raspberry-pi-via-python#comment-42384
    Et ça marche très bien (du moins avec 1 module, j’attends avec grande impatience les petits frère qui devraient plus tarder…), tout en gardant un code python a chaque bout 😉

    Répondre

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Complétez ce captcha SVP * Time limit is exhausted. Please reload CAPTCHA.