Parlons Arduino > Débuter

Interruption petite énigme à résoudre

<< < (2/3) > >>

Rob1:
Oui j'ai déjà fait le test.
Il y a plus ou moins 600 µs d'écart entre les valeurs qui apparaissent identique en ms.

Je pourrait contourner le problème mais c'est toujours mieux de savoir pour progresser.

Rob1:
Je vais entreprendre le test suivant pour éviter l'instruction serial.print à chaque appel de fonction

Je vais faire produire à l'ATtiny un signal carré à 500Hz
Sur l' Arduino  je compterai les pulses et je ne "printerai" que toutes les 500 pulses
je verrai mieux la périodicité de la fonction interruption.

Jean-Luc:

--- Citation de: Rob1 le juillet 10, 2018, 11:19:47 am ---Oui j'ai déjà fait le test.
Il y a plus ou moins 600 µs d'écart entre les valeurs qui apparaissent identique en ms.

Je pourrait contourner le problème mais c'est toujours mieux de savoir pour progresser.

--- Fin de citation ---

Et donc à l'oscillo tu vois 2 fronts séparés de 600µs ?

Rob1:
Non je ne vois rien. Pourtant je suppose que mon étage d'entrée est peut-être en cause.

Il est constitué d'un simple module reflex infrarouge identique au Jpg ci-dessous sur lequel j'ai coupé la diode émetteur.

Suite au test, numéro 1, sous interruption avec une fréquence de signal de 100Hz, la périodicité de la tâche est proche de 5ms au lieu de 10ms attendu.

Info complémentaire
J'ai fait un nouveau test, numéro 2,  en délaissant la tâche interruption au profit du Loop (voir code) .
et là j'obtient bien une périodicité de 10ms (9,8 précisément) .


--- Code: ---  // déclaration de constantes
const int InputIR = 2;
int mem = 0;
volatile unsigned long CptIR2 = 0;
int IRState = 0;         // variable pour la lecture IR2

void setup() {
  Serial.begin(500000);
  Serial.println("Prog OK"); 
  pinMode(InputIR, INPUT); 
}

void loop() {
  IRState = digitalRead(InputIR);
  if (IRState==HIGH && mem==0){
    mem = 1;
    CptIR2 ++;
    if (CptIR2>99) {
      CptIR2=0;   
      Serial.println(micros());     
    }
  }
  if (IRState==LOW && mem==1){
    mem = 0;
  }
}
--- Fin du code ---

Rob1:
Suite et sans doute fin.
Comme il n'était pas question de douter de l'Arduino et
que mon si petit programme ne semblait pas présenter de faille
je me suis résolu à changer mon capteur pour un autre type, voir Jpg.

Et miracle cela fonctionne correctement.
Je suppose qu'avec l'autre il y a un pulse que le scope ne voit pas.
Comme toujours les bons outils font les bons ouvriers et inversement.

Merci à Jean Luc pour ton aide

Rob1 le chef de gare.........

Je vais quand même refaire un test avec un autre capteur du premier type
pour voir si c'est un problème de modèle ou d'exemplaire.

Navigation

[0] Index des messages

[#] Page suivante

[*] Page précédente

Utiliser la version classique