Le 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.
Au sommaire :
Un journal lumineux
J’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…
Un 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.
La 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.
Enfin, ç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 … 🙁
En 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.
Avec 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é.
C’é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.
Le 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.
Très joli travail ! A quand la projection holographique 😉
Une étape avant l’holograme avec un raspberry pi :
http://www.gizmodo.com.au/2013/08/this-death-star-hologram-was-made-using-a-raspberry-pi/
Un fake avec un pi ? :
http://www.youtube.com/watch?v=6BShKeLmcZU
on y pense ! 😉
cordialement
François
Si les deux afficheurs affichent le même texte , c’est que c’est la ligne Data_In qui a été chainée et pas le Data_Out .
Tiens , un plan de chainage de deux modules :
http://www.ausnerdz.com/wp-content/uploads/2013/11/MAX72XX_Schematic.jpg
Le 7219 peut servir aussi à gérer un affichage de 8 digits .
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
Ping : Bientôt un journal lumineux à base...
Très intéressent tout ça, moi qui voulait justement bidouiller avec ça (à la base sur arduino); j’attend avec impatience la suite 🙂
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 😉
Bonjour Monsieur, je souhaite l’an prochain réaliser une panneau défilant à base de MAX7219. Habituellement j’utilise des microcontrôleurs de chez Micro Chip programmer sous MPLAB CC18 ou Flowcode.
je souhaiterai franchir le cap vers la Rapsberry
pourriez, vous s’il vous plait, me fournir votre code source pour réaliser le message défilant.
Merci
Cordialement
michael gaudin
Bonjour
Voyez github.com/framboise314
Cordialement
Francois
Bonjour François, merci beaucoup.
Cordialement
michael