Update Doc
This commit is contained in:
+11
-6
@@ -47,7 +47,7 @@ Récapitulatif des CVs de notre accessoire
|
||||
| CV 102 | Valeur minimale du servo (0 à 180) |
|
||||
| CV 519 | Version du décodeur (Lecture seule) -1- Hélico module |
|
||||
| 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
|
||||
|
||||
@@ -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.
|
||||
|
||||
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 :
|
||||
|
||||
@@ -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.
|
||||
|
||||
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.
|
||||
|
||||
@@ -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
|
||||
|
||||
**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.
|
||||
### Le piège absolu à éviter
|
||||
|
||||
**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.
|
||||
Reference in New Issue
Block a user