Refuse to start a print if power is lost before arming uvlo

If power has been lost during startup already a falling edge would be
skipped, causing the print to continue and lose its state without
being able to save again.

Check for a low line after arming the interrupt and simply wait
for reset.
This commit is contained in:
Yuri D'Elia 2020-01-29 16:06:54 +01:00
parent 200cdde1af
commit b46dc59fad

View File

@ -10480,6 +10480,14 @@ void serialecho_temperatures() {
} }
#ifdef UVLO_SUPPORT #ifdef UVLO_SUPPORT
void uvlo_drain_reset()
{
// burn all that residual power
wdt_enable(WDTO_1S);
WRITE(BEEPER,HIGH);
while(1);
}
void uvlo_() void uvlo_()
{ {
@ -10709,11 +10717,7 @@ void uvlo_tiny()
eeprom_update_word((uint16_t*)EEPROM_POWER_COUNT_TOT, eeprom_read_word((uint16_t*)EEPROM_POWER_COUNT_TOT) + 1); eeprom_update_word((uint16_t*)EEPROM_POWER_COUNT_TOT, eeprom_read_word((uint16_t*)EEPROM_POWER_COUNT_TOT) + 1);
printf_P(_N("UVLO_TINY - end %d\n"), _millis() - time_start); printf_P(_N("UVLO_TINY - end %d\n"), _millis() - time_start);
uvlo_drain_reset();
// burn all that residual power
wdt_enable(WDTO_1S);
WRITE(BEEPER,HIGH);
while(1);
} }
#endif //UVLO_SUPPORT #endif //UVLO_SUPPORT
@ -10766,6 +10770,13 @@ void setup_uvlo_interrupt() {
// enable INT4 interrupt // enable INT4 interrupt
EIMSK |= (1 << 4); EIMSK |= (1 << 4);
// check if power was lost before we armed the interrupt
if(!(PINE & (1 << 4)))
{
SERIAL_ECHOLNPGM("INT4");
uvlo_drain_reset();
}
} }
ISR(INT4_vect) { ISR(INT4_vect) {