|
1、前言
一年前入手动力工具DIY家SEW-3037W 婴儿无线监视器(发文链接 https://www.mydigit.cn/thread-280592-1-1.html),当时尝试用ESP32的SPI来驱动3.5寸显示屏没有成功,后来找到了屏驱动IC为HX8238-D,并等待ESP32S3上市后购入。时隔一年后,ESP32S3模块降价到与ESP32一样的价格,官方代码也逐渐稳定了,是时候行动了。于是斥资40元入手了非官方版本的ESP32-S3-DevKitC-1模块。下载了开发包,编译测试模块一样好用。模块集成串口,不用按BOOT键直接烧录,很香!
2、婴儿无线监视器显示屏点亮
2.1、用逻辑分析仪测试得出屏接口定义如下:
PIN FUN
1 D0
2 D1
3 D2
4 D3
5 D4
6 D5
7 D6
8 D7
9 DOTCLK
10 VSYNC
11 HSYNC
12 SCK
13 SDI
14 CSB
15 VCC3V3
16 GND
17 BLED-
18 NC
19 BLED+
20 NC
.
.
.
39 RESB
40 NC
2.2、接口转接板
网上有卖各种接口转接板,转成2.54mm能够插杜邦线的双排针,方便连接。
2.3、连线
按照接口定义和代码中定义连好开发板和接口板连线,插上LCD排线。
2.4、代码
采用的是Espressif\frameworks\esp-idf-v5.0\components\esp_lcd\test_apps\rgb_lcd的参考代码,增加模拟SPI配置LCD。代码比较简单,后面附上。
调用test_rgb_panel_initialization(8, 24, 0, false, NULL, NULL);配置8bit RGB,24代表串行8位RGB数据,也就是一个点需要分别传RGB三中颜色8bit数据。
调用esp_lcd_panel_draw_bitmap(panel_handle, 0, 0, TEST_LCD_H_RES, TEST_LCD_V_RES, img);刷新显示缓冲区即可显示。
时序按照手册推荐值设置即可
.timings = {
.pclk_hz = TEST_LCD_PIXEL_CLOCK_HZ,
.h_res = TEST_LCD_H_RES,
.v_res = TEST_LCD_V_RES,
.hsync_back_porch = 204,
.hsync_front_porch =60,
.hsync_pulse_width = 1,
.vsync_back_porch = 18,
.vsync_front_porch = 4,
.vsync_pulse_width = 1,
},
2.5、显示
完美显示图片。3.5寸屏幕分辨率320*240,颗粒感较强。
3、老王家2.8元的3寸屏驱动
有了以上驱动经验,对付老王家的这个屏就好办了。由于已有大侠分析出了驱动芯片和接口,并用FPGA和STM32来驱动的,我这次用ESP32S3来驱动,比较方便。
3.1、同样,上转接板,这个屏需要外接一些电容,LED需要9.6V电压,用个12V适配器串接120欧姆电阻降压。
3.2、连线,显示
该屏物理尺寸是16:9,但是像素是4:3,320*240分辨率,SPI配置可以切换比例。没有仔细分析两种模式的像素点数。
3.3 认识Delta屏
不知各位有没有注意到,上图中佩奇的照片颜色不一致,这就是Delta屏造成的。婴儿监视器的屏所有行数据就是RGBRGB。。。。RGB,而这个Delta屏的数据是偶数行GRBGRB。。。
奇数行GBRGBR。。。,需要对数据作处理交换才可以正常显示颜色。
- while(1)
- {
- for(int i=0;i<TEST_LCD_V_RES;i++)
- {
- for(int j=0;j<TEST_LCD_H_RES*3;j++) // RED
- {
- if(i%2==0)
- {
- if(j%3==1) *(img+TEST_LCD_H_RES*3*i+j)=0xff;
- else *(img+TEST_LCD_H_RES*3*i+j)=0x00;
- }
- else
- {
- if(j%3==2) *(img+TEST_LCD_H_RES*3*i+j)=0xff;
- else *(img+TEST_LCD_H_RES*3*i+j)=0x00;
- }
- }
- }
- esp_lcd_panel_draw_bitmap(panel_handle, 0, 0, TEST_LCD_H_RES, TEST_LCD_V_RES, img);
- vTaskDelay(pdMS_TO_TICKS(400));
-
- for(int i=0;i<TEST_LCD_V_RES;i++)
- {
- for(int j=0;j<TEST_LCD_H_RES*3;j++) // GREEN
- {
- if(i%2==0)
- {
- if(j%3==2) *(img+TEST_LCD_H_RES*3*i+j)=0xff;
- else *(img+TEST_LCD_H_RES*3*i+j)=0x00;
- }
- else
- {
- if(j%3==0) *(img+TEST_LCD_H_RES*3*i+j)=0xff;
- else *(img+TEST_LCD_H_RES*3*i+j)=0x00;
- }
- }
- }
- esp_lcd_panel_draw_bitmap(panel_handle, 0, 0, TEST_LCD_H_RES, TEST_LCD_V_RES, img);
- vTaskDelay(pdMS_TO_TICKS(400));
-
- for(int i=0;i<TEST_LCD_V_RES;i++)
- {
- for(int j=0;j<TEST_LCD_H_RES*3;j++) // BLUE
- {
- if(i%2==0)
- {
- if(j%3==0) *(img+TEST_LCD_H_RES*3*i+j)=0xff;
- else *(img+TEST_LCD_H_RES*3*i+j)=0x00;
- }
- else
- {
- if(j%3==1) *(img+TEST_LCD_H_RES*3*i+j)=0xff;
- else *(img+TEST_LCD_H_RES*3*i+j)=0x00;
- }
- }
- }
- esp_lcd_panel_draw_bitmap(panel_handle, 0, 0, TEST_LCD_H_RES, TEST_LCD_V_RES, img);
- vTaskDelay(pdMS_TO_TICKS(400));
-
- for(int i=0;i<TEST_LCD_V_RES;i++) //WHITE
- for(int j=0;j<TEST_LCD_H_RES*3;j++)
- *(img+TEST_LCD_H_RES*3*i+j)=0xFF;
- esp_lcd_panel_draw_bitmap(panel_handle, 0, 0, TEST_LCD_H_RES, TEST_LCD_V_RES, img);
- vTaskDelay(pdMS_TO_TICKS(400));
-
- memset(img, 0x00, TEST_LCD_V_RES * TEST_LCD_H_RES * 3);
-
- esp_lcd_panel_draw_bitmap(panel_handle, 0, 0, TEST_LCD_H_RES, TEST_LCD_V_RES, img);
- vTaskDelay(pdMS_TO_TICKS(400));
- // LCD_SPI_Transfer_Packet(0x4,0x8B); //narrow display
- for(int i=0;i<TEST_LCD_V_RES;i++)
- {
- for(int j=0;j<TEST_LCD_H_RES*3;j++) //Display picture
- {
- if(i%2==0) //偶数行不交换
- {
- *(img+TEST_LCD_H_RES*3*i+j)=gImage_pig_BRG[TEST_LCD_H_RES*3*i+j];
- }
- else //奇数行交换颜色
- {
- if(j%3==0) *(img+TEST_LCD_H_RES*3*i+j)=gImage_pig_BRG[TEST_LCD_H_RES*3*i+j+2];
- else if(j%3==1) *(img+TEST_LCD_H_RES*3*i+j)=gImage_pig_BRG[TEST_LCD_H_RES*3*i+j-1];
- else *(img+TEST_LCD_H_RES*3*i+j)=gImage_pig_BRG[TEST_LCD_H_RES*3*i+j-1];
- }
- }
- }
- esp_lcd_panel_draw_bitmap(panel_handle, 0, 0, TEST_LCD_H_RES, TEST_LCD_V_RES, img);
- vTaskDelay(pdMS_TO_TICKS(2000));
- // LCD_SPI_Transfer_Packet(0x4,0x0B); //normal display
- }
复制代码
4、几点说明
DOTCLK时钟设置为20MHz,设置太高屏幕显示会横向漂移。
ESP32S3模块要用带8线PSRAM的,示例程序需要用到PSRAM,8线80MHz的速率PSRAM才能正常显示。
ESP32S3 SDK写好了SPI,I2C,i80,RGB等各种屏的示例程序,使用起来比较方便。
5、资料附件下载:
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
打赏
-
查看全部打赏
|