aboutsummaryrefslogtreecommitdiff
path: root/hw
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--hw/hank/emisar-d3aa/anduril.h4
-rw-r--r--hw/hank/emisar-d3aa/hwdef.c16
-rw-r--r--hw/hank/emisar-d3aa/hwdef.h3
3 files changed, 18 insertions, 5 deletions
diff --git a/hw/hank/emisar-d3aa/anduril.h b/hw/hank/emisar-d3aa/anduril.h
index a80557d..e4e4458 100644
--- a/hw/hank/emisar-d3aa/anduril.h
+++ b/hw/hank/emisar-d3aa/anduril.h
@@ -44,6 +44,10 @@
#define HALFSPEED_LEVEL 41
#define QUARTERSPEED_LEVEL 40 // seems to run fine at 10kHz/4, try reducing more?
+// should be about 300 mA or ~100 lm,
+// to avoid overloading firmware flashing adapters
+#define WEAK_BATTERY_TEST_MAX_LEVEL 75
+
#define RAMP_SMOOTH_FLOOR 1
#define RAMP_SMOOTH_CEIL 130 // 50% power
// 10 30 [50] 70 90 110 130
diff --git a/hw/hank/emisar-d3aa/hwdef.c b/hw/hank/emisar-d3aa/hwdef.c
index 8aaa893..36c6fed 100644
--- a/hw/hank/emisar-d3aa/hwdef.c
+++ b/hw/hank/emisar-d3aa/hwdef.c
@@ -123,9 +123,10 @@ uint8_t quick_volt_measurement() {
void detect_weak_battery() {
// guess at the cell strength with a load test...
- // - measure voltage while LEDs off
+ // - measure voltage with LEDs off
// - measure again with LEDs on
// - determine how much to limit power
+ // (ramp up until battery becomes unstable)
// - blink to indicate weak battery mode, if active
ramp_level_hard_limit = 0;
@@ -162,17 +163,23 @@ void detect_weak_battery() {
}
set_level(0);
- // TODO? limit NiMH to ~half power, even if it passed the sag test?
- // (and if so, blink 2X for NiMH, 3X for alkaline)
+ // Blink again if not in full-power mode:
+ // - 1 blink total: Strong Li-ion cell, full power enabled
+ // - 2 blinks: Strong AA cell, max AA power enabled
+ // (not used on this driver, strong AA uses mode 1)
+ // - 3 blinks: Weak battery, power severely limited
uint8_t extra_blinks = 0;
- if (ramp_level_hard_limit) extra_blinks ++;
+ if (ramp_level_hard_limit) extra_blinks += 2;
for (uint8_t i=0; i<extra_blinks; i++) {
delay_4ms(300/4);
blink_once();
}
+ #ifdef USE_WEAK_BATTERY_PROTECTION_READOUT
+ // this numeric display isn't really needed by default,
+ // but the code remains in case anyone wants to use it
if (ramp_level_hard_limit) {
delay_4ms(255);
// not booted far enough for this to work yet
@@ -190,6 +197,7 @@ void detect_weak_battery() {
blink_once();
}
}
+ #endif // ifdef USE_WEAK_BATTERY_PROTECTION_READOUT
}
#endif // ifdef USE_WEAK_BATTERY_PROTECTION
diff --git a/hw/hank/emisar-d3aa/hwdef.h b/hw/hank/emisar-d3aa/hwdef.h
index 7fbffbe..c675208 100644
--- a/hw/hank/emisar-d3aa/hwdef.h
+++ b/hw/hank/emisar-d3aa/hwdef.h
@@ -119,7 +119,8 @@ enum CHANNEL_MODES {
// (also helps protect firmware flashing adapters from overload)
#define USE_RAMP_LEVEL_HARD_LIMIT
#define USE_WEAK_BATTERY_PROTECTION
-#define WEAK_BATTERY_TEST_MAX_LEVEL 75 // about 300 mA
+// define this next to the ramp table instead
+//#define WEAK_BATTERY_TEST_MAX_LEVEL 75 // about 300 mA
#define WEAK_BATTERY_SAG_THRESHOLD_AA (3*4) // 0.3 V
#define WEAK_BATTERY_SAG_THRESHOLD_LIION (6*4) // 0.6 V