Go Down

Topic: Envoi de données d'un ESP8266 via DMA vers une matrice de LEDs (Read 923 times) previous topic - next topic

TerenceF

Bonjour a tous,

Je travaille sur un projet pour mon stage ou je dois faire clignoter plusieurs leds sur un panneau de LED (8x8) mais a différentes fréquences.

Par exemple sur 1 seconde :
-La LED 1 doit clignoter toutes les 200 ms
-La LED 2 doit clignoter toutes les 500 ms
-La LED 3 doit clignoter toutes les 100 ms
-Ainsi de suite, vous l'aurez compris, elles ne clignotent pas en meme temps.

Pour cela, le materiel dont je dispose est une matrice 8x8 d'Adafruit NeoPixel




et d'un ESP8266 lolin => Voila un lien qui l'explique en détails : http://ouilogique.com/NodeMCU_esp8266/


J'ai tout d'abord utilise les librairies Neo_Pixel et FastLED pour me familiariser avec la matrice de LEDs.

Maintenant je dois essayer d'envoyer les données de l'ESP a la matrice via DMA (Direct Memory Access). Je pourrais ainsi rafraichir plus souvent ma matrice. J'ai cherche sur internet mais je ne vois pas comment envoyer mes données bit par bit a la matrice.

Est-ce que quelqu'un aurait une idée de comment faire ou aurait un lien pour que je puisse avancer ?

Merci d'avance,

Terence

kamill

Bonjour,

Je ne comprend pas du tout ton histoire de DMA. Tu comptes accéder directement à la mémoire des leds neopixel?

TerenceF

Bonjour,

Oui, pour les LEDS ce sont des LEDs RGB donc sur 24 bits.

Je comptais envoyer via DMA si possible ces 24 bits pour pouvoir allumer la Led que je veux.

Regarde dans cette datasheet des LEDs que j'utilise : https://cdn-shop.adafruit.com/datasheets/WS2812.pdf

En page 5, il montre a quoi ressemble une trame a envoyer pour allumer un pixel. C'est cela que je veux envoyer pour pouvoir allumer mes LEDs

J'espère que j'ai été clair:)

kamill

Les leds utilisent un protocole série et elles sont toutes cablées en série. Donc ça n'a absolument rien a voir avec du DMA.
Les timings que tu donnes ne semblent pas très serrés. La librairie neopixel ou fastled que tu sembles déjà avoir utilisé doivent permettre de faire ce que tu veux.


Artouste

bonjour
la lib Adafruit_NeoPixel est compatible avec l'esp8266 programmé sous l'IDE "arduino"

TerenceF

@kamill Les valeurs que j'ai donné étaient purement aléatoire. En fait je vais recevoir plusieurs signaux qui seront des fréquences cardiaques et je devrai faire clignoter ses leds dans un laps de temps donné a une fréquence simulant la fréquence cardiaque.

Par  exemple : Si je reçois une fréquence de 50 alors je ferais clignoter la LED doucement mais al'inverse si je reçois une fréquence de 120, la je ferai clignoter ma LED plus rapidement.

Le souci est que je vais recevoir plusieurs fréquences en même temps et que je dois les faire clignoter toutes en même et pas les unes après les autres car chaque LED correspondra a une fréquence.

Mon tuteur m'a dit de me pencher sur les DMA pour voir s'il ne serait pas plus facile d'envoyer les donner directement en DMA pour gagner du temps et pourvoir envoyer a chaque fois un train de bit pour toutes les leds en même temps.
Je m'explique : Avec le DMA, je pensais essayer d'envoyer toutes les x millisecondes, mon train de bits (il me faut 24 bits pour un pixel) donc pour 64 pixels j'envoie 1536 bits d'un coup. Au prochain envoi je refais la même chose mais avec des valeurs différentes pour simuler l'allumage et l'extinction des leds.

@Artouste oui oui je sais qu'elle est compatible je l'ai deja utilise :)




Si cela est possible simplement avec les libraires Neo_Pixel ou FastLED, dois-je utiliser les timers aussi ?

kamill

Bonjour,

Le DMA, comme son nom l'indique c'est l'accès direct mémoire. Il faut donc qu'il y ait un système hard qui permette à un périphérique ou à un autre processeur d'écrire/lire directement dans la mémoire du processeur. Ce qui n'est pas du tout le cas ici.

Ce que tu veux faire c'est exactement ce que fait la librairie neopixel.
On prépare l'affichage avec setPixelColor() et ensuite on envoie la commande à toutes les leds avec la commande show().

TerenceF

Ok d'accord,

ça je le faisais déja, je vais voir pour l'adapter a ce que je veux, merci

Go Up