diff options
| author | Selene ToyKeeper | 2023-11-22 05:34:26 -0700 |
|---|---|---|
| committer | Selene ToyKeeper | 2023-11-22 05:34:26 -0700 |
| commit | baaa035cf93340b8f2c626bdba47e8066cf40067 (patch) | |
| tree | 10114a3fa02f301c41da8b07619e146a14186f28 /arch/attiny1616.h | |
| parent | got ADC voltage+temp working on avrdd... but broke all other builds/MCUs (diff) | |
| download | anduril-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 '')
| -rw-r--r-- | arch/attiny1616.h | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/arch/attiny1616.h b/arch/attiny1616.h index b4e17fc..57b0023 100644 --- a/arch/attiny1616.h +++ b/arch/attiny1616.h @@ -9,9 +9,11 @@ ////////// clock speed / delay stuff ////////// #define F_CPU 10000000UL -#define BOGOMIPS (F_CPU/4700) +#define BOGOMIPS (F_CPU/4350) #define DELAY_ZERO_TIME 1020 +inline void mcu_clock_speed(); + ///// clock dividers // this should work, but needs further validation inline void clock_prescale_set(uint8_t n); @@ -44,20 +46,30 @@ inline void mcu_adc_sleep_mode(); inline void mcu_adc_start_measurement(); -inline void mcu_adc_on(); +//inline void mcu_adc_on(); 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 - inline uint16_t mcu_adc_result_temp(); - inline uint16_t mcu_adc_result_volts(); +// return Volts * 40, range 0 to 6.375V +#define voltage_raw2cooked mcu_vdd_raw2cooked +inline uint8_t mcu_vdd_raw2cooked(uint16_t measurement); +inline uint8_t mcu_vdivider_raw2cooked(uint16_t measurement); + +// 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(); |
