From f10f3774850890de06b4d2aa32d93dcc034a3cfb Mon Sep 17 00:00:00 2001 From: FreeBear Date: Sun, 1 Sep 2024 02:00:18 +0100 Subject: [PATCH 1/7] First draft at noise reduction for the GT911 touch driver. This allows the user to decrease sensitivity of the touch panel in order to eliminate phantom touch events due to electromagnetic interference. This may be possible to extend to other touch screens if the function is supported. --- src/drv/touch/touch_driver_gt911.cpp | 37 +++++++++++++++++++++++++++- src/hasp_config.h | 1 + src/hasp_gui.cpp | 8 +++++- src/hasp_gui.h | 1 + src/sys/svc/hasp_http.cpp | 4 +++ src/sys/svc/hasp_http_async.cpp | 5 ++++ 6 files changed, 54 insertions(+), 2 deletions(-) diff --git a/src/drv/touch/touch_driver_gt911.cpp b/src/drv/touch/touch_driver_gt911.cpp index 1ff67cad3..57d8a41a5 100644 --- a/src/drv/touch/touch_driver_gt911.cpp +++ b/src/drv/touch/touch_driver_gt911.cpp @@ -92,9 +92,42 @@ IRAM_ATTR bool TouchGt911::read(lv_indev_drv_t* indev_driver, lv_indev_data_t* d return false; } +#include "hexdump.h" +#include +#include +#include +static void setup_noise_reduction(uint8_t nr_level) +{ + uint8_t len = 0x8100 - GT_REG_CFG; + uint8_t cfg[len]; + GTInfo* info; + + memset(cfg, 0, len); +/* This is the only way to read the entire config space + Need to do a split read as the WDT will bite for reads + of more than 128 bytes (give or take). +*/ + touch.read(GT_REG_CFG, cfg, 100); + touch.read(GT_REG_CFG+100, cfg+100, len-100); + + // Check noise_reduction is within limits + if (nr_level < 0 || nr_level > 15) goto end; + + cfg[11] = nr_level; + cfg[len - 1] = touch.calcChecksum(cfg, len - 1); + + uint8_t err = touch.write(GT_REG_CFG, cfg, len); + if (err != 0) goto end; + err = touch.write(0x8100, 1); + +end: + LOG_ERROR(TAG_DRVR, "GT911 Failed to write noise reduction byte"); +} + void TouchGt911::init(int w, int h) { Wire.begin(TOUCH_SDA, TOUCH_SCL, (uint32_t)I2C_TOUCH_FREQUENCY); + touch.setHandler(GT911_setXY); GTInfo* info; @@ -102,7 +135,7 @@ void TouchGt911::init(int w, int h) info = touch.readInfo(); if(info->xResolution > 0 && info->yResolution > 0) goto found; } - + #if TOUCH_IRQ == -1 // Probe both addresses if IRQ is not connected for(uint8_t i = 0; i < 4; i++) @@ -120,6 +153,8 @@ void TouchGt911::init(int w, int h) LOG_WARNING(TAG_DRVR, "GT911 %s", D_SERVICE_START_FAILED); } + setup_noise_reduction((uint8_t) h); + Wire.begin(TOUCH_SDA, TOUCH_SCL, (uint32_t)I2C_TOUCH_FREQUENCY); touch_scan(Wire); // The address could change during begin, so scan afterwards } diff --git a/src/hasp_config.h b/src/hasp_config.h index 04160d30d..1b3b30c33 100644 --- a/src/hasp_config.h +++ b/src/hasp_config.h @@ -80,6 +80,7 @@ const char FP_CONFIG_VPN_IP[] PROGMEM = "vpnip"; const char FP_CONFIG_PRIVATE_KEY[] PROGMEM = "privkey"; const char FP_CONFIG_PUBLIC_KEY[] PROGMEM = "pubkey"; const char FP_GUI_ROTATION[] PROGMEM = "rotate"; +const char FP_GUI_NOISE_REDUCTION[] PROGMEM = "noise_reduction"; const char FP_GUI_INVERT[] PROGMEM = "invert"; const char FP_GUI_TICKPERIOD[] PROGMEM = "tick"; const char FP_GUI_IDLEPERIOD1[] PROGMEM = "idle1"; diff --git a/src/hasp_gui.cpp b/src/hasp_gui.cpp index ebb7870af..87dcb6ef2 100644 --- a/src/hasp_gui.cpp +++ b/src/hasp_gui.cpp @@ -46,6 +46,7 @@ gui_conf_t gui_settings = {.show_pointer = false, .backlight_pin = TFT_BCKL, .rotation = TFT_ROTATION, .invert_display = INVERT_COLORS, + .noise_reduction = 5, .cal_data = {0, 65535, 0, 65535, 0}}; lv_obj_t* cursor; @@ -346,7 +347,8 @@ void guiSetup() #if HASP_TARGET_ARDUINO // drv_touch_init(gui_settings.rotation); // Touch driver - haspTouch.init(tft_width, tft_height); + // hijack tft_height to pass noise_reduction to the GT911 driver + haspTouch.init(tft_width, gui_settings.noise_reduction); haspTouch.set_calibration(gui_settings.cal_data); haspTouch.set_rotation(gui_settings.rotation); #endif @@ -488,6 +490,9 @@ bool guiGetConfig(const JsonObject& settings) if(gui_settings.rotation != settings[FPSTR(FP_GUI_ROTATION)].as()) changed = true; settings[FPSTR(FP_GUI_ROTATION)] = gui_settings.rotation; + if(gui_settings.noise_reduction != settings[FPSTR(FP_GUI_NOISE_REDUCTION)].as()) changed = true; + settings[FPSTR(FP_GUI_NOISE_REDUCTION)] = gui_settings.noise_reduction; + if(gui_settings.show_pointer != settings[FPSTR(FP_GUI_POINTER)].as()) changed = true; settings[FPSTR(FP_GUI_POINTER)] = (uint8_t)gui_settings.show_pointer; @@ -562,6 +567,7 @@ bool guiSetConfig(const JsonObject& settings) changed |= configSet(guiSleepTime1, settings[FPSTR(FP_GUI_IDLEPERIOD1)], F("guiSleepTime1")); changed |= configSet(guiSleepTime2, settings[FPSTR(FP_GUI_IDLEPERIOD2)], F("guiSleepTime2")); changed |= configSet(gui_settings.rotation, settings[FPSTR(FP_GUI_ROTATION)], F("gui_settings.rotation")); + changed |= configSet(gui_settings.noise_reduction, settings[FPSTR(FP_GUI_NOISE_REDUCTION)], F("gui_settings.noise_reduction")); changed |= configSet(gui_settings.invert_display, settings[FPSTR(FP_GUI_INVERT)], F("guiInvertDisplay")); hasp_set_sleep_time(guiSleepTime1, guiSleepTime2); diff --git a/src/hasp_gui.h b/src/hasp_gui.h index dd3680a80..532dfa23b 100644 --- a/src/hasp_gui.h +++ b/src/hasp_gui.h @@ -33,6 +33,7 @@ struct gui_conf_t int8_t backlight_pin; uint8_t rotation; uint8_t invert_display; + uint8_t noise_reduction; #if defined(USER_SETUP_LOADED) uint16_t cal_data[5]; #else diff --git a/src/sys/svc/hasp_http.cpp b/src/sys/svc/hasp_http.cpp index eba778bb6..2da54daf9 100644 --- a/src/sys/svc/hasp_http.cpp +++ b/src/sys/svc/hasp_http.cpp @@ -1562,6 +1562,10 @@ static void http_handle_gui()
+
+
+
+
diff --git a/src/sys/svc/hasp_http_async.cpp b/src/sys/svc/hasp_http_async.cpp index e4e882efb..c3b9151f7 100644 --- a/src/sys/svc/hasp_http_async.cpp +++ b/src/sys/svc/hasp_http_async.cpp @@ -1298,6 +1298,11 @@ void webHandleGuiConfig(AsyncWebServerRequest* request) httpMessage += getOption(5, F("270 degrees - mirrored"), rotation == 5); httpMessage += F("

"); + httpMessage += F("

Noise Reduction

"); + httpMessage += F("

()) httpMessage += F(" checked"); httpMessage += F(">Invert Colors"); From 449309b20e76b12dc7a3268bec5f309cbeed78e3 Mon Sep 17 00:00:00 2001 From: FreeBear Date: Sun, 1 Sep 2024 13:09:25 +0100 Subject: [PATCH 2/7] Remove unneeded headers (one causing a compilation fail). Check new noise reduction value and exit if it matches old. Improve logging messages & comments. --- src/drv/touch/touch_driver_gt911.cpp | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/src/drv/touch/touch_driver_gt911.cpp b/src/drv/touch/touch_driver_gt911.cpp index 57d8a41a5..efc14dc1b 100644 --- a/src/drv/touch/touch_driver_gt911.cpp +++ b/src/drv/touch/touch_driver_gt911.cpp @@ -92,10 +92,6 @@ IRAM_ATTR bool TouchGt911::read(lv_indev_drv_t* indev_driver, lv_indev_data_t* d return false; } -#include "hexdump.h" -#include -#include -#include static void setup_noise_reduction(uint8_t nr_level) { uint8_t len = 0x8100 - GT_REG_CFG; @@ -103,16 +99,26 @@ static void setup_noise_reduction(uint8_t nr_level) GTInfo* info; memset(cfg, 0, len); -/* This is the only way to read the entire config space +/* This is the only way to read the entire config space. + The Goodix driver provides a readConfig() function, but + struct is not packed which leads to errors (when using + struct members). + Need to do a split read as the WDT will bite for reads of more than 128 bytes (give or take). */ touch.read(GT_REG_CFG, cfg, 100); + if (cfg[11] == nr_level) { + LOG_INFO(TAG_DRVR, "GT911 noise reduction unchanged"); + return; + } touch.read(GT_REG_CFG+100, cfg+100, len-100); // Check noise_reduction is within limits - if (nr_level < 0 || nr_level > 15) goto end; - + if (nr_level < 0 || nr_level > 15) { + LOG_ERROR(TAG_DRVR, "GT911 Noise Reduction value out of range (0-15)"); + return; + } cfg[11] = nr_level; cfg[len - 1] = touch.calcChecksum(cfg, len - 1); From 564d555264da3104a7d0bf137cc8bbc3a4d2003f Mon Sep 17 00:00:00 2001 From: FreeBear Date: Sun, 1 Sep 2024 13:27:31 +0100 Subject: [PATCH 3/7] Improve error detection and exit early if one occurs. --- src/drv/touch/touch_driver_gt911.cpp | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/drv/touch/touch_driver_gt911.cpp b/src/drv/touch/touch_driver_gt911.cpp index efc14dc1b..4800b13a8 100644 --- a/src/drv/touch/touch_driver_gt911.cpp +++ b/src/drv/touch/touch_driver_gt911.cpp @@ -97,6 +97,7 @@ static void setup_noise_reduction(uint8_t nr_level) uint8_t len = 0x8100 - GT_REG_CFG; uint8_t cfg[len]; GTInfo* info; + uint8_t err; memset(cfg, 0, len); /* This is the only way to read the entire config space. @@ -107,12 +108,16 @@ static void setup_noise_reduction(uint8_t nr_level) Need to do a split read as the WDT will bite for reads of more than 128 bytes (give or take). */ - touch.read(GT_REG_CFG, cfg, 100); + err = touch.read(GT_REG_CFG, cfg, 100); + if (err != 0) goto end2; if (cfg[11] == nr_level) { LOG_INFO(TAG_DRVR, "GT911 noise reduction unchanged"); return; } - touch.read(GT_REG_CFG+100, cfg+100, len-100); + err = touch.read(GT_REG_CFG+100, cfg+100, len-100); + if (err != 0) goto end2; + + if (cfg[len - 1] != touch.calcChecksum(cfg, len - 1) goto end2; // Check noise_reduction is within limits if (nr_level < 0 || nr_level > 15) { @@ -122,12 +127,17 @@ static void setup_noise_reduction(uint8_t nr_level) cfg[11] = nr_level; cfg[len - 1] = touch.calcChecksum(cfg, len - 1); - uint8_t err = touch.write(GT_REG_CFG, cfg, len); + err = touch.write(GT_REG_CFG, cfg, len); if (err != 0) goto end; err = touch.write(0x8100, 1); - + if (err != 0) goto end; + LOG_INFO(TAG_DRVR, "GT911 noise reduction updated"); + return; end: LOG_ERROR(TAG_DRVR, "GT911 Failed to write noise reduction byte"); + return; +end2; + LOG_ERROR(TAG_DRVR, "GT911 Failed to read config space"); } void TouchGt911::init(int w, int h) From 01ebfe5ce79b6d9b8cd652d7030f1abf3b0e7178 Mon Sep 17 00:00:00 2001 From: FreeBear Date: Sun, 1 Sep 2024 16:02:02 +0100 Subject: [PATCH 4/7] Clean up a couple of errors. --- src/drv/touch/touch_driver_gt911.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/drv/touch/touch_driver_gt911.cpp b/src/drv/touch/touch_driver_gt911.cpp index 4800b13a8..e1c626da4 100644 --- a/src/drv/touch/touch_driver_gt911.cpp +++ b/src/drv/touch/touch_driver_gt911.cpp @@ -117,7 +117,7 @@ static void setup_noise_reduction(uint8_t nr_level) err = touch.read(GT_REG_CFG+100, cfg+100, len-100); if (err != 0) goto end2; - if (cfg[len - 1] != touch.calcChecksum(cfg, len - 1) goto end2; + if (cfg[len - 1] != touch.calcChecksum(cfg, len - 1)) goto end2; // Check noise_reduction is within limits if (nr_level < 0 || nr_level > 15) { @@ -136,7 +136,7 @@ static void setup_noise_reduction(uint8_t nr_level) end: LOG_ERROR(TAG_DRVR, "GT911 Failed to write noise reduction byte"); return; -end2; +end2: LOG_ERROR(TAG_DRVR, "GT911 Failed to read config space"); } From b9d12734c90bd18b24576e2d58b467f7f39eb29c Mon Sep 17 00:00:00 2001 From: FreeBear Date: Sun, 1 Sep 2024 17:59:48 +0100 Subject: [PATCH 5/7] ifdef the noise reduction code so that it only gets compiled if required for devices that have a GT911 touch screen. --- src/drv/touch/touch_driver_gt911.cpp | 5 ++++- src/hasp_gui.cpp | 10 ++++++++-- src/sys/svc/hasp_http.cpp | 10 ++++++---- src/sys/svc/hasp_http_async.cpp | 4 ++-- user_setups/esp32s3/esp32-s3-4848S040.ini | 1 + 5 files changed, 21 insertions(+), 9 deletions(-) diff --git a/src/drv/touch/touch_driver_gt911.cpp b/src/drv/touch/touch_driver_gt911.cpp index e1c626da4..0429141d4 100644 --- a/src/drv/touch/touch_driver_gt911.cpp +++ b/src/drv/touch/touch_driver_gt911.cpp @@ -92,6 +92,7 @@ IRAM_ATTR bool TouchGt911::read(lv_indev_drv_t* indev_driver, lv_indev_data_t* d return false; } +#ifdef NOISE_REDUCTION static void setup_noise_reduction(uint8_t nr_level) { uint8_t len = 0x8100 - GT_REG_CFG; @@ -139,6 +140,7 @@ static void setup_noise_reduction(uint8_t nr_level) end2: LOG_ERROR(TAG_DRVR, "GT911 Failed to read config space"); } +#endif void TouchGt911::init(int w, int h) { @@ -169,8 +171,9 @@ void TouchGt911::init(int w, int h) LOG_WARNING(TAG_DRVR, "GT911 %s", D_SERVICE_START_FAILED); } +#ifdef NOISE_REDUCTION setup_noise_reduction((uint8_t) h); - +#endif Wire.begin(TOUCH_SDA, TOUCH_SCL, (uint32_t)I2C_TOUCH_FREQUENCY); touch_scan(Wire); // The address could change during begin, so scan afterwards } diff --git a/src/hasp_gui.cpp b/src/hasp_gui.cpp index 87dcb6ef2..b0a8d9a6b 100644 --- a/src/hasp_gui.cpp +++ b/src/hasp_gui.cpp @@ -347,8 +347,12 @@ void guiSetup() #if HASP_TARGET_ARDUINO // drv_touch_init(gui_settings.rotation); // Touch driver +#ifdef NOISE_REDUCTION // hijack tft_height to pass noise_reduction to the GT911 driver haspTouch.init(tft_width, gui_settings.noise_reduction); +#else + haspTouch.init(tft_width, tft_height); +#endif haspTouch.set_calibration(gui_settings.cal_data); haspTouch.set_rotation(gui_settings.rotation); #endif @@ -489,10 +493,10 @@ bool guiGetConfig(const JsonObject& settings) if(gui_settings.rotation != settings[FPSTR(FP_GUI_ROTATION)].as()) changed = true; settings[FPSTR(FP_GUI_ROTATION)] = gui_settings.rotation; - +#ifdef NOISE_REDUCTION if(gui_settings.noise_reduction != settings[FPSTR(FP_GUI_NOISE_REDUCTION)].as()) changed = true; settings[FPSTR(FP_GUI_NOISE_REDUCTION)] = gui_settings.noise_reduction; - +#endif if(gui_settings.show_pointer != settings[FPSTR(FP_GUI_POINTER)].as()) changed = true; settings[FPSTR(FP_GUI_POINTER)] = (uint8_t)gui_settings.show_pointer; @@ -567,7 +571,9 @@ bool guiSetConfig(const JsonObject& settings) changed |= configSet(guiSleepTime1, settings[FPSTR(FP_GUI_IDLEPERIOD1)], F("guiSleepTime1")); changed |= configSet(guiSleepTime2, settings[FPSTR(FP_GUI_IDLEPERIOD2)], F("guiSleepTime2")); changed |= configSet(gui_settings.rotation, settings[FPSTR(FP_GUI_ROTATION)], F("gui_settings.rotation")); +#ifdef NOISE_REDUCTION changed |= configSet(gui_settings.noise_reduction, settings[FPSTR(FP_GUI_NOISE_REDUCTION)], F("gui_settings.noise_reduction")); +#endif changed |= configSet(gui_settings.invert_display, settings[FPSTR(FP_GUI_INVERT)], F("guiInvertDisplay")); hasp_set_sleep_time(guiSleepTime1, guiSleepTime2); diff --git a/src/sys/svc/hasp_http.cpp b/src/sys/svc/hasp_http.cpp index 2da54daf9..fdbc3bbf4 100644 --- a/src/sys/svc/hasp_http.cpp +++ b/src/sys/svc/hasp_http.cpp @@ -1560,12 +1560,14 @@ static void http_handle_gui()

