Watchdog Timer - Attiny - Erreurs de temps

Salut la communauté,

Je suis en train de me faire uns station météo avec un ESP-07. Vu que l'emplacement est très éloigné et difficile d'accès, je souhaite ajouter un watchdog "externe" à mon ESP pour le rebooter en cas de freeze ou autre...

L'idée est simple :

  • l'ESP envoie un signal tous les X temps (ce sera à chaque loop je pense)
  • l'Attiny lui reçois ce signal.
  • Si aucun signal reçu après 5 secondes, il reset l'ESP via RST.

Côté ESP je suis OK...
Côté Attiny : mon programme est OK. Le voici (Testé sur Arduino, fonctionne impec)

const int ResetPin =  4;
const int EspStatusPin =  3;
const int ErrorLed = 13;      
unsigned long previousMillis = 0;         // Utilisation d'un unsigned long plutôt qu'un Int car grandes valeurs
unsigned long currentMillis = 0;          // Sert à calculer l'interval de temps écoulé depuis le dernier check du watchdog
const long interval = 5000;              // interval qui déclenchera le reset si on atteint ce seuil (ms)

void setup() {
  // set the digital pin as output:
  pinMode(ResetPin, OUTPUT);              // Output relée au RST de l'ESP pour reseter celui-ci
  pinMode(ErrorLed, OUTPUT);              // Output qui active une LED quand le watchdog est déclenché
  pinMode(EspStatusPin, INPUT);           // Input dont on contrôle l'état
  digitalWrite(ResetPin, HIGH);           // RST est en logique négative (liaison GND = RESET), donc on active output pour ne pas reset l'ESP pour rien
  digitalWrite(ErrorLed, HIGH);
  delay(200);
  digitalWrite(ErrorLed, LOW);            // Simplement pour savoir que l'Attiny est en boot
}

void loop() {
  currentMillis = millis();
  if (digitalRead(EspStatusPin) == true){
    previousMillis = currentMillis;       // On réinitialise la valeur de l'interval de temps 
  }
  if (currentMillis - previousMillis >= interval) {
    previousMillis = currentMillis;       // On réinitialise la valeur de l'interval de temps 
    digitalWrite(ResetPin, LOW);          // On reset l'ESP
    delay(50);                            // Tempo "pour le fun"
    digitalWrite(ResetPin, HIGH);         // On relâche le RST de l'ESP
    digitalWrite(ErrorLed, HIGH);
    delay(1000);
    digitalWrite(ErrorLed, LOW);
  }
}

Le problème avec les Attiny : Le temps est TOTALEMENT faux...
J'ai tenté d'injecter Blink dans mes 3 attiny (25, 45 et 85), et le résultat est le même... 200ms Attiny = 1500ms env en réel :frowning:

Une piste à tout hasard ?
est-ce le fait que les Attiny n'aient pas de Quartz qui puisse créer ce défaut de mesure de temps ?

Ah... je précise... je suis débutant... enfin... ça fait quelques années que je fais joujou avec ces petites puces, mais je n'ai aucun bagage en prog... d'où mes programmes relativement simple (Le "If" c'est la vie :smiley: )

Merci d'avance !!!

la configuration "fuses" des attiny est laissée par défaut ?
résumé bref: un attiny vierge a une configuration osc rc int 8mhz et clockdiv/8, cad qu'il tourne à 1Mhz et pas à 8, il est 8x plus lent : 200msx8=1600ms
quand on compile avec ide arduino :
il faut choisir dans le menu « Outil » / « Clock » / « 8Mhz INTERNAL ».
puis sélectionner dans le menu « Outil » « Graver la séquence d’initialisation » qui en réalité ne fait que pgmer les fusibles de configuration, ensuite on téléverse le "croquis" destiné à l'attiny