Conflits possible entre NEOPIXEL et DMX ?

Bonjour à tous,
je rencontre un bug sur ARDUINO NANO que je n'arrive pas à résoudre.

Le projet est le suivant :

Je pilote des rubans NEOPIXELS, et des éléments DMX à la fois.
Pour ce faire j'invoque DmxSimple et Adafruit_NeoPixel... enfin vous voyez le topo.

Tout fonctionne à merveille tant que je ne déclare pas plus de 309 LED sur les NEOPIXELS.
Si je déclare 310 ou plus (mon besoin est 400), je perds les NEOPIXELS (mais le reste fonctionne très bien).
Quand je dis je perds, c'est que ça va meme plus loin, je n'ai aucun signal (oscilloscope) sur la pin affectée aux LED.
Je redescend le nombre en dessous de 309, et paf ça remarche. Je n'y comprends rien, d'autant plus que j'ai 2 autres projets un peu similaire avec les mêmes librairies où je n'ai pas ce défaut.

Si je supprime la partie DMX, j'arrive à piloter mes 400LED. Je remet le DMX en service, je suis limité à 309 LED.
Si vous avez une super idée, je vous en remercie.

:warning:
Post mis dans la mauvaise section, on parle anglais dans les forums généraux. déplacé vers le forum francophone.

Merci de prendre en compte les recommandations listées dans Les bonnes pratiques du Forum Francophone

Bonjour alex_vrc

Si tu déclares toutes tes LED que dit la mémoire lors de la compilation?

Exemple:

Sketch uses 4660 bytes (14%) of program storage space. Maximum is 32256 bytes.
Global variables use 41 bytes (2%) of dynamic memory, leaving 2007 bytes for local variables. Maximum is 2048 bytes.

A+
Cordialement
jpbbricole

Bonjour,

la mémoire est à 53% coté EEPROM (16518bytes) et 42% coté RAM (875bytes).

Cordialement

Bonjour,

Tu utilises quelle bibliothèque pour les neopixels?
Fastled par exemple fait une allocation dynamique de mémoire. Dans ce cas tu peux avoir un manque de mémoire bien que le montant se mémoire utilisé à la compilation soit loin de la limite.

Bonjour Kamill,

j'utilise celle ci :
<Adafruit_NeoPixel.h>

Si la RAM est en overflow ça ne plante pas le CPU ?
Pour info, quand le défaut se produit (pas de neopixels commandés), le reste des fonctions est opérationnel.

Non, si malloc() échoue, la mémoire n'est pas allouée.
Tu peux savoir si c'est ça le problème en appelant la méthode numPixels() sur l'instance que tu as essayé de créer. Si la mémoire n'a pu être allouée numPixels() retournera 0 sinon elle retournera le nombre de LEDs que tu avais demandées.

Pour info, pour chaque LED, on alloue 3 octets pour une LED RGB et 4 octets pour une LED RGBW.

purée les gars merci :pray:
c'était bien ça le soucis.
J'ai tué une liaison série pour faire un peu de place, et ça marche !!

Par contre dommage que le compilateur ne fasse pas l'estimation de charge maxi de la RAM.

merci à tous.

Bonsoir alex_vrc

Utilises tu des Serial.println("Chaine");, si oui, écris ça ainsi, Serial.println(F("Chaine")); ça libère de la RAM.

Cordialement
jpbbricole

Il ne peut pas. Pour faire cela il faudrait qu'il fasse une émulation de l'exécution de ton code.

Comme l'a dit @fdufnews, il faut exécuter le programme pour la connaitre.
Par contre tu peux afficher dynamiquement la mémoire utilisée. Le plus simple est d'utiliser la bibliothèque MemoryFree