Skip to main content
Recent Posts
21
C Code / WatchDog Timer
Last post by tino -
Code: [Select]
#include <avr/sleep.h>
#include <avr/power.h>
#include <avr/wdt.h>

/*

 Watchdog Timer Prescale Select
 
 WDP3   WDP2 WDP1 WDP0   Number of WDT     Typical Time-out at Oscillator Cycles     VCC = 5.0V
 
 0    0    0      0             2K (2048) cycles       16 ms
 0    0    0      1             4K (4096) cycles       32 ms
 0    0    1      0             8K (8192) cycles       64 ms
 0    0    1      1            16K (16384) cycles      0.125 s
 0    1    0      0            32K (32768) cycles      0.25 s
 0    1    0      1            64K (65536) cycles      0.5 s
 0    1    1      0            128K (131072) cycles    1.0 s
 0    1    1      1            256K (262144) cycles    2.0 s
 1    0    0      0            512K (524288) cycles    4.0 s
 1    0    0      1            1024K (1048576) cycles  8.0 s
 
 */

unsigned int i = 0;

void setup(void) {

  Serial.begin(57600);

  MCUSR &= ~(1 << WDRF);                           // reset status flag
  WDTCSR |= (1 << WDCE) | (1 << WDE);              // enable configuration changes
  WDTCSR = (1<< WDP0) | ( 1 << WDP3);              // set the prescalar = 9
  WDTCSR |= (1 << WDIE);                           // enable interrupt mode
 
}


void loop(void) {

  set_sleep_mode(SLEEP_MODE_PWR_DOWN);             // select the watchdog timer mode
  sleep_enable();                                  // enable the sleep mode ready for use
  sleep_mode();                                    // trigger the sleep

  Serial.print("Woken ");
  Serial.println(i++);
  Serial.flush();
  sleep_disable();                                 // prevent further sleeps


}

ISR(WDT_vect) {
}