VGA driver from ESP32 S3
Posted: Wed Nov 30, 2022 9:03 am
Hello,
I' m try to develop VGA driver from ESP32-S3.
My schematic is similar to FabGL library (http://www.fabglib.org/conf_v_g_a.html). I have 8 outputs :
1 output V-Sync
1 output H-Sync
2 outputs red
2 outputs green
2 outputs blue
I tested on ESP32 WROOM, it's work fine.
On ESP32-S3, I can't reused fabGL code (FalbGL use I2S module with LCD capabilities). To work on S3, I reused "rgb_panel" example https://github.com/espressif/esp-idf/tr ... /rgb_panel.
This example draw a scatter chart.
I settting the good IO and timings (640*480 : http://tinyvga.com/vga-timing/640x480@60Hz)
I configure driver with two frame buffer in PSRAM.
But on display is dirty. I see the scatter chart, but it's blink and move and the background is not clean.
I try with "Restart transmission in VSYNC" from LCD menuconfig. It's a little better, the scatter chart is centered, but the signal is not clean.
I checked vsync and hsync with oscilloscope. The timings are good (front porch, back porch, ...)
Something else, I tried without LVGL. I writed a pattern, directly in frame buffer. But I don't known how to switch the framebuffer. To display my pattern, I must to write in the two frame buffer.
Do you have and idea ?
I' m try to develop VGA driver from ESP32-S3.
My schematic is similar to FabGL library (http://www.fabglib.org/conf_v_g_a.html). I have 8 outputs :
1 output V-Sync
1 output H-Sync
2 outputs red
2 outputs green
2 outputs blue
I tested on ESP32 WROOM, it's work fine.
On ESP32-S3, I can't reused fabGL code (FalbGL use I2S module with LCD capabilities). To work on S3, I reused "rgb_panel" example https://github.com/espressif/esp-idf/tr ... /rgb_panel.
This example draw a scatter chart.
I settting the good IO and timings (640*480 : http://tinyvga.com/vga-timing/640x480@60Hz)
I configure driver with two frame buffer in PSRAM.
But on display is dirty. I see the scatter chart, but it's blink and move and the background is not clean.
I try with "Restart transmission in VSYNC" from LCD menuconfig. It's a little better, the scatter chart is centered, but the signal is not clean.
I checked vsync and hsync with oscilloscope. The timings are good (front porch, back porch, ...)
Something else, I tried without LVGL. I writed a pattern, directly in frame buffer. But I don't known how to switch the framebuffer. To display my pattern, I must to write in the two frame buffer.
Code: Select all
// Code OK, but why I must write in the two frame buffer ??
void *buf1 = NULL;
void *buf2 = NULL;
ESP_LOGI(TAG, "Use frame buffers as LVGL draw buffers");
ESP_ERROR_CHECK(esp_lcd_rgb_panel_get_frame_buffer(panel_handle, 2, &buf1, &buf2));
memset(buf1, 0x01, EXAMPLE_LCD_H_RES * EXAMPLE_LCD_V_RES);
memset(buf2, 0x01, EXAMPLE_LCD_H_RES * EXAMPLE_LCD_V_RES);
vTaskDelay(pdMS_TO_TICKS(1000));
memset(buf1, 0x02, EXAMPLE_LCD_H_RES * EXAMPLE_LCD_V_RES);
memset(buf2, 0x02, EXAMPLE_LCD_H_RES * EXAMPLE_LCD_V_RES);
vTaskDelay(pdMS_TO_TICKS(1000));
memset(buf1, 0x04, EXAMPLE_LCD_H_RES * EXAMPLE_LCD_V_RES);
memset(buf2, 0x04, EXAMPLE_LCD_H_RES * EXAMPLE_LCD_V_RES);
vTaskDelay(pdMS_TO_TICKS(1000));