Parlons Arduino > Débuter

Interruption petite énigme à résoudre

(1/3) > >>

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

[0] Index des messages

[#] Page suivante

Utiliser la version classique