Skip to content

Commit

Permalink
Update xsns_02_analog.ino for calibrated values on ESP32 (#19732)
Browse files Browse the repository at this point in the history
ESP32  ADC has variables errors, but calibrations values are put in eFuses at factory test.
analogReadMilliVolts() from api correct the ADC reading with tata values.
Since now the value are mV and not ADC numbers, the fast solution is to revert it back to ADC numbers:
divide by Vcc  => ANALOG_V33*1000  and multiply by ANALOG_RANGE
Other way is to modify all sensor cases to account for the different unit.
  • Loading branch information
lalo-uy authored Oct 15, 2023
1 parent 16307bc commit b63a061
Showing 1 changed file with 7 additions and 0 deletions.
7 changes: 7 additions & 0 deletions tasmota/tasmota_xsns_sensor/xsns_02_analog.ino
Original file line number Diff line number Diff line change
Expand Up @@ -335,10 +335,17 @@ uint16_t AdcRead(uint32_t pin, uint32_t factor) {
uint32_t samples = 1 << factor;
uint32_t analog = 0;
for (uint32_t i = 0; i < samples; i++) {
#ifdef ESP32
analog += analogReadMilliVolts(pin); // get the value corrected by calibrated values from the eFuses
#else
analog += analogRead(pin);
#endif
delay(1);
}
analog >>= factor;
#ifdef ESP32
analog = analog/(ANALOG_V33*1000) * ANALOG_RANGE; // go back from mV to ADC
#endif
return analog;
}

Expand Down

0 comments on commit b63a061

Please sign in to comment.