fix: switch ADC reference from FVR to VDD #20

Merged
daru merged 1 commit from fix/adc_reference_vdd into main 2026-07-27 02:12:21 +00:00
Contributor

Fixes #3

Switched ADC reference from FVR (2.048V) to VDD (battery). FVR is now read as an ADC channel to determine VDD, freeing RA1 for other use.

Changes:

  • Firmware: ADCON1 ADPREF=01 (VDD ref), added ADC_FVR channel, read FVR instead of battery on RA1
  • Decoder: temperature formula uses FVR reading: Vt = 2.048 * (1023 - temp_raw) / (4 * fvr_raw), Temp = (0.659 - Vt) / 0.00132 - 40
  • README: updated to reflect ADC reference decision
Fixes #3 Switched ADC reference from FVR (2.048V) to VDD (battery). FVR is now read as an ADC channel to determine VDD, freeing RA1 for other use. Changes: - Firmware: ADCON1 ADPREF=01 (VDD ref), added ADC_FVR channel, read FVR instead of battery on RA1 - Decoder: temperature formula uses FVR reading: `Vt = 2.048 * (1023 - temp_raw) / (4 * fvr_raw)`, `Temp = (0.659 - Vt) / 0.00132 - 40` - README: updated to reflect ADC reference decision
Previously the ADC used FVR (2.048V) as reference and measured battery via
an external divider on RA1. The temperature formula in the decoder used this
battery reading, which was fragile and incorrect.

Now the ADC uses VDD as reference, freeing RA1 for other use. The FVR is read
as an ADC channel to determine VDD: VDD = 2.048 * 1023 / fvr_raw. The
temperature formula becomes VDD-independent when FVR is used:

  Vt  = 2.048 * (1023 - temp_raw) / (4 * fvr_raw)
  Temp = (0.659 - Vt) / 0.00132 - 40

This also fixes the temperature calculation per AN1333 and frees an analog input.
daru merged commit 99d6c71d77 into main 2026-07-27 02:12:21 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
daru/PICsense!20
No description provided.