Pages: [1]   Go Down
Author Topic: problémes utilisation "millis" avec interution  (Read 543 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Newbie
*
Karma: 0
Posts: 2
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
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
Logged

Cergy
Offline Offline
Full Member
***
Karma: 0
Posts: 137
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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 ?
« Last Edit: November 13, 2010, 09:27:59 am by vincelge » Logged

Tous les jours, je roule en Electrique
Arretons de polluer !

Moi & mon Ardu

0
Offline Offline
Newbie
*
Karma: 0
Posts: 2
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Central Europe
Offline Offline
Edison Member
*
Karma: 6
Posts: 1220
Use the Source, Luke.
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
« Last Edit: November 13, 2010, 10:07:08 am by Korman » Logged

Pages: [1]   Go Up
Jump to: