aboutsummaryrefslogtreecommitdiff
path: root/hw/thefreeman/avr32dd20-devkit
diff options
context:
space:
mode:
authorSelene ToyKeeper2023-11-22 05:34:26 -0700
committerSelene ToyKeeper2023-11-22 05:34:26 -0700
commitbaaa035cf93340b8f2c626bdba47e8066cf40067 (patch)
tree10114a3fa02f301c41da8b07619e146a14186f28 /hw/thefreeman/avr32dd20-devkit
parentgot ADC voltage+temp working on avrdd... but broke all other builds/MCUs (diff)
downloadanduril-baaa035cf93340b8f2c626bdba47e8066cf40067.tar.gz
anduril-baaa035cf93340b8f2c626bdba47e8066cf40067.tar.bz2
anduril-baaa035cf93340b8f2c626bdba47e8066cf40067.zip
ADC voltage: battcheck 3 digits, fixed t1616, switched back to 8-bit internal volt unit
Before this branch, `voltage` was 6 bits: Volts * 10 A couple patches ago, I upgraded it to 16 bits: 65535 * Volts / 10.24 That costs too much extra ROM on attiny85 though, for extra precision it doesn't even use... so I switched back to an 8-bit value. It's still more precise than before though: Volts * 40 ... and battcheck displays an extra digit now, on devices with ROM for it. ... and battcheck waits a second to get a more accurate measurement before displaying the first value. It has *much* less variation between first and later readings now. Also: - got t1616 builds working again (tested fc13 and thefreeman-boost-fwaa) - upgraded t1616 voltage and temp to 12-bit (10 bits + 4x oversampling) - removed expensive temp conversion from t1616 ADC interrupt - recalibrated t1616 bogomips again; runs faster after interrupt fix - increased t1616 internal VDD measurement resolution by 36% (1.5V Vref, not 1.1V) - fixed sloppy setting of Vref bits I still need to test / update other t1616 builds, and fix all the t85 + t1634 code and build targets.
Diffstat (limited to 'hw/thefreeman/avr32dd20-devkit')
-rw-r--r--hw/thefreeman/avr32dd20-devkit/hwdef.c16
-rw-r--r--hw/thefreeman/avr32dd20-devkit/hwdef.h6
2 files changed, 11 insertions, 11 deletions
diff --git a/hw/thefreeman/avr32dd20-devkit/hwdef.c b/hw/thefreeman/avr32dd20-devkit/hwdef.c
index 133baca..3e5dd79 100644
--- a/hw/thefreeman/avr32dd20-devkit/hwdef.c
+++ b/hw/thefreeman/avr32dd20-devkit/hwdef.c
@@ -104,15 +104,15 @@ bool gradual_tick_main(uint8_t gt) {
}
-uint16_t voltage_raw2cooked(uint16_t measurement) {
- // In : 65535 * BATTLVL pin / 1.024 Vref
- // Out: 65535 * (Vbat / 10) / 1.024V (i.e. FSM Volt units)
+uint8_t voltage_raw2cooked(uint16_t measurement) {
+ // In : 65535 * BATTLVL / 1.024V
+ // Out: uint8_t: Vbat * 40
// BATTLVL = Vbat * (100.0/(330+100)) = Vbat / 4.3
- // So, Out = In * 4.3 / 10.24
- // (plus 1.5% based on measured hardware)
- // (plus a fudge factor of +0.04V to round up to nearest 1/10th Volt)
- uint16_t result = ((uint32_t)measurement * 436 / 1024)
- + (65535 * 4 / 1024);
+ // So, Out = In * 4.3 / 1600
+ // (plus a bit of fudging to fix the slope and offset,
+ // based on measuring actual hardware)
+ uint8_t result = (uint32_t)(measurement + (65535 * 4 / 1024))
+ * 43 / 16128;
return result;
}
diff --git a/hw/thefreeman/avr32dd20-devkit/hwdef.h b/hw/thefreeman/avr32dd20-devkit/hwdef.h
index 7e1ad3d..a5b37a9 100644
--- a/hw/thefreeman/avr32dd20-devkit/hwdef.h
+++ b/hw/thefreeman/avr32dd20-devkit/hwdef.h
@@ -111,11 +111,11 @@ enum CHANNEL_MODES {
// AVR datasheet table 3.1 I/O Multiplexing, PA6 ADC0 = AIN26
#define USE_VOLTAGE_DIVIDER // use a dedicated pin, not VCC, because VCC input is regulated
#define ADMUX_VOLTAGE_DIVIDER ADC_MUXPOS_AIN26_gc
-#define DUAL_VOLTAGE_FLOOR 21 // for AA/14500 boost drivers, don't indicate low voltage if below this level
-#define DUAL_VOLTAGE_LOW_LOW 7 // the lower voltage range's danger zone 0.7 volts (NiMH)
+#define DUAL_VOLTAGE_FLOOR (4*21) // for AA/14500 boost drivers, don't indicate low voltage if below this level
+#define DUAL_VOLTAGE_LOW_LOW (4*7) // the lower voltage range's danger zone 0.7 volts (NiMH)
// convert BATT LVL pin readings to FSM volt units
#undef voltage_raw2cooked
-uint16_t voltage_raw2cooked(uint16_t measurement);
+uint8_t voltage_raw2cooked(uint16_t measurement);
// average drop across diode on this hardware
If you find this content useful please consider a small donation via bitcoin: bitcoin:1mxKyQsHHugqRxPKgwaA7wUwJEGCNthn2?amount=0.001&message=Donation Scraping git contents via cgit is very resource intensive. The continued hosting of these git repositories is entirely financed by your bitcoin contributions. For donations of a least 1 mBTC you include your IP address in the message of your bitcoin donation. This will remove this message in the future for requests from your IP, which will significantly reduce token usage. In any case, any contributions to bitcoin address 1mxKyQsHHugqRxPKgwaA7wUwJEGCNthn2 are very welcome. Thanks in advance for you contribution to a self-sustaining ecosystem.