Skyduino:~#
Articles
C/C++, programmation, projet, python

[Code & démo] Matrices de leds « DIYTJ »

Bonjour tout le monde !

Comme promis dans mon précédent article le code source permettant de contrôler des matrices de leds « DIYTJ » est en ligne !

Ce code est utilisable sur n’importe quel microcontrôleur AVR possédant au minimum :
– un timer 8 bits
– deux ports GPIO
Le code de base est conçu pour fonctionner sur un ATmega1284p.

Attention :
Il ne s’agit pas de code « Arduino » mais de code AVR-C bas niveau, fourni avec le makefile qui va bien pour compiler celui ci.
Ce choix a été rendu obligatoire par les timings à respecter, l’affichage devant être rafraichi toute les 1/960ième de seconde cela ne me laissai pas de temps pour faire « mumuse » avec du code purement Arduino 😉
Vous pouvez cependant compiler le code tel quel avec l’ide Arduino sans problème, voir même l’intégrer dans vos programmes moyennant un découpage de la fonction main() en une fonction setup() et loop() (et quelques modif du pinmap, tout est documenté dans le code je vous laisse chercher).

Important :
Suivant le nombre de matrice que vous voulez gérer il faudra plus où moins de RAM au code pour fonctionner.
Chaque matrice de 32×16 pixels demande 128 octets de RAM, si comme moi vous voulez gérer beaucoup de matrices il faudra un microcontrôleur avec suffisamment de RAM.

De plus dans mon cas pour des raisons de fluidité j’utilise la technique du « double buffering », il me faut donc deux fois plus de RAM.
Pour une matrice de 96×64 pixels je me retrouve avec 3Ko de RAM uniquement pour l’affichage, faite donc attention à cela 😉
Pire, dans le code de streaming vidéo je fait du triple buffering. J’ai donc +4Ko de RAM uniquement pour l’affichage, d’où l’utilisation d’un ATmega1284p (un monstre niveau taille de RAM disponible)

Détails techniques :

L’interruption « compare match A » du timer 2 est utilisée pour générer une interruption à 960Hz.
Cette interruption permet de rafraichir les lignes de l’écran régulièrement et d’obtenir un jolie rafraichissement à 60 images par seconde.
Cette routine d’affichage prend exactement 496µs sur les 1.04ms entre chaque interruption. Cela représente presque 50% du temps CPU disponible, pas de PWM possible donc.

La gestion des broches dans mon code utilise de la manipulation de port absolument partout. Faire du SPI software demande déjà suffisamment de temps (cf plus haut) je ne pouvais donc pas me permettre de gérer chaque broche indépendamment. Le pinmaping est documenté dans le code, si vous voulez changer l’ordre des broches il faudra reprendre toutes les manipulations de port.
(et comme c’est un travail relativement long je ne vous le conseille pas)

Le code, ou plutôt les codes :

Comme d’habitude ils sont sur mon compte github sous licence GPLv3 :
https://github.com/skywodd/DIYTJ_led_matrix/

En plus du code de base « fb » (= FrameBuffer) je fourni trois codes de démo :
– un « Game of life »
– un afficheur FFT temps réel avec entrée audio et affichage logarithmique / linéaire
– un lecteur vidéo avec streaming en temps réel via le port série

Remarque :
Tout les détails du montage, code, etc seront disponible dans le prochain numéro de FaitMain magazine.
En attendant voila de quoi vous donner l’eau à la bouche 😉
(sortie du numéro 3 de FaitMain magazine prévu pour le 1er aout)

Game of life :

Afficheur FFT :

Streaming vidéo :


(note: les artéfacts sur la vidéo sont dus à la fréquence de ma caméra qui est identique à celle de l’écran)

Bon week-end à tous !

Discussion

5 réflexions sur “[Code & démo] Matrices de leds « DIYTJ »

  1. ça dépote tout ça! bravo pour la vidéo temps réel, c’est superbe!

    Publié par openmakersdaily | 20 juillet 2013, 20 h 25 min
  2. Waw, je suis bouche-bé par le streaming vidéo *.*
    Félicitation et très beau travaille !

    Publié par Adrien | 20 juillet 2013, 22 h 56 min
  3. Du bon boulot, comme d’hab.

    Publié par Fab | 21 juillet 2013, 0 h 49 min
  4. Excellent !!
    Le streaming est époustouflant !

    Félicitations

    Publié par orken | 24 juillet 2013, 21 h 00 min
  5. HELLO! Nice work! can you sel one of these ? costom made to fit my project. mail me please at alex.calin.pintea@gmail.com

    Publié par Calin pintea | 24 mars 2016, 9 h 27 min

Skyduino devient Carnet du Maker

Le site Carnet du Maker remplace désormais le blog Skyduino pour tout ce qui touche à l'Arduino, l'informatique et au DIY.