Go Down

Topic: problémes utilisation "millis" avec interution (Read 688 times) previous topic - next topic

babas

Bonjour

J'ai un soucis avec l'utilisation de la fonction "millis() " elle me renvoie la même valeur à chaque tour de la fonction "loop()" lorsque je produit environ 1330 interruption par seconde.

le code executé dans l'interution est le suivant:

Code: [Select]
void LeftEncoderEvent()
{
 if (digitalRead(LeftEncoderPinA) == HIGH)
 {
   if (digitalRead(LeftEncoderPinB) == LOW)
     ++nbPasGauche;
   else
     --nbPasGauche;
 }
 else
 {
   if (digitalRead(LeftEncoderPinB) == LOW)
     --nbPasGauche;
   else
     ++nbPasGauche;
 }
}


merci d'avance pour vos reponse

#1
Nov 13, 2010, 03:26 pm Last Edit: Nov 13, 2010, 03:27 pm by vincelge Reason: 1
Lu sur http://arduino.cc/fr/Main/AttachInterrupt:

A l'intérieur de la fonction attachée à l'interruption, la fonction delay ne fonctionne pas et la valeur renvoyée par millis ne s'incrémente pas. Les données séries reçues pendant l'exécution de la fonction sont perdues.

Avec 1330 interruptions par secondes, est-il nécessaire de les mettre en oeuvre ?
Le test peut peut-être être directement effectué dans le loop, non ?
En dehors du traitement des inter, le code fait quoi ?
Tous les jours, je roule en Electrique
Arretons de polluer !

Moi & mon Ardu

babas

En faites j'essaie de faire un asservissement donc dans la le "loop" je voudrai réaliser toutes les secondes le calcul de mes pids.La fonction 'millis" est utilisé dans la boucle principale pas dans l'interruption.

Je les placé dans des interruptions car par la suite je souhaite réaliser le compte des impulsions en quadrature donc avoir plus d'interruptions voir changer de codeurs pour avoir une meilleur précision.

Korman

#3
Nov 13, 2010, 04:06 pm Last Edit: Nov 13, 2010, 04:07 pm by Korman Reason: 1
Babas,

la fonction dans ton message ne parait pas être problématique. La plus part de mes problèmes avec millis() étaient lié soit à des fonctions d'interruption avec des boucles, soit que j'ai tripoté le Timer0 qui est responsable de conter les millisecondes, soit que j'avais désactivé les interruptions avec cli() ou SREG sans les réactiver.

Korman

Go Up