Problème pour lire les canaux du récepteur fs-x6b
✔ Ce sujet est résolu
frangipane
42 Messages
Le vendredi 29 janvier 2021 à 14:14:59
Bonjour,
Je suis actuellement en train de suivre le tuto de lobodol sur la
réalisation d'un drone. Je suis déjà bien avancé j'ai repris son code
chapitre 6.
Mais voici le problème : j'ai une carte arduino méga. J'ai donc essayé
de comprendre comment manipule des ports à la main. J'ai finalement
réussi à lire trois canaux sur quatre.
Avec l'ATmega 2560 les bornes 8 et 9 n'ont pas d'interruption, j'utilise donc les bornes 10, 11, 12 et 13.
voir : https://arduino-forth.com/article/arduino_cartes_arduinoMega2560pinout
et ça sa peut être utile aussi :
https://ww1.microchip.com/downloads/en/devicedoc/atmel-2549-8-bit-avr-microcontroller-atmega640-1280-1281-2560-2561_datasheet.pdf
en recherchant "PCICR" avec ctrl-f.
Pour une raison que je ne comprend pas, la borne 10 n'interprète rien.
Le problème ne vient pas du récepteur, j'ai pu tester avec ce petit code :
Voiçi les parties du code que j'ai modifier et qui pose problème du coup:
et aussi ca pour chaque condition :
Voila, voila, merci d'avance pour vos réponces !
Je suis actuellement en train de suivre le tuto de lobodol sur la
réalisation d'un drone. Je suis déjà bien avancé j'ai repris son code
chapitre 6.
Mais voici le problème : j'ai une carte arduino méga. J'ai donc essayé
de comprendre comment manipule des ports à la main. J'ai finalement
réussi à lire trois canaux sur quatre.
Avec l'ATmega 2560 les bornes 8 et 9 n'ont pas d'interruption, j'utilise donc les bornes 10, 11, 12 et 13.
voir : https://arduino-forth.com/article/arduino_cartes_arduinoMega2560pinout
et ça sa peut être utile aussi :
https://ww1.microchip.com/downloads/en/devicedoc/atmel-2549-8-bit-avr-microcontroller-atmega640-1280-1281-2560-2561_datasheet.pdf
en recherchant "PCICR" avec ctrl-f.
Pour une raison que je ne comprend pas, la borne 10 n'interprète rien.
Le problème ne vient pas du récepteur, j'ai pu tester avec ce petit code :
void setup() {
pinMode(3, INPUT);
Serial.begin(9600);
}
void loop() {
noInterrupts();
unsigned long duration = pulseIn(3, HIGH);
interrupts();
// Affiche la durée de l'impulsion (en us) sur le port série
Serial.println(duration);
}
Voiçi les parties du code que j'ai modifier et qui pose problème du coup:
PCICR |= (1 << PCIE0);
PCMSK0 |= (1 << PCINT4);
PCMSK0 |= (1 << PCINT5);
PCMSK0 |= (1 << PCINT6);
PCMSK0 |= (1 << PCINT7);
et aussi ca pour chaque condition :
(PINB & B0001000) // canal 10
(PINB & B0010000) // canal 10
(PINB & B0100000) // canal 10
(PINB & B1000000) // canal 10
Voila, voila, merci d'avance pour vos réponces !
Le vendredi 29 janvier 2021 à 15:03:47
Salut frangipane et bienvenue !
Je viens de relire la datasheet de l'ATMega et tu as correctement
configuré l'activation des interruptions PCINT4, PCINT5, PCINT6 et
PCINT7 via les registres.
Donc déjà bravo pour ça car c'est pas forcément évident !
Tu dis que rien ne se passe lorsqu'un signal est appliqué à la broche 10
? Et sur les autres broches, les interruptions se déclenchent-elles
bien ?
Tu as bien déclaré la fonction ISR(PCINT0_vect) {} ?
Et normalement les broches 10 à 13 sont bien sur le port B...
C'est à se demander si la broche 10 n'est pas KO. Que se passe-t-il si tu l'utilises simplement en PWM avec la fonction analogWrite() ?
Je viens de relire la datasheet de l'ATMega et tu as correctement
configuré l'activation des interruptions PCINT4, PCINT5, PCINT6 et
PCINT7 via les registres.
Donc déjà bravo pour ça car c'est pas forcément évident !
Tu dis que rien ne se passe lorsqu'un signal est appliqué à la broche 10
? Et sur les autres broches, les interruptions se déclenchent-elles
bien ?
Tu as bien déclaré la fonction ISR(PCINT0_vect) {} ?
Et normalement les broches 10 à 13 sont bien sur le port B...
C'est à se demander si la broche 10 n'est pas KO. Que se passe-t-il si tu l'utilises simplement en PWM avec la fonction analogWrite() ?
Le vendredi 29 janvier 2021 à 15:07:51
Oh là ! Il te manque un 0 sur ta manipulation de ports ! C'est 8 bits pas 7 !
(PINB & B00010000) // broche 10
(PINB & B00100000) // broche 11
(PINB & B01000000) // broche 12
(PINB & B10000000) // broche 13
frangipane
42 Messages
Le vendredi 29 janvier 2021 à 18:35:09
OUI !!!
Le petit 0 qui manquait !
Merci beaucoup, vous avez l'œil !
Vous m'avez fait économiser beaucoup de temps merci !
Le petit 0 qui manquait !
Merci beaucoup, vous avez l'œil !
Vous m'avez fait économiser beaucoup de temps merci !