static void hw_setup()
{
- wdt_enable(WDTO_1S);
+ power_all_disable();
init_battery();
init_pwm();
init_adc();
- init_tmr();
+ init_wdt();
+
init_buttons();
init_pwmled();
- init_gpio();
- init_ambient();
init_pattern();
init_control();
{
susp_pwm();
susp_adc();
- susp_tmr();
- susp_gpio();
+ susp_wdt();
+
susp_buttons();
- wdt_disable();
+ power_all_disable();
}
void power_down()
{
init_log();
- power_usi_disable(); // Once for lifetime
- ACSRA |= _BV(ACD); // disable analog comparator
-
log_set_state(3);
hw_setup();
sei();
#if 1
while (1) {
- wdt_reset();
- sleep_mode();
+ cli();
+ if (pwm_running) {
+ set_sleep_mode(SLEEP_MODE_IDLE);
+ } else if (adc_running) {
+ set_sleep_mode(SLEEP_MODE_ADC);
+ } else {
+ set_sleep_mode(SLEEP_MODE_PWR_DOWN);
+ }
+ // keep BOD active, no sleep_bod_disable();
+ sei();
+ sleep_cpu();
+ sleep_disable();
}
#endif