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
void uvlo_drain_reset()
{
// burn all that residual power
wdt_enable(WDTO_1S);
WRITE(BEEPER,HIGH);
while(1);
}
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);
printf_P(_N("UVLO_TINY - end %d\n"), _millis() - time_start);
// burn all that residual power
wdt_enable(WDTO_1S);
WRITE(BEEPER,HIGH);
while(1);
uvlo_drain_reset();
}
#endif //UVLO_SUPPORT
@ -10760,12 +10764,19 @@ void setup_uvlo_interrupt() {
DDRE &= ~(1 << 4); //input pin
PORTE &= ~(1 << 4); //no internal pull-up
//sensing falling edge
// sensing falling edge
EICRB |= (1 << 0);
EICRB &= ~(1 << 1);
//enable INT4 interrupt
// enable INT4 interrupt
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) {