- -
+
)"; +#ifdef NOISE_REDUCTION + html[min(i++, len)] = R"(
-
-
+
)"; +#endif + html[min(i++, len)] = R"(
diff --git a/src/sys/svc/hasp_http_async.cpp b/src/sys/svc/hasp_http_async.cpp index c3b9151f7..af0c7f531 100644 --- a/src/sys/svc/hasp_http_async.cpp +++ b/src/sys/svc/hasp_http_async.cpp @@ -1297,12 +1297,12 @@ void webHandleGuiConfig(AsyncWebServerRequest* request) httpMessage += getOption(4, F("180 degrees - mirrored"), rotation == 4); httpMessage += getOption(5, F("270 degrees - mirrored"), rotation == 5); httpMessage += F("

"); - +#ifdef NOISE_REDUCTION httpMessage += F("

Noise Reduction

"); - +#endif httpMessage += F("

()) httpMessage += F(" checked"); httpMessage += F(">Invert Colors"); diff --git a/user_setups/esp32s3/esp32-s3-4848S040.ini b/user_setups/esp32s3/esp32-s3-4848S040.ini index 27d89050d..0f6d9bc19 100644 --- a/user_setups/esp32s3/esp32-s3-4848S040.ini +++ b/user_setups/esp32s3/esp32-s3-4848S040.ini @@ -67,6 +67,7 @@ build_flags = -D TFT_AUTO_FLUSH=1 ; Touch Settings -D TOUCH_DRIVER=0x911 +; -D NOISE_REDUCTION -D TOUCH_WIDTH=480 -D TOUCH_HEIGHT=480 -D TOUCH_SDA=19 From bb8d24dee0dce2724fa505d008a28a2020022b67 Mon Sep 17 00:00:00 2001 From: FreeBear Date: Sun, 1 Sep 2024 18:29:30 +0100 Subject: [PATCH 6/7] Put setup_noise_reduction() in the TouchGt911 namespace and explicitly call it from guiSetup() in hasp_gui.cpp --- src/drv/touch/touch_driver_gt911.cpp | 5 +---- src/drv/touch/touch_driver_gt911.h | 3 +++ src/hasp_gui.cpp | 6 ++---- user_setups/esp32s3/esp32-s3-4848S040.ini | 2 +- 4 files changed, 7 insertions(+), 9 deletions(-) diff --git a/src/drv/touch/touch_driver_gt911.cpp b/src/drv/touch/touch_driver_gt911.cpp index 0429141d4..9e18a5f2b 100644 --- a/src/drv/touch/touch_driver_gt911.cpp +++ b/src/drv/touch/touch_driver_gt911.cpp @@ -93,7 +93,7 @@ IRAM_ATTR bool TouchGt911::read(lv_indev_drv_t* indev_driver, lv_indev_data_t* d } #ifdef NOISE_REDUCTION -static void setup_noise_reduction(uint8_t nr_level) +void TouchGt911::setup_noise_reduction(uint8_t nr_level) { uint8_t len = 0x8100 - GT_REG_CFG; uint8_t cfg[len]; @@ -171,9 +171,6 @@ void TouchGt911::init(int w, int h) LOG_WARNING(TAG_DRVR, "GT911 %s", D_SERVICE_START_FAILED); } -#ifdef NOISE_REDUCTION - setup_noise_reduction((uint8_t) h); -#endif Wire.begin(TOUCH_SDA, TOUCH_SCL, (uint32_t)I2C_TOUCH_FREQUENCY); touch_scan(Wire); // The address could change during begin, so scan afterwards } diff --git a/src/drv/touch/touch_driver_gt911.h b/src/drv/touch/touch_driver_gt911.h index 983e696e8..2ad9a8eb8 100644 --- a/src/drv/touch/touch_driver_gt911.h +++ b/src/drv/touch/touch_driver_gt911.h @@ -14,6 +14,9 @@ class TouchGt911 : public BaseTouch { public: IRAM_ATTR bool read(lv_indev_drv_t* indev_driver, lv_indev_data_t* data); void init(int w, int h); +#ifdef NOISE_REDUCTION + void setup_noise_reduction(uint8_t nr_level); +#endif }; } // namespace dev diff --git a/src/hasp_gui.cpp b/src/hasp_gui.cpp index b0a8d9a6b..883b94bb5 100644 --- a/src/hasp_gui.cpp +++ b/src/hasp_gui.cpp @@ -347,11 +347,9 @@ void guiSetup() #if HASP_TARGET_ARDUINO // drv_touch_init(gui_settings.rotation); // Touch driver -#ifdef NOISE_REDUCTION - // hijack tft_height to pass noise_reduction to the GT911 driver - haspTouch.init(tft_width, gui_settings.noise_reduction); -#else haspTouch.init(tft_width, tft_height); +#ifdef NOISE_REDUCTION + haspTouch.setup_noise_reduction(gui_settings.noise_reduction); #endif haspTouch.set_calibration(gui_settings.cal_data); haspTouch.set_rotation(gui_settings.rotation); diff --git a/user_setups/esp32s3/esp32-s3-4848S040.ini b/user_setups/esp32s3/esp32-s3-4848S040.ini index 0f6d9bc19..a3e031a82 100644 --- a/user_setups/esp32s3/esp32-s3-4848S040.ini +++ b/user_setups/esp32s3/esp32-s3-4848S040.ini @@ -67,7 +67,7 @@ build_flags = -D TFT_AUTO_FLUSH=1 ; Touch Settings -D TOUCH_DRIVER=0x911 -; -D NOISE_REDUCTION + -D NOISE_REDUCTION -D TOUCH_WIDTH=480 -D TOUCH_HEIGHT=480 -D TOUCH_SDA=19 From d08129e990c6124be6e791324694120aeb877ac1 Mon Sep 17 00:00:00 2001 From: FreeBear Date: Fri, 6 Sep 2024 23:23:40 +0100 Subject: [PATCH 7/7] Try a different backlight frequency that avoids harmonics for 50Hz and 60Hz mains frequencies. --- user_setups/esp32s3/esp32-s3-4848S040.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/user_setups/esp32s3/esp32-s3-4848S040.ini b/user_setups/esp32s3/esp32-s3-4848S040.ini index a3e031a82..4f4bb4499 100644 --- a/user_setups/esp32s3/esp32-s3-4848S040.ini +++ b/user_setups/esp32s3/esp32-s3-4848S040.ini @@ -52,7 +52,7 @@ build_flags = -D TFT_RST=-1 -D TFT_BUSY=-1 -D TFT_BCKL=38 - -D BACKLIGHT_FREQUENCY=100 + -D BACKLIGHT_FREQUENCY=110 ; Panel Settings -D TFT_HSYNC_POLARITY=1 -D TFT_HSYNC_FRONT_PORCH=10