Voir les contributions

Cette section vous permet de consulter les contributions (messages, sujets et fichiers joints) d'un utilisateur. Vous ne pourrez voir que les contributions des zones auxquelles vous avez accès.


Sujets - Tanguy

Pages: [1]
1
Composants / ARDUINO NANO EVERY
« le: mai 20, 2019, 10:17:42 pm »
Une nouvelle carte arduino officielle semble prête à sortir : la NANO EVERY

même empreinte que la carte NANO
basée sur un ATMega4809
principales caractéristiques :
fréquence : 20 Mhz  (16 Mhz pour la nano)
Flash       : 48 KB     (32 KB pour la nano)
SRAM      :  6 KB      ( 2 KB pour la nano)
prix         :  8 €        (20 € pour la nano dans le circuit officiel)

les 8 entrées analogiques sont à priori utilisables en digital (y compris A6 et A7).

https://store.arduino.cc/nano-every

2
Vos projets / Piloter des dizaines de LED avec une seule PIN du satellite
« le: février 05, 2019, 10:06:49 pm »
Bonjour à tous,

J'ai été très enthousiasmé par les projets de "satellite" présentés tant sur le site éditorial que sur le forum.
Dans mon mes réflexions sur son utilisation sur mon prototype de réseau, j'ai voulu optimiser l'utilisation des entrées/sorties de la carte satellite surtout pour la gestion des signaux lumineux, lesquels consomment beaucoup de sorties.

Je partage aujourd'hui les résultats de mes premiers tests.

La solution testée
La solution consiste à utiliser la puce WS2811 que l'on trouve habituellement dans les guirlandes NEOPIXELS pour gérer, à partir d'une seule sortie de l'arduino, une chaine de LEDS RGB connectées en série. L'arduino envoie sur l'unique sortie une suite d'octets pour "commander" en couleur et intensité chacune des LEDS RGB.

Dans mes expériences, la puce WS2811 n'est pas utilisée pour piloter des LED RGB mais les trois led mono-couleur d'un signal lumineux. En chaînant quelques WS2811 on pilote facilement plusieurs signaux de 3 LEDS ou plus. La puce W2811 permet de commander chaque LED en PWM pour plus de réalisme.

Le matériel utilisé
J'ai commandé des circuits imprimés vendus par lot de 50 unités sur ebay pour un peu moins de 8 euros (https://ebay.us/BwxQcH)
Je les ai ensuite connectés en série à un arduino nano et quelques signaux pour les programmer enfin avec la bibliothèque light_ws2812 (https://github.com/cpldcpu/light_ws2812/tree/master/light_ws2812_Arduino)



Les résultats
Piloter la chaîne de LED est simple avec la bibliothèque citée plus haut.
Mes problèmes ont commencés quand j'ai testé l'utilisation conjointe de ces LED avec des servos.
En effet, la bibliothèque LIGHT_WS2812, comme toutes les autres similaires que j'ai testées, désactivent les interruptions le temps d'envoyer à l'ensemble des LED la série d'octets (un octet par LED). La bibliothèque servo utilise des interruptions pour gérer la durée des impulsions envoyées aux servomoteurs => potentielle collision !



En poussant mes tests avec 8 servos et 18 LEDS (6 puces) j'ai constaté les effets néfastes de cette désactivation temporaire des interruptions : les servomoteurs ont des petits tremblements de temps en temps.

J'ai finalement trouvé une parade en vérifiant, avant de lancer le rafraichissement des LED, qu'il restait suffisamment de temps avant la prochaine interruption générée par la bibliothèque servo :

  if (OCR1A - TCNT1 > LEDS_SYNC_DURATION)) {
      // on verfie que le temps restant avant la prochaine interruption (OCR1A - TCNT1)
      // est suffisant pour rafraichir toutes les LED
     [...]
      leds.sync();
  }

Mes questions à ce stade
  • L'implémentation usuelle du bus CAN sur locoduino utilise des interruptions. Est-ce que je peux espérer avec la nouvelle puce MCP2517FD et son énorme mémoire que l'on puisse se passer des interruptions pour éviter de nouvelles collisions entre les bibliothèques ?
  • Est-ce que quelqu'un a déjà testé ce type de LED (neopixel) dans un environnement ferroviaire ? sont-elles sensibles aux perturbations électromagnétiques  sur courtes distances (30 cm) ?

3
Le logiciel DCC++ / DCC++ sur Nano avec LMD18200
« le: juillet 24, 2016, 10:24:08 pm »
Un petit partage de mes expérimentations du week-end : DCC++  sur un Nano  avec le module LM18200 recommandé par Dominique.

Le Programm DCC++ BaseStation n'est pas prévu pour le Nano (seulement UNO et MEGA), mais en substituant dans les fichiers les expressions "#ifdef ARDUINO_AVR_UNO " par "#ifdef ARDUINO_AVR_NANO " cela suffit à le le faire fonctionner.

N'ayant qu'un module LMD18200 je ne pouvais pas bénéficier à la fois de la voie principale et de la programmation; mais j'ai pu les tester séparément.

A - Utilisation de la voie principale :
Branchements arduino <-> LMD18200 :
3   <-> PWM (enable)
10 <-> DIR
GND <-> GND
GND <-> BRAKE
A0 <-> Current Sens
GND <-> R de 10 kOhms <-> Current Sens  (je n’avais pas de 2,7 kOhms qui aurait plus adapté pour délivrer 1V/A, l'intensité mesuré était donc presque 4 fois plus élevé que l'intensité consommé à prirori)

J’ai pu tester le pilotage d’une loco par le moniteur série aves les commandes basiques suivantes :
<1> power on
<0> power off
<t 1 3 20 1> commande locomotive sur le registre 1 adresse 3 vitesse 20 marche avant
... et cela fonctionne !!

B - Utilisation de la voie de programmation
Branchements arduino <-> LMD18200 :
11   <-> PWM (enable)
5    <-> DIR
GND <-> GND
GND <-> BRAKE
A1 <-> Current Sens
GND <-> R de 10 kOhms <-> Current Sens  (je n’avais pas de 2,7 kOhms ...)

J’ai seulement tester la lecture des CV (n’ayant pas de programmeur de CV pour corriger d’éventuelle bêtise) toujours en envoyant des instructions par le moniteur série :
<R 1 196 196>   (lecture de CV01, on peut mettre n’importe quoi à la place de 196)
Le moniteur retourne en quelques dixièmes de secondes « <r196|196|1 3> » => adresse 3

Conclusion : la mesure de courant directement par la pin du LMD18200, bien que très bruitée, est suffisante pour lire les CV

J’ai eu le temps de tester un peu DCC++ Contrôler (l’interface Processing pour commander notre BaseStation depuis l’’ordinateur) qui fonctionne également sans soucis avec ces montages.


En espérant que cela puisse être utile à l’un ou l’autre …

Pages: [1]