слишком долго переходит в сон мк

sasken
Offline
Зарегистрирован: 28.10.2015

Здравствуйте.

понадобилось работать со сном мк atmega328. тактируюсь от внешнего кварца 8 МГц с делителем на 8 во фьюзах.

программа типа:

void loop() {
      digitalWrite(test_pin, f);
delay(500);
f=!f;
}

работает замечательно и на осциллографе я вижу меандр с полсекунды.

но стоит реализовать программу через сон:

void loop() {
      wdt_enable(WDTO_500MS); //Задаем интервал сторожевого таймера (0.5с)
      WDTCSR |= (1 << WDIE); //Устанавливаем бит WDIE регистра WDTCSR для разрешения прерываний от сторожевого таймера
      set_sleep_mode(SLEEP_MODE_EXT_STANDBY);
      sleep_mode();
      digitalWrite(test_pin, f);

}

ISR (WDT_vect) {
  wdt_disable(); 
  f=!f;
}

так время увеличивается примерно на 25 мс итого меандр получается 525 мс.

как исправить это?

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

sasken пишет:

как исправить это?

Боюсь, что никак. Вочдог штука приблизительная и весьма сильно зависит от напряжения питания и температуры см. п. 9.2.2 и рисунок 31-319 в даташите.

sasken
Offline
Зарегистрирован: 28.10.2015

Спасибо за ответ