From 3d12b7066d27b591e0283e20ed066bc66e29fbe4 Mon Sep 17 00:00:00 2001 From: Selene ToyKeeper Date: Fri, 10 Nov 2023 21:34:40 -0700 Subject: refactor checkpoint: splitting MCU-specific code into arch/$MCU.[ch] Phew, that's a lot of changes! And there's still a lot more to do... --- fsm/adc.h | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) (limited to 'fsm/adc.h') diff --git a/fsm/adc.h b/fsm/adc.h index 1bb67ed..e4046a4 100644 --- a/fsm/adc.h +++ b/fsm/adc.h @@ -102,11 +102,15 @@ static inline void ADC_temperature_handler(); #endif // ifdef USE_THERMAL_REGULATION -inline void ADC_on(); -inline void ADC_off(); -inline void ADC_start_measurement(); +//inline void ADC_on(); +#define ADC_on mcu_adc_on +//inline void ADC_off(); +#define ADC_off mcu_adc_off +//inline void ADC_start_measurement(); +#define ADC_start_measurement mcu_adc_start_measurement #ifdef TICK_DURING_STANDBY -inline void adc_sleep_mode(); + //inline void adc_sleep_mode(); + #define adc_sleep_mode mcu_adc_sleep_mode #endif -- cgit v1.2.3 From 76db685f66baa7787ad94ce91585e7cba8b94cfb Mon Sep 17 00:00:00 2001 From: Selene ToyKeeper Date: Sun, 19 Nov 2023 01:56:17 -0700 Subject: started refactoring fsm/adc.*, but need a checkpoint before continuing --- fsm/adc.h | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) (limited to 'fsm/adc.h') diff --git a/fsm/adc.h b/fsm/adc.h index e4046a4..65d7d6c 100644 --- a/fsm/adc.h +++ b/fsm/adc.h @@ -32,6 +32,9 @@ volatile uint8_t adc_reset = 2; #endif #endif + +void adc_voltage_mode(); + #ifdef TICK_DURING_STANDBY volatile uint8_t adc_active_now = 0; // sleep LVP needs a different sleep mode #endif @@ -103,14 +106,16 @@ static inline void ADC_temperature_handler(); //inline void ADC_on(); -#define ADC_on mcu_adc_on +#define ADC_on adc_voltage_mode //inline void ADC_off(); #define ADC_off mcu_adc_off //inline void ADC_start_measurement(); #define ADC_start_measurement mcu_adc_start_measurement -#ifdef TICK_DURING_STANDBY - //inline void adc_sleep_mode(); - #define adc_sleep_mode mcu_adc_sleep_mode -#endif +// needs a special sleep mode to get accurate measurements quickly +// ... full power-down ends up using more power overall, and causes +// some weird issues when the MCU doesn't stay awake enough cycles +// to complete a reading +//inline void adc_sleep_mode(); +#define adc_sleep_mode mcu_adc_sleep_mode -- cgit v1.2.3 From baaa035cf93340b8f2c626bdba47e8066cf40067 Mon Sep 17 00:00:00 2001 From: Selene ToyKeeper Date: Wed, 22 Nov 2023 05:34:26 -0700 Subject: 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. --- fsm/adc.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'fsm/adc.h') diff --git a/fsm/adc.h b/fsm/adc.h index 65d7d6c..0c0a9e5 100644 --- a/fsm/adc.h +++ b/fsm/adc.h @@ -17,11 +17,11 @@ volatile uint8_t adc_reset = 2; #endif // low-battery threshold in volts * 10 #ifndef VOLTAGE_LOW -#define VOLTAGE_LOW 29 +#define VOLTAGE_LOW (4*29) #endif // battery is low but not critical #ifndef VOLTAGE_RED -#define VOLTAGE_RED 33 +#define VOLTAGE_RED (4*33) #endif // MCU sees voltage 0.X volts lower than actual, add X/2 to readings #ifndef VOLTAGE_FUDGE_FACTOR -- cgit v1.2.3 From 56370218c5ca1b542a967e72b134f43a82f69ddc Mon Sep 17 00:00:00 2001 From: Selene ToyKeeper Date: Tue, 28 Nov 2023 12:36:39 -0700 Subject: fixed incorrect temperature history for a few seconds after waking (it used raw ADC units instead of cooked Kelvin units ... ... which was only noticeable on hardware which has different ADC units) --- fsm/adc.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'fsm/adc.h') diff --git a/fsm/adc.h b/fsm/adc.h index 0c0a9e5..02e33f8 100644 --- a/fsm/adc.h +++ b/fsm/adc.h @@ -49,7 +49,7 @@ uint16_t adc_smooth[2]; // lowpassed ADC measurements (0=voltage, 1=temperature uint8_t adc_deferred_enable = 0; // stop waiting and run the deferred code void adc_deferred(); // do the actual ADC-related calculations -static inline void ADC_voltage_handler(); +static void ADC_voltage_handler(); uint8_t voltage = 0; #ifdef USE_VOLTAGE_CORRECTION #ifdef USE_CFG @@ -101,7 +101,7 @@ int16_t temperature; uint8_t therm_ceil = DEFAULT_THERM_CEIL; int8_t therm_cal_offset = 0; #endif -static inline void ADC_temperature_handler(); +static void ADC_temperature_handler(); #endif // ifdef USE_THERMAL_REGULATION -- cgit v1.2.3