]> www.fi.muni.cz Git - bike-lights.git/blobdiff - firmware/tmr.c
pwm.c: channels running - visible from the outside
[bike-lights.git] / firmware / tmr.c
index 37b240b5d65245898722036d00f740ad322b1350..7a31f19e486e2ab5edd720d36f5ea88255e273e5 100644 (file)
@@ -1,42 +1,33 @@
 #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) {
        ++jiffies;
 
-       pwm_timer();
+       timer_check_buttons();
+       patterns_next_tick();
+       pwm_disable_if_not_needed();
+       timer_start_slow_adcs();
 
-       if (--pattern_div == 0) {
-               timer_check_buttons();
-               patterns_next_tick();
-               pattern_div = PATTERN_DIV;
-       }
+       if ((jiffies & 0x7FF) == 0)
+               ambient_log_min_max();
 
-       timer_start_adcs();
+       WDTCR |= _BV(WDIE); // avoid WDT reset next time
 }