Update Doc

This commit is contained in:
Serge NOEL
2026-08-11 11:15:45 +02:00
parent c505ecbd4a
commit 8d3e63b300
+11 -6
View File
@@ -47,7 +47,7 @@ Récapitulatif des CVs de notre accessoire
| CV 102 | Valeur minimale du servo (0 à 180) | | CV 102 | Valeur minimale du servo (0 à 180) |
| CV 519 | Version du décodeur (Lecture seule) -1- Hélico module | | CV 519 | Version du décodeur (Lecture seule) -1- Hélico module |
| CV 520 | Identifiant fabricant (Lecture seule) -13- Construction amateur | | CV 520 | Identifiant fabricant (Lecture seule) -13- Construction amateur |
| CV 512/8 | Reset d'usine (Écrire la valeur 8 réinitialise souvent le décodeur à l'adresse 1) | | CV 512/8 | Reset d'usine (Écrire la valeur 8 réinitialise le décodeur à l'adresse 1) |
# Matériel # Matériel
@@ -59,7 +59,7 @@ Récapitulatif des CVs de notre accessoire
Cette configuration de broches (D2 pour le DCC, D9 pour le servo, D5 pour le PWM) est parfaitement optimisée pour un Arduino Nano. L'Atmega328P sera tout à fait capable de gérer ces trois tâches de front, car les composants matériels utilisés n'entrent pas en conflit. Cette configuration de broches (D2 pour le DCC, D9 pour le servo, D5 pour le PWM) est parfaitement optimisée pour un Arduino Nano. L'Atmega328P sera tout à fait capable de gérer ces trois tâches de front, car les composants matériels utilisés n'entrent pas en conflit.
1. Pourquoi le choix des broches est idéal (Conflits évités) ### Pourquoi le choix des broches est idéal (Conflits évités)
L'Arduino Nano gère ses tâches internes via des horloges appelées Timers. Votre configuration répartit parfaitement la charge de ces timers : L'Arduino Nano gère ses tâches internes via des horloges appelées Timers. Votre configuration répartit parfaitement la charge de ces timers :
@@ -69,7 +69,9 @@ L'Arduino Nano gère ses tâches internes via des horloges appelées Timers. Vot
- *D5 (Moteur PWM)* : Le signal PWM de la broche D5 est généré de manière 100 % matérielle par le Timer 0 (partagé avec millis()). Comme le servo confisque le Timer 1 (D9/D10), votre PWM sur D5 reste totalement indépendant et stable, oscillant à sa fréquence normale d'environ 976 Hz sans subir de distorsion. - *D5 (Moteur PWM)* : Le signal PWM de la broche D5 est généré de manière 100 % matérielle par le Timer 0 (partagé avec millis()). Comme le servo confisque le Timer 1 (D9/D10), votre PWM sur D5 reste totalement indépendant et stable, oscillant à sa fréquence normale d'environ 976 Hz sans subir de distorsion.
2. Le comportement face à vos contraintes de fonctionnementL'Arduino exécutera ces fonctions de manière virtuellement simultanée grâce aux interruptions : ### Le comportement face à vos contraintes de fonctionnement.
L'Arduino exécutera ces fonctions de manière virtuellement simultanée grâce aux interruptions :
- *Peu de changements de commandes DCC* : Le signal DCC applique une charge constante de micro-interruptions sur la broche D2 (détection des fronts d'ondes à haute fréquence). Toutefois, le décodage d'un message d'accessoire se fait en quelques microsecondes. Le fait qu'il y ait peu de changements de commandes signifie que la fonction principale de votre code (loop) sera très souvent disponible pour d'autres tâches. - *Peu de changements de commandes DCC* : Le signal DCC applique une charge constante de micro-interruptions sur la broche D2 (détection des fronts d'ondes à haute fréquence). Toutefois, le décodage d'un message d'accessoire se fait en quelques microsecondes. Le fait qu'il y ait peu de changements de commandes signifie que la fonction principale de votre code (loop) sera très souvent disponible pour d'autres tâches.
@@ -77,7 +79,10 @@ L'Arduino Nano gère ses tâches internes via des horloges appelées Timers. Vot
- *Changement lent de position du servo* : Pour faire bouger un servo lentement, la technique consiste à incrémenter sa position degré par degré avec un petit intervalle de temps - *Changement lent de position du servo* : Pour faire bouger un servo lentement, la technique consiste à incrémenter sa position degré par degré avec un petit intervalle de temps
**Le piège absolu à éviter** : ### Le piège absolu à éviter
Les delay()Pour garantir la simultanéité des tâches, vous ne devez pas utiliser la fonction delay() pour ralentir votre servo.Si vous écrivez delay(20); entre chaque degré du servo, l'Arduino va "geler". Bien que le DCC continue de fonctionner en tâche de fond grâce à son interruption, l'appel à la fonction cruciale Dcc.process(); (qui doit être exécutée en boucle continue dans le loop) sera bloqué pendant ce délai. Cela entraînera des pertes de paquets DCC ou des saccades.
**La bonne pratique** : Utilisez la technique des minuteurs logiciels sans blocage basée sur millis() (comme dans l'exemple officiel Blink Without Delay d'Arduino) pour cadencer le déplacement lent du servo. Les `delay()`. Pour garantir la simultanéité des tâches, il ne faut pas utiliser la fonction delay() pour ralentir le servo. Avec `delay(20);` entre chaque degré du servo, l'Arduino va "geler". Bien que le DCC continue de fonctionner en tâche de fond grâce à son interruption, l'appel à la fonction cruciale Dcc.process(); (qui doit être exécutée en boucle continue dans le loop) sera bloqué pendant ce délai. Cela entraînera des pertes de paquets DCC ou des saccades.
### La bonne pratique
Utiliser la technique des minuteurs logiciels sans blocage basée sur millis() pour cadencer le déplacement lent du servo.