#include <avr/io.h>
#include <avr/interrupt.h>
+#include <avr/wdt.h>
#include "lights.h"
volatile uint16_t jiffies;
-#define PATTERN_DIV 10 // clk/10
-static unsigned char pattern_div;
void init_tmr()
{
- TCCR0A = _BV(WGM00);
- TCCR0B = _BV(CS02) | _BV(CS00); // CLK/1024 = 1 kHz
- OCR0A = 5; // 200 Hz
- TIMSK |= _BV(OCIE0A);
-
- jiffies = 0;
- pattern_div = PATTERN_DIV;
+ wdt_enable(WDTO_60MS);
+ WDTCR |= _BV(WDIE); // interrupt mode, 64 ms
}
void susp_tmr()
{
- TCCR0A = TCCR0B = 0;
- TIMSK &= ~_BV(OCIE0A);
- TIFR = 0;
+ wdt_disable();
}
-ISR(TIMER0_COMPA_vect)
-{
+ISR(WDT_vect) {
+ WDTCR |= _BV(WDIE); // avoid WDT reset next time
++jiffies;
-
- pwm_timer();
-
- if (--pattern_div == 0) {
- timer_check_buttons();
- patterns_next_tick();
- pattern_div = PATTERN_DIV;
- }
-
- timer_start_adcs();
}