diff options
| author | Selene ToyKeeper | 2023-11-21 02:52:00 -0700 |
|---|---|---|
| committer | Selene ToyKeeper | 2023-11-21 02:52:00 -0700 |
| commit | fdb47b96e86924bf81852205b2b3078b8b21d040 (patch) | |
| tree | ed8337b4619bb86ffb40c63767a32ae58e9b4dcc /arch/avr32dd20.h | |
| parent | 1.55V AA battery should not show as "white" voltage color, only purple (diff) | |
| download | anduril-fdb47b96e86924bf81852205b2b3078b8b21d040.tar.gz anduril-fdb47b96e86924bf81852205b2b3078b8b21d040.tar.bz2 anduril-fdb47b96e86924bf81852205b2b3078b8b21d040.zip | |
got ADC voltage+temp working on avrdd... but broke all other builds/MCUs
This patch changes the ADC code to use two internal standard units, and
everything else must convert to these units:
- FSM Volts: centiVolts << 6 (range 0 to 10.24 V per cell)
- FSM Kelvin: Kelvin << 6 (range 0 to 1024 K)
UI-level voltage is still "Volts * 10", and temperature is still Celsius.
FSM expects functions to be provided, to convert from the hardware's
raw ADC measurements to these internal units: `voltage_raw2cooked()`
and `temp_raw2cooked()`. Defaults will be provided by arch/*.[ch] for
each MCU type, or the hwdef can make its own.
Anyway, gotta go fix all the other MCUs and builds now. :(
Diffstat (limited to '')
| -rw-r--r-- | arch/avr32dd20.h | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/arch/avr32dd20.h b/arch/avr32dd20.h index 7a6b8f1..3ebb05a 100644 --- a/arch/avr32dd20.h +++ b/arch/avr32dd20.h @@ -50,12 +50,21 @@ inline void mcu_adc_off(); #define ADC_vect ADC0_RESRDY_vect inline void mcu_adc_vect_clear(); +// both readings are left-aligned +inline uint16_t mcu_adc_result(); + // read ADC differently for temperature and voltage -#define MCU_ADC_RESULT_PER_TYPE +//#define MCU_ADC_RESULT_PER_TYPE +//inline uint16_t mcu_adc_result_temp(); +//inline uint16_t mcu_adc_result_volts(); -inline uint16_t mcu_adc_result_temp(); +// return (centiVolts << 6), range 0 to 10.24V +#define voltage_raw2cooked mcu_vdd_raw2cooked +inline uint16_t mcu_vdd_raw2cooked(uint16_t measurement); -inline uint16_t mcu_adc_result_volts(); +// return (temp in Kelvin << 6) +#define temp_raw2cooked mcu_temp_raw2cooked +inline uint16_t mcu_temp_raw2cooked(uint16_t measurement); inline uint8_t mcu_adc_lsb(); |
