Neopixels sur SMT32F4 : pilotage avec un timer et DMA

Dans l’article précédent concernant les Neopixels, je vous ai montré ma solution « quick’n’dirty » pour piloter un anneau de 16 Neopixels. Cette implémentation utilise une boucle vide dont le nombre d’itérations permettra de générer des timings + ou – précis. Cette solution, qui a le mérite d’être simple et fonctionnelle, n’est pas du tout précise, optimisée et évolutive. En effet, même si la boucle de Delay() ne fait rien, elle occupe le processeur pour ne rien faire, justement. De plus, si la fréquence du processeur devait changer dans le future, tous les timings deviendraient invalides.

C’est pour cela que j’ai décidé de réimplémenter le contrôle de mes Neopixels en utilisant un timer du micro-contrôlleur. Ce timer va générer en hardware (sans intervention du programme, à part lors de l’initialisation) des timings très précis. De plus, l’utilisation du DMA va permettre de générer toute une trame de données vers les LEDs en consommant très peu de ressources du processeur. Continuer la lecture de « Neopixels sur SMT32F4 : pilotage avec un timer et DMA »

Découverte des Neopixels (sur STM32F4)

Récemment, j’ai découvert les Neopixels de Adafruits. Il s’agit de modules de LEDs RGB pas chers et assez simples à mettre en oeuvre. Ils existent sous plusieurs formes (LED unique, platines de 8 LEDs, anneaux, guirlandes, matrices,…), et peuvent être pilotés par une multitude de processeurs (cela va du petit microprocesseur 8 bits au BeagleBone, en passant par les Arduinos, par exemple).

Les applications pour ce genre de modules sont variées. En me promenant sur le net, j’ai trouvé des gens qui en ont fait des bijoux high-tech, une batterie lumineuse, des horloges, et diverses autres créations très amusantes.

J’ai trouvé cela tellement amusant que j’ai décidé de me procurer un de ces petits modules. J’ai opté pour l’anneau de 16 LEDs. Il est pas cher, pas trop grand, pas trop petit, ne consomme pas trop et… je le trouve assez mignon. Continuer la lecture de « Découverte des Neopixels (sur STM32F4) »