Parlons Arduino > Débuter
Interruption petite énigme à résoudre
Rob1:
Bonsoir à tous
Je dit petite énigme car je suis convaincu qu'elle ne résistera pas à la pertinence de certains d'entre vous.
Contexte un ATtiny85 pilote un émetteur Infrarouge (IR) dont le faisceau est détecté par un récepteur
raccordé à la broche 2 d'un Arduino Uno.
La trame, telle que visible sur l'image ci-dessous montre un bit de Start de 100ms suivit de 6 bits de 20 ms
chacun séparé par un LOW de 20ms.
Le programme ci-dessous est volontairement simplifié pour mes test, particulièrement la fonction ISR
void DecodeIR2() {
Serial.println(millis());
}
Le tableau excel suivant liste dans
la première colonne contient le résultat du Serial.println(millis());
la seconde est le calcul de la période correspondante
Vous pouvez constater que l'instruction Serial.println(millis()); semble être exécutée deux fois consécutivement.
Merci de votre aide
Amicalement Roland
--- Code: --- // déclaration de constantes
const int InputIR = 2;
const int ledPin12 = 12;
volatile unsigned long TimeIR2 = 0;
volatile unsigned long TimeIR2mem = 0;
volatile unsigned long CptIR2 = 0;
int IRState = 0; // variable pour la lecture IR2
void setup() {
Serial.begin(500000);
Serial.println("Prog OK");
// initialisation de la broche 2 en Input
// pinMode(InputIR, INPUT);
// initialisation de la broche 12 en Output
pinMode(ledPin12, OUTPUT);
attachInterrupt(0, DecodeIR2, RISING);
}
void loop() {
// copie de l'entrée IR dans la sortie 12
// IRState = digitalRead(InputIR);
// digitalWrite(ledPin12, IRState);
}
void DecodeIR2() {
Serial.println(millis());
}
--- Fin du code ---
Rob1:
Complément d'info
J'ai ajouté un compteur dans la fonction d'interruption comme suit
void DecodeIR2() {
CptIR2 ++;
Serial.println(CptIR2);
Serial.println(millis());
}
et j'obtient ceci sur la console
Prog OK
1
38
2
38
3
77
4
77
5
116
6
116
On constate que la fonction d'interruption est systématiquement visitée deux fois dans la même milliseconde !!! ???
J'hésite à solliciter Hercule Poirot il est en route pour Saint-Pétersbourg pour voir les Belges et les Anglais ;) :D ;D
Jean-Luc:
Bonjour Rob1
En branchant l'oscilloscope sur la broche 2 du Uno, que voit on ?
Rob1:
Bonjour Jean Luc
Il est branché sur la broche 2.
J'ai pris un deuxième cliché à 50 µs voir mieux voir le front.
A noté que l'oscilloscope est un simple DS202 je ne suis pas sûr des ses perf.
Merci de me consacrer un peu de ton temps
Amicalement Roland
Jean-Luc:
Et si tu affiches micros() au lieu de millis() ?
Navigation
[#] Page suivante
Utiliser la version classique