From 9120715b717a8413ea42a1d5e11436108e36daa3 Mon Sep 17 00:00:00 2001 From: tyeth Date: Tue, 20 Aug 2024 22:37:32 +0100 Subject: [PATCH 1/5] Switch Analog Voltage on esp32 to use analogReadMilliVolts --- src/components/analogIO/Wippersnapper_AnalogIO.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/components/analogIO/Wippersnapper_AnalogIO.cpp b/src/components/analogIO/Wippersnapper_AnalogIO.cpp index 660208de2..1655e68b4 100644 --- a/src/components/analogIO/Wippersnapper_AnalogIO.cpp +++ b/src/components/analogIO/Wippersnapper_AnalogIO.cpp @@ -232,8 +232,12 @@ uint16_t Wippersnapper_AnalogIO::getPinValue(int pin) { */ /**********************************************************/ float Wippersnapper_AnalogIO::getPinValueVolts(int pin) { +#ifdef ARDUINO_ARCH_ESP32 + return analogReadMilliVolts(pin) / 1000.0; +#else uint16_t rawValue = getPinValue(pin); return rawValue * getAref() / 65536; +#endif } /******************************************************************/ From a34dd53063cdc5fbfef46c7c2fd5dbdee42e189e Mon Sep 17 00:00:00 2001 From: tyeth Date: Tue, 20 Aug 2024 23:01:41 +0100 Subject: [PATCH 2/5] Add logging to check which branch is executing --- src/components/analogIO/Wippersnapper_AnalogIO.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/components/analogIO/Wippersnapper_AnalogIO.cpp b/src/components/analogIO/Wippersnapper_AnalogIO.cpp index 1655e68b4..95a2a0837 100644 --- a/src/components/analogIO/Wippersnapper_AnalogIO.cpp +++ b/src/components/analogIO/Wippersnapper_AnalogIO.cpp @@ -87,8 +87,8 @@ void Wippersnapper_AnalogIO::setADCResolution(int resolution) { analogReadResolution(16); _nativeResolution = 12; #elif defined(ARDUINO_ARCH_ESP32) - scaleAnalogRead = true; - _nativeResolution = 13; + scaleAnalogRead = false; // handled in bsp + _nativeResolution = 13; // S3 ADC is 13-bit, others are 12-bit #elif defined(ARDUINO_ARCH_RP2040) scaleAnalogRead = true; _nativeResolution = 10; @@ -96,7 +96,6 @@ void Wippersnapper_AnalogIO::setADCResolution(int resolution) { scaleAnalogRead = true; _nativeResolution = 10; #endif - _adcResolution = resolution; } @@ -233,8 +232,10 @@ uint16_t Wippersnapper_AnalogIO::getPinValue(int pin) { /**********************************************************/ float Wippersnapper_AnalogIO::getPinValueVolts(int pin) { #ifdef ARDUINO_ARCH_ESP32 + WS_DEBUG_PRINTLN("ESP32: Using analogReadMilliVolts()"); return analogReadMilliVolts(pin) / 1000.0; #else + WS_DEBUG_PRINTLN("Using old getPinValueVolts()"); uint16_t rawValue = getPinValue(pin); return rawValue * getAref() / 65536; #endif From 49dd18c53be085b86be9f1db784b1c83bd861ebe Mon Sep 17 00:00:00 2001 From: tyeth Date: Wed, 21 Aug 2024 16:12:24 +0100 Subject: [PATCH 3/5] Test a wild theory about Serial1 --- src/components/analogIO/Wippersnapper_AnalogIO.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/components/analogIO/Wippersnapper_AnalogIO.cpp b/src/components/analogIO/Wippersnapper_AnalogIO.cpp index 95a2a0837..e2d4ad389 100644 --- a/src/components/analogIO/Wippersnapper_AnalogIO.cpp +++ b/src/components/analogIO/Wippersnapper_AnalogIO.cpp @@ -15,6 +15,7 @@ */ #include "Wippersnapper_AnalogIO.h" +#include "Wippersnapper.h" /***********************************************************************************/ /*! @@ -87,7 +88,7 @@ void Wippersnapper_AnalogIO::setADCResolution(int resolution) { analogReadResolution(16); _nativeResolution = 12; #elif defined(ARDUINO_ARCH_ESP32) - scaleAnalogRead = false; // handled in bsp + scaleAnalogRead = true; // probably should be false, handled in bsp _nativeResolution = 13; // S3 ADC is 13-bit, others are 12-bit #elif defined(ARDUINO_ARCH_RP2040) scaleAnalogRead = true; From 6c7ff60b5ce3e541cb1605c3783d3622369b6e02 Mon Sep 17 00:00:00 2001 From: Tyeth Gundry Date: Fri, 23 Aug 2024 17:39:44 +0000 Subject: [PATCH 4/5] Fix second route of logic for ADC volts --- src/components/analogIO/Wippersnapper_AnalogIO.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/analogIO/Wippersnapper_AnalogIO.cpp b/src/components/analogIO/Wippersnapper_AnalogIO.cpp index e2d4ad389..edea0c821 100644 --- a/src/components/analogIO/Wippersnapper_AnalogIO.cpp +++ b/src/components/analogIO/Wippersnapper_AnalogIO.cpp @@ -386,7 +386,7 @@ void Wippersnapper_AnalogIO::update() { // Perform voltage conversion if we need to if (_analog_input_pins[i].readMode == wippersnapper_pin_v1_ConfigurePinRequest_AnalogReadMode_ANALOG_READ_MODE_PIN_VOLTAGE) { - pinValVolts = pinValRaw * getAref() / 65536; + pinValVolts = getPinValueVolts(_analog_input_pins[i].pinName); } // Publish pin event to IO From e900f61c64c5cacd63e4550666c0faf1b4621bbf Mon Sep 17 00:00:00 2001 From: Tyeth Gundry Date: Fri, 23 Aug 2024 19:13:37 +0000 Subject: [PATCH 5/5] Set 13 or 12bit depending on S3 or not --- src/components/analogIO/Wippersnapper_AnalogIO.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/components/analogIO/Wippersnapper_AnalogIO.cpp b/src/components/analogIO/Wippersnapper_AnalogIO.cpp index edea0c821..207e17a27 100644 --- a/src/components/analogIO/Wippersnapper_AnalogIO.cpp +++ b/src/components/analogIO/Wippersnapper_AnalogIO.cpp @@ -15,7 +15,6 @@ */ #include "Wippersnapper_AnalogIO.h" -#include "Wippersnapper.h" /***********************************************************************************/ /*! @@ -89,7 +88,11 @@ void Wippersnapper_AnalogIO::setADCResolution(int resolution) { _nativeResolution = 12; #elif defined(ARDUINO_ARCH_ESP32) scaleAnalogRead = true; // probably should be false, handled in bsp - _nativeResolution = 13; // S3 ADC is 13-bit, others are 12-bit +#if defined(ESP32S3) + _nativeResolution = 13; // S3 ADC is 13-bit, others are 12-bit +#else + _nativeResolution = 12; +#endif #elif defined(ARDUINO_ARCH_RP2040) scaleAnalogRead = true; _nativeResolution = 10; @@ -233,10 +236,8 @@ uint16_t Wippersnapper_AnalogIO::getPinValue(int pin) { /**********************************************************/ float Wippersnapper_AnalogIO::getPinValueVolts(int pin) { #ifdef ARDUINO_ARCH_ESP32 - WS_DEBUG_PRINTLN("ESP32: Using analogReadMilliVolts()"); return analogReadMilliVolts(pin) / 1000.0; #else - WS_DEBUG_PRINTLN("Using old getPinValueVolts()"); uint16_t rawValue = getPinValue(pin); return rawValue * getAref() / 65536; #endif