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

[DIY] Matrice de leds RGB – contrôleur AVR

Bonjour tout le monde !

DSCF2591

Ils sont arrivés sans se presser, mais qu’importe ils sont enfin là !
Les circuits imprimés pour mes contrôleurs de matrices de leds RGB sont dans la place.

C’est l’heure du montage et du test 😉

L’article d’aujourd’hui ne sera pas aussi long que ce que je fais d’habitude.
C’est plus pour vous mettre en appétit en attendant le plat principal (le code qui gère plein de jolies couleurs).

Avant de commencer

Pourquoi j’ai décidé de faire un circuit spécialement pour mes contrôleurs de matrices ?
J’aurai tout simplement pu rester sur un montage fait à la main sur une breadboard ou sur un morceau de plaque à trous.
Certes, c’est vrai, mais ça n’aurait pas été très propre comme solution définitive, surtout dans l’optique de mon projet de table basse interactive 😉

J’ai donc décidé de passer d’un montage très brouillon ressemblant à ceci :

DSCF2607

A un montage beaucoup plus propre ressemblant à cela :

DSCF2600

DSCF2594

Je pense que la différence est assez nette 🙂

Le montage sur breadboard m’a permis de valider mon schéma et la version sur carte va me permettre de faire le code.
J’en reparlerai plus tard dans un article dédié, mais actuellement le code fait des pointes avec des signaux de contrôle à 1.3MHz.
J’ai optimisé dans tout les angles et tous les coins, allant même jusqu’à ajouter de l’assembleur « inline ».
Certes ça dépote, mais le montage breadboard commençait à montrer ses limites avec une telle vitesse.

Le montage

schematic

Le schéma du montage en soi est vraiment basique :
– un microcontrôleur 8-bits du fabricant ATMEL : l’ATmega1284P,
– un circuit de reset,
– des borniers (beaucoup de borniers même),
– un connecteur DIL pour connecter une matrice.

Les deux tiers de la carte sont composés de connecteurs, le reste consiste en quelques composants discrets.
Il n’y a vraiment rien de bien compliqué là-dedans.

Parenthèse rapide : L’ATmega1284P est vraiment un beau petit microcontrôleur qui en plus d’être compatible avec le logiciel Arduino (pour ceux qui seraient intéressés), possède 16Ko de RAM (oui, deux fois plus qu’une Arduino mega2560) et 128Ko de flash. De quoi faire de jolis programmes en perspective 😉

Du coup, comme c’est un circuit assez basique, je me suis dit que je pourrai tenter un truc en même temps que je faisais quelques modifications sur le schéma et le typon (pour résumé j’ai réagencé les annotations sur le typon et écarté les borniers qui étaient trop proches des autres composants comme on peut le voir sur les photos).

BOTTOM

BOTTOM

TOP

TOP

TOP + BOTTOM

TOP + BOTTOM

Annotations

Annotations

Ami bidouilleur fait vous plaisir, la carte est sous licence CC-BY-SA, vive l’Open Source HardWare.
Avec le code sous licence GPLv3, c’est le duo gagnant 😉

Le schéma, le typon (fichiers Eagle, je m’arrache les cheveux sur Kicad pour le moment) et même les fichiers Gerber prêt à être envoyé chez Seeedstudio sont ici :
https://github.com/skywodd/RGB_Matrix_Arduino_AVR/tree/master/Hardware/M1284p_Controller

Remarque : les fichiers ci-dessus sont ceux de la révision 2.
J’ai inclus dans cette révision toutes les corrections de problèmes que j’ai pu remarquer après avoir inspecté les pcb de la révision 1.
Pour les petits chanceux de l’Electrolab qui recevrons un cadeau d’ici peu, voici une récap rapide de la révision 1 en format PDF :
https://dl.dropboxusercontent.com/u/53604363/cad/rgb_fb_rev1/R%C3%A9f%C3%A9rence_v1.pdf
PS pour les Electrolabisiens : je vous ai fait une marque au feutre rouge pour indiquer l’emplacement des détrompeurs sur les cartes 😉

Pour les autres voici la nomenclature détaillée du contrôleur (révision 2) :

Référence Désignation Quantité Réf Farnell
C1, C4 Condensateur 100nF 3 1216445
C2, C3 Condensateur 22pF 2 1216411
C5 Condensateur 10nF 1 1216435
Q1 Quartz 16.000MHz 1 1611761
Q1 (alternative) Quartz 20.000MHz 1842224
R1~R7 Résistance 5% 10K ohms 7 1700251
IC1 ATmega1284P 1 1715481
IC1 Support DIP-40 1 1101352
JP9 Connecteur DIL 2×8 male avec détrompeur 1 8395934
JP9 (alternative) Connecteur DIL 2×8 femelle 3419241
ISP1 Connecteur DIL 2×3 1 1022231
Autre Bornier 5mm 2 points 5 9632670
Autre Bornier 5mm 3 points 6 9632689

Plusieurs alternatives sont possibles au niveau des fréquences du quartz et du connecteur pour les matrices.
C’est comme vous voulez : 16MHz pour rester dans l’esprit Arduino, ou 20MHz pour une puissance de calcul au top.
Pareil pour le connecteur : version classique avec détrompeur (et une nappe qui va vers les matrices), ou version femelle qui vient s’enficher directement dans la matrice.

Pour ma part je reste sur du 16MHz et un connecteur avec détrompeur classique, on ne change pas une équipe qui gagne 😉
(OK, en réalité c’est juste que je n’ai pas de quartz à 20MHz sous la main, mais ça, vous n’êtes pas sensé le savoir)

Voici ce que ça donne avec la révision 1, toutes options installées :

DSCF2617

DSCF2619

Le code

DSCF2604

DSCF2596

A la question « est-ce que ça marche ? », ma réponse est OUI !
Edit : en fait … non. Il reste toujours un bug assez gênant au niveau de l’affichage.
Surement une erreur « à la con » dans le calcul de setPixelAt().
Edit 2 : c’est tout bon.

J’ai cependant passé deux heures à chercher un bug qui n’existait pas …
Note à moi-même : le « P » à la fin de ATmega1284P n’est pas là pour faire jolie.
Manifestement sans ce « P » le compilateur et AVRDUDE ne voient aucun problème à la compilation ou à la programmation, par contre à l’exécution c’est du grand n’importe.

Le code (presque, cf edit ci-dessus) fonctionnel pour le contrôleur est disponible sur Github :
https://github.com/skywodd/RGB_Matrix_Arduino_AVR/tree/master/M1284_Software

Il ne gère que 8 couleurs comme pour les précédentes versions, mais les performances ont été multiplié par 10x, laissant place nette pour l’ajout de plusieurs autres niveaux de couleurs.
Je ferai un petit résumé des optimisations réalisées dans un article dédié (diviser par 10 le temps d’exécution ça mérite bien un article ;)).

Remarque : grâce à Icare (membre du forum arduino.cc qui m’aide pour les tests et le debug, encore merci à lui) les codes de démo précédant pourront bientôt être compilés avec l’ide Arduino pour cette carte à base d’ATmega1284p. Je suis en train de faire les modifications sur le github.

To be continued …

Advertisements

Discussion

Pas encore de commentaire.

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

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.