-
Notifications
You must be signed in to change notification settings - Fork 53
Description
RGB LCD Screen Ghosting/Burn-in Issue
Hardware Configuration
- Board: Waveshare ESP32-S3-Touch-LCD-5B
- MCU: ESP32-S3
- LCD: 1024x600 RGB LCD with ST7262 timing controller
- Interface: 16-bit RGB565, 21MHz pixel clock
- Backlight: Switch-type via CH422G IO expander (pin 2)
- ESP-IDF: v5.4.3
- Library: ESP_Panel_Library (ESP Display Panel)
Problem Description
When implementing a backlight timeout feature (turn off backlight after 30 seconds of inactivity), the LCD exhibits significant ghosting/burn-in effects. After the backlight turns off and remains off for 5+ minutes, a faint "ghost" image of the last displayed content persists on the screen even after the backlight turns back on.
Attempts to Resolve
1. Display Control Commands
Attempted: Using lcd->setDisplayOnOff(false) to send DISPOFF command
Result: Error - "function not supported"
Reason: ST7262 is an RGB timing controller, not a command-based LCD controller. It has no command interface.
2. Software Black Overlay
Attempted: Created full-screen black LVGL object before turning off backlight
black_overlay = lv_obj_create(lv_scr_act());
lv_obj_set_style_bg_color(black_overlay, lv_color_black(), 0);
lv_refr_now(NULL);
vTaskDelay(pdMS_TO_TICKS(100));
backlight->off();Result: Ghosting still occurs after 5+ minutes
Reason: RGB LCD continuously receives data from ESP32 RGB peripheral regardless of content
3. Hardware LCD Reset
Attempted: Pulling LCD_RST low via CH422G IO expander (pin 3) before turning off backlight
expander->digitalWrite(LCD_RST_EXPANDER_PIN, 0); // Pull reset low
vTaskDelay(pdMS_TO_TICKS(5000));
backlight->off();Result: No effect - ghosting persists
Reason: LCD_RST may not actually cut power to the panel, or reset doesn't affect the liquid crystal state
4. Enhanced Rendering with Delays
Attempted: Multiple render cycles with delays
lv_obj_move_to_foreground(black_overlay);
lv_refr_now(NULL);
vTaskDelay(pdMS_TO_TICKS(150));Result: No improvement
Technical Analysis
RGB LCD Architecture
- ST7262: RGB timing controller that passes through RGB data from ESP32
- No frame buffer: Unlike SPI LCDs, RGB LCDs have no internal GRAM
- Continuous refresh: ESP32 RGB peripheral continuously sends pixel data
- No power management: ST7262 has no built-in display enable/disable capability
Board Configuration
// From BOARD_WAVESHARE_ESP32_S3_TOUCH_LCD_5_B.h
#define BOARD_LCD_RGB_IO_DISP (-1) // No display enable pin available
#define BOARD_IO_EXPANDER_OUTPUT_IO_0_PINS {2, 3, 1} // Backlight, LCD_RST, Touch_RSTRoot Cause
The ghosting appears to be an inherent physical characteristic of the LCD panel's liquid crystals. Some lower-cost RGB TFT panels have slower liquid crystal response times and retain a faint image even when:
- Displaying solid black
- Backlight is off
- No power signal changes occur
Questions for Espressif
-
RGB Peripheral Control: Is there an API to pause/stop the ESP32-S3 RGB peripheral (stop PCLK, disable DE signal) while keeping the LCD initialized?
-
Panel Blanking: Does ESP-IDF provide any low-level functions to "blank" an RGB panel without destroying the driver instance?
-
Hardware Recommendations: For RGB LCDs that need power management, what is the recommended hardware approach? Should we:
- Add external circuitry to cut VDD to the LCD panel?
- Use a different LCD type (MIPI DSI, SPI) for applications requiring display off?
- Accept this as normal behavior for RGB LCD panels?
-
Best Practices: What is Espressif's recommended approach for implementing screen timeout on RGB LCD panels to minimize ghosting/burn-in?
Current Workaround
Currently using simple backlight on/off with acceptance that some ghosting may occur as a hardware limitation of the LCD panel.
Request
Looking for guidance on whether:
- This is expected behavior for RGB LCD panels
- There are undocumented APIs or techniques to mitigate this
- Hardware modifications are necessary
- Different display technology should be used for this use case
Any insights would be greatly appreciated!