Auteur Sujet: Problème de timer 1 sur Mega  (Lu 16552 fois)

JPM06

  • Newbie
  • *
  • Messages: 49
    • Voir le profil
Problème de timer 1 sur Mega
« 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
« Modifié: février 20, 2020, 12:15:57 pm par JPM06 »

JPM06

  • Newbie
  • *
  • Messages: 49
    • Voir le profil
Re : Problème de timer 1 sur Mega
« Réponse #1 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!