ili9488在8位并口下RGB565及RGB666模式对比
最近买了好几个xu大开源的桌面信息牌,但是固件没有开源。
我按照样例测试一下这块屏幕在RGB565和RGB666的表现
驱动屏幕的部分和下面的差不多
样例
#include <lvgl.h>
#include <TFT_eSPI.h>
#define screenWidth 320
#define screenHeight 480
TFT_eSPI tft = TFT_eSPI(); /* TFT instance */
static lv_disp_draw_buf_t draw_buf;
int ledPin = 22; /* 背光PWM */
const int freq = 5000;
const int ledChannel = 0;
const int resolution = 10;
void my_disp_flush( lv_disp_drv_t *disp, const lv_area_t *area, lv_color_t *color_p )
{
uint32_t w = ( area->x2 - area->x1 + 1 );
uint32_t h = ( area->y2 - area->y1 + 1 );
int i = 0;
tft.startWrite();
tft.setAddrWindow( area->x1, area->y1, w, h );
#if LV_COLOR_DEPTH == 32
while(i < w* h) {
int p = *((( uint32_t * )&color_p->full) + i);
tft_Write_8(p >> 16 & 0xff);
tft_Write_8(p >> 8 & 0xff);
tft_Write_8(p & 0xff);
i++;
}
#else
tft.pushColors( ( uint16_t * )&color_p->full, w * h, true );
#endif
tft.endWrite();
lv_disp_flush_ready( disp );
}
...
setup()
{
...
// 背光
ledcSetup(ledChannel, freq, resolution);
ledcAttachPin(ledPin, ledChannel);
ledcWrite(ledChannel, 1023);
// tft
tft.begin();
tft.writecommand(TFT_INVON);
tft.setRotation(0);
//lvgl
lv_init();
/* 放进bss会溢出 */
void *buf1 = malloc(screenWidth * screenHeight/10 * sizeof(lv_color_t));
lv_disp_draw_buf_init( &draw_buf, buf1, NULL, screenWidth * screenHeight/10);
/*Initialize the display*/
static lv_disp_drv_t disp_drv;
lv_disp_drv_init( &disp_drv );
/*Change the following line to your display resolution*/
disp_drv.hor_res = screenWidth;
disp_drv.ver_res = screenHeight;
disp_drv.flush_cb = my_disp_flush;
disp_drv.draw_buf = &draw_buf;
lv_disp_drv_register( &disp_drv );
...
}
loop()
{
...
ledcWrite(ledChannel, bright); // 调整背光
lv_timer_handler();
delay(5);
}
帧率
RGB565模式下,一个像素传输2个字节,RGB666,则传输3个字节,但是每个字节只用到6bit。
datasheet里面写WRX的最小周期是40ns,那传输的速率就是25MB/s
按照RGB565算,那理论最大的帧率(全屏刷新)就可以达到
25000000/ (320×480×2) = 81.3fps
如果使用RGB666,则可以达到
25000000/ (320×480×3) = 54.2fps
不和触摸屏一起使用的话,感觉fps低一点也没关系
颜色对比
看起来颜色RGB666比RGB565好很多(偏色和颜色过度都更好一些),然而仅仅只是多了2个bit而已,不过这次测试中图片在squareline studio里就已经被转换成对应的pixel format,可能对结果也是有影响的。
这个是原图=>