#include "lights.h"
-void hw_setup()
+static void hw_setup()
{
wdt_enable(WDTO_1S);
+ init_battery();
init_pwm();
init_adc();
init_tmr();
set_sleep_mode(SLEEP_MODE_IDLE);
}
-void hw_suspend()
+static void hw_suspend()
{
susp_pwm();
susp_adc();
void power_down()
{
+ uint16_t wake_count = 0;
+ unsigned char btn;
+
+ hw_suspend();
+sleep_again:
// enable PCINT14, so that user can wake up later
GIMSK |= _BV(PCIE1);
PCMSK1 |= _BV(PCINT14);
GIMSK &= ~_BV(PCIE1);
PCMSK1 &= ~_BV(PCINT14);
+ // allow wakeup by long button-press only
+ for (btn = 0; btn < 5; btn++) {
+ if ((PINB & _BV(PB6)) != 0) {
+ wake_count++;
+ goto sleep_again;;
+ }
+ _delay_ms(100);
+ }
+
+ // ok, so I will wake up
+ log_byte(0xb1);
+ log_word(wake_count);
+ log_flush();
+
hw_setup();
}
int main(void)
{
log_init();
+
power_usi_disable(); // Once for lifetime
+ ACSRA |= _BV(ACD); // disable analog comparator
log_set_state(3);
hw_setup();
- hw_suspend();
power_down();
sei();