lvgl_esp32_drivers icon indicating copy to clipboard operation
lvgl_esp32_drivers copied to clipboard

disp_drv.rotated not working with ST7735 driver

Open Lisa999 opened this issue 4 years ago • 5 comments

The problem is that the ST7735 display is 160x128 pixels. So if you set:

  • Landscape during compile time
  • disp_drv.rotated = 1 in the code
  • Swap display width and height in the code
  • Call the ST7735 rotation function for a hardware rotate

It still is not working in portrait mode. The upper 128 pixels are working in portrait mode, the bottom 32 pixels are not functioning at all (pixel noise). I suspect the LVGL driver code is still thinking that the height is 128 pixels, despite the rotated setting.

Maybe because of this code in LV_CONF.H ? #define LV_VER_RES_MAX (CONFIG_LVGL_DISPLAY_HEIGHT)

pixelnoise

Little log: D (00:00:02.871) screen: LVGL Width: 128 , Height 160 I (00:00:02.879) lvgl_helpers: Display hor size: 160, ver size: 128 I (00:00:02.880) lvgl_helpers: Display buffer size: 6400 I (00:00:02.890) lvgl_helpers: Initializing SPI master for display I (00:00:02.892) lvgl_helpers: Configuring SPI host VSPI_HOST (2) I (00:00:02.898) lvgl_helpers: MISO pin: -1, MOSI pin: 23, SCLK pin: 18 I (00:00:02.910) lvgl_helpers: Max transfer size: 12800 (bytes) I (00:00:02.912) lvgl_helpers: Initializing SPI bus...

Lisa999 avatar Dec 18 '20 20:12 Lisa999

Hi,

You're right, the drivers code were developed without taking in consideration the rotated field. We're about to move the drivers code into its own repository. You can find it here.

After merging that repo I will try to update the drivers orientation code.

C47D avatar Dec 20 '20 21:12 C47D

void st7735s_flush(lv_disp_drv_t * drv, const lv_area_t * area, lv_color_t * color_map) { uint8_t data[4]; ESP_LOGD(TAG, "Flush, Portrait mode: %u, width: %u , height %u", drv->rotated, drv->hor_res, drv->ver_res);

/*Column addresses*/
st7735s_send_cmd(ST7735_CASET);
data[0] = (area->x1 >> 8) & 0xFF;
data[1] = (area->x1 & 0xFF) + (drv->rotated ? COLSTART : ROWSTART);
data[2] = (area->x2 >> 8) & 0xFF;
data[3] = (area->x2 & 0xFF) + (drv->rotated ? COLSTART : ROWSTART);
st7735s_send_data(data, 4);

/*Page addresses*/
st7735s_send_cmd(ST7735_RASET);
data[0] = (area->y1 >> 8) & 0xFF;
data[1] = (area->y1 & 0xFF) + (drv->rotated ? ROWSTART : COLSTART);
data[2] = (area->y2 >> 8) & 0xFF;
data[1] = (area->y1 & 0xFF) + (drv->rotated ? ROWSTART : COLSTART);
st7735s_send_data(data, 4);

/*Memory write*/
st7735s_send_cmd(ST7735_RAMWR);

uint32_t size = lv_area_get_width(area) * lv_area_get_height(area);

st7735s_send_color((void*)color_map, size * 2);

}

Lisa999 avatar Dec 20 '20 22:12 Lisa999

Ditch st7735s_portrait_mode var, totally unnecessary...

Lisa999 avatar Dec 20 '20 22:12 Lisa999

Wrong: uint8_t data[] = {0xC8, 0xC8, 0xA8, 0xA8}; Right: uint8_t data[] = {0xC0, 0x00, 0x60, 0xA0};

Lisa999 avatar Dec 20 '20 22:12 Lisa999

Sorry for last two mentions, I didn’t intend too, never though from a fork the parent repo issues are touched.

martinberlin avatar Jun 03 '21 02:06 martinberlin