LOCODUINO

Parlons Arduino => Débuter => Discussion démarrée par: JPM06 le février 19, 2020, 11:55:19 am

Titre: Problème de timer 1 sur Mega
Posté par: JPM06 le février 19, 2020, 11:55:19 am
Bonjour à tous,
Débutant en Arduino, j'essaie d'utiliser le timer 1 sans interruption ni rechargement, mais j'obtiens un résultat erroné quant au timing.
Comme un listing vaut mieux qu'un long discours, voici le code, resucée d'un exemple pris ici :
    /*
     * Clignotement d'une DEL (LED en anglais) par timer 1.
     */
    const byte Led = 13; // Pour utiliser la LED du module
    void setup () {
      pinMode (Led, OUTPUT);
      TCCR1A = 0;
      cli(); //au cas où
      // horloge de base 16MHz ->  période 0,0625 µs. Compteur à 16 bits
      TCCR1B = 0b00000011;      // division par 64, on compte en 4µs, on déborde toutes les 262,144ms
      TIFR1 = 0b00000001;       // TOV1
      TIMSK1 = 0b00000000; // Interruption locale bloquée par TOIE1
    }
     
    int varCompteur = 0; // La variable compteur
     
    void loop () {
      if (bitRead (TIFR1, 0) == 1) {       // Flag TOV2 mis à 1 ?
          bitSet (TIFR1, TOV1);      // Remise à zéro du flag TOV1 (voir texte)
          //pour vérifier les 262ms on compte 10 fois
          if (varCompteur++ > 10) { // <<<<<<<<<<<<<<<<<<<< chrono: 32s au lieu de 26,2s
              varCompteur = 0;         // On recommence un nouveau cycle
              digitalWrite (Led, !digitalRead(Led)); // Inversion de la LED     
          }
        }
      }
Pourquoi cette erreur ?. Y a-t-il interférence avec une autre ressource ?
Merci pour toute piste.
JPM06
Titre: Re : Problème de timer 1 sur Mega
Posté par: JPM06 le février 20, 2020, 12:24:53 pm
Finalement le problème était au niveau du comptage: pour compter 10 fois la durée du timer, il faut écrire:if (++varCompteur == 10)ou bien
Citer
if (varCompteur++ == 9)
ou encoreif (++varCompteur > 9).
Pour de grandes valeurs du compteur comme 125 on ne voit pas trop la différence, mais pour de faibles valeurs, si. Là c'est bon.
Une erreur de débutant en C!