]> www.fi.muni.cz Git - heater.git/commitdiff
Low battery bugfix: master
authorJan "Yenya" Kasprzak <kas@fi.muni.cz>
Sun, 21 Dec 2014 22:05:48 +0000 (23:05 +0100)
committerJan "Yenya" Kasprzak <kas@fi.muni.cz>
Sun, 21 Dec 2014 22:11:23 +0000 (23:11 +0100)
- when the battery is low, we have previously disabled the load,
which caused the battery voltage to increase slightly, so we never
switched the system off, and the load was switched on only for a brief
periods of time.

Now we have the following battery voltage levels:

< 3.0 V: we do not enable the load, blink the status
LED faster, and after 60 iterations, power the system off
<3.0 V .. 3.15 V): we still enable the load, but switch
the system off after 60 iterations of LED blink
<3.15 V .. 3.45 V): battery is low
<3.45 V .. 3.8 V): battery is OK
>= 3.8 V: battery is fully charged

firmware/main.c

index a6cc1a8366350e69b728ace665e976479805a1ed..65801e81b05fd74192238c0d9892c2d87c9c0b24 100644 (file)
@@ -79,9 +79,10 @@ static volatile uint16_t batt_on, batt_off; // measured voltage
                                * (1024UL * (mV)) \
                                / (6UL * ADC_1100MV_VALUE)) >> 8))
 static unsigned char batt_levels[] = {
                                * (1024UL * (mV)) \
                                / (6UL * ADC_1100MV_VALUE)) >> 8))
 static unsigned char batt_levels[] = {
-       MV_TO_ADC8(3350),
-       MV_TO_ADC8(3700),
-       MV_TO_ADC8(3900),
+       MV_TO_ADC8(3000), // below this, do not enable load, and switch off
+       MV_TO_ADC8(3150), // below this, switch off after some time
+       MV_TO_ADC8(3450), // battery low
+       MV_TO_ADC8(3800), // battery ok, above that almost full
 };
 #define BATT_N_LEVELS  (sizeof(batt_levels) / sizeof(batt_levels[0]))
 
 };
 #define BATT_N_LEVELS  (sizeof(batt_levels) / sizeof(batt_levels[0]))
 
@@ -395,7 +396,7 @@ static void status_led_next_pattern()
                }
        } else {
                unsigned char b_level = battery_level();
                }
        } else {
                unsigned char b_level = battery_level();
-               if (b_level) {
+               if (b_level > 1) {
                        battery_exhausted = 0;
                } else if (battery_exhausted) {
                        if (!--battery_exhausted)
                        battery_exhausted = 0;
                } else if (battery_exhausted) {
                        if (!--battery_exhausted)
@@ -404,8 +405,8 @@ static void status_led_next_pattern()
                        battery_exhausted = LED_BATTEMPTY_COUNT;
                }
 
                        battery_exhausted = LED_BATTEMPTY_COUNT;
                }
 
-               n_blinks = b_level + 1;
-               blink_on_time = 4;
+               n_blinks = b_level ? b_level : 1;
+               blink_on_time = b_level ? 4 : 2;
                blink_off_time = 0;
        }
 
                blink_off_time = 0;
        }