Template: Pico ResTouch LCD 2.8 Guide

From Waveshare Wiki
Revision as of 01:43, 26 September 2022 by Eng49 (talk | contribs) (→‎C)
Jump to: navigation, search

Features

  • 320 × 240 resolution, IPS screen, 262K RGB, clear and colorful displaying effect.
  • Dedicated touch controller, bringing more smooth touching effect than AD-controlled solutions.
  • MicroSD card slot for storing images and direct displaying them easily.
  • Programmable backlight control, power saving.
  • Comes with development resources and manual (Raspberry Pi Pico C/C++ and MicroPython examples).

Pin

The built-in controller used by this LCD is ST7789VW, which is an LCD controller with 240 x RGB x 320 pixels, while the pixels of this LCD itself are 240 (H) RGB x 320 (V), and the internal RAM of the LCD has been fully used. The LCD supports 16-bit or 18-bit input color formats per pixel, namely RGB565, and RGB666. The test demo uses RGB565 color format, which is a commonly used RGB format. LCD uses a four-wire SPI communication interface, which can greatly save GPIO ports, At the same time, the communication speed will be faster. The maximum SPI write speed tested is 60MHz.
Pico-ResTouch-LCD-2.8-details-inter.jpg
0.96inch lcd module spi.png
Note: The difference with the traditional SPI protocol is that the data cable from the slave to the host is hidden as this product is mostly used for display. Please refer to Datasheet Page 55 (8.4 Serial Interface).

  • RESX (LCD_RST) indicates reset and is set to "1" when the module is powered on.
  • CSX (LCD_CS) indicates the slave chip selection and the chip is enabled when CS is low.
  • D/CX (LCD_DC) indicates the chip data/command control pin. When DC=0, it is writing commands. When DC=1, it is writing data.
  • SDA (MOST) is the transmitted data, that is, RGB data.
  • SCL (CLK) is the SPI clock.
  • As for SPI communication, the data has transmission order, that is the combination of clock phase (CPHA) and clock polarity (CPOL).
  • The level of CPHA determines whether the serial synchronization clock is collected on the first clock transition edge or the second clock transition edge. When CPHA = 0, data acquisition is performed on the first transition edge.
  • The level of CPOL determines the idle state level of the serial synchronous clock. CPOL = 0, which is a low level.
  • As can be seen from the figure, when the first falling edge of SCLK starts to transmit data, 8bit data is transmitted in one clock cycle, using SPI0, bit-wise transmission, high-order first, and low-order last.

Dimension

Pico ResTouch LCD 2.8 Guide.jpg

Connection

Pico-ResTouch-LCD-2.8-details-3.jpg
Pay attention to the connection direction of the Pico, the USB of the Pico should be in the same direction as the MicroSD card.

Setup environment

1. Please install Pico SDK in Arduino IDE, click Tools->Board->Boards Manager in the menu bar and search for Raspberry Pi Pico, find the corresponding library, and click Install to install it, as shown in the figure below:
Pico 10dof imu spec40.jpg
2. Please refer to The C/C++ SDK, 9.2. Building on MS Windows in GET-START document for the compilation environment of VScode(Cmake).
Pico ResTouch LCD02.jpg
3. Please refer to the official micropython document to set up the environment, and select the Raspberry Pi Pico device in Thonny's Tools->Options->Interprete. As shown below:
Pico-GPS-002.jpg

Download Demo codes

  1. Click to download the sample demo.
  2. Please open the VScode (Cmake) project with VScode software.
  3. Unzip the sample demo and click ".ino" to open the Arduino demo. Please upload the Micropython sample demo to Pico document system. As shown below:

Thonny03.jpg

Run the Demo codes

Arduino

1. Open Arduino IDE or ".ino" sample program. Click "Tools->Board->Raspberry Pi Pico" in the Tools. As shown below.
Pico-GPS-003.jpg
2. Install the TFT_eSPI library, click Tools->Manage Library in the menu bar, search for TFT_eSPI and click Install.
Pico ResTouch LCD 3.5 Guide09.png
3. To configure the driver file, open the Arduino library file directory, usually in C:\Users\xxxx\Documents\Arduino\libraries\TFT_eSPI\ , for ResTouch-LCD-3.5, put the TFT_eSPI library (User_Setups\Setup60_RP2040_ILI9341.h) (User_Setup_Select.h) with the files in the sample program folder Arduino\ResTouch-LCD-3.5, and the same for ResTouch-LCD-2.8, as shown in the figure.
Pico ResTouch LCD 3.5 Guide11.jpg
4. Select the example program under File-Examples->TFT_eSPI->480*320 in the menu bar, and then click Upload under Edit to download the code to Pico.

VScode(Cmake)

  • Open the c project with VScode, and then compile to download.

Micropython

  • Open Thonny IDE, and save the code under "python/2inch8/" to the Pico file system. As shown below, and the same for ResTouch-LCD-2.8.

Pico ResTouch LCD 3.5 Guide10.jpg

Codes Analysis

C

The example will display strings, figures, image and finally the touch pad function. We use three drawing functions in main part and set the TP_DrawBoard() to loop for releasing the features.

GUI_Show();
LCD_Show_bmp(Bmp_ScanDir , Lcd_ScanDir);	
TP_DrawBoard();

Note that if you want to test the LCD_ShowBMP example, you need to copy the picture from the PIC folder to the root directory of a micro SD card, insert the SD card into the slot in the backside of the LCD. Then run the examples.

  • The micro SD card should in FAT format, and the resolution of pictures used should be the same as the LCD, for a 2.8inch LCD, it is 320 × 240, and 480 × 320 for a 3.5inch LCD. 24bit BMP.


The LCD controller is ST7789, we need to intialize the controller at the first, which is done in LCD_Driver.c file
And being called in lcd_test.c file,

 System_Init();//System intialize, configure serial port and SPI interface...<br/>
  LCD_SCAN_DIR Lcd_ScanDir = SCAN_DIR_DFT; //Set the scanmode <br/>
  LCD_Init( Lcd_ScanDir, 200);//Initialize LCD panel, confirm the scan mode and the brightness<br/>

GUI functions are all saved in LCD_GUI.c file, you can call them to draw the display

  • Draw point
void GUI_DrawPoint(POINT Xpoint, POINT Ypoint, COLOR Color,
                   DOT_PIXEL Dot_Pixel, DOT_STYLE DOT_STYLE)
  • Draw line (dotted or solid):
void GUI_DrawLine(POINT Xstart, POINT Ystart, POINT Xend, POINT Yend,
                  COLOR Color, LINE_STYLE Line_Style, DOT_PIXEL Dot_Pixel)
  • Draw a rectangle (empty or filled)
void GUI_DrawRectangle(POINT Xstart, POINT Ystart, POINT Xend, POINT Yend,
                       COLOR Color, DRAW_FILL Filled, DOT_PIXEL Dot_Pixel)
  • Draw a circle (empty or filled)
void GUI_DrawCircle(POINT X_Center, POINT Y_Center, LENGTH Radius,
                    COLOR Color, DRAW_FILL  Draw_Fill , DOT_PIXEL Dot_Pixel)
  • Display character
void GUI_DisChar(POINT Xpoint, POINT Ypoint, const char Acsii_Char,
                 sFONT* Font, COLOR Color_Background, COLOR Color_Foreground)
  • Display string
void GUI_DisString_EN(POINT Xstart, POINT Ystart, const char * pString,
                      sFONT* Font, COLOR Color_Background, COLOR Color_Foreground )
  • Display number
void GUI_DisNum(POINT Xpoint, POINT Ypoint, int32_t Nummber,
                sFONT* Font, COLOR Color_Background, COLOR Color_Foreground )
  • Display time
void GUI_Showtime(POINT Xstart, POINT Ystart, POINT Xend, POINT Yend,
                  DEV_TIME *pTime, COLOR Color)


In the example, we read the BMP picture from SD card by SPI interface and display it.
In lcd_test.c file, we use two functions for display picture:

SD_Init();//Initialize SD card
LCD_Show_bmp(bmp_scan_dir,lcd_scan_dir);//Display BMP picture

These functions are written in LCD_Bmp.c, actually read the picture data in the BMP format with a specific file name from the SD card and then call the display function written by ourselves to "express" the data as an image again

In LCD_Touch.c file:

  TP_Init( Lcd_ScanDir );//Initialize touch panel and set the scan mode
  TP_GetAdFac();//Calibrate the display
  TP_Dialog();//Clear
  TP_DrawBoard();//Enable the drawing board

There will be five colors on the right side of the screen, the default color is black, touch them to select the pen color; click the AD button, and follow the on-screen prompts to click the red + sign to calibrate the screen; click the CLEAR button in upper right corner to clear the drawing board
The touch experiment uses four sets of calibration values by default, which can meet the brush operations in four directions. There are five color choices on the right, and the default brush size is 9 pixels.
The function for touching are saved in the LCD_Touch.c file

There are five fonts available.

   Width 5, Height 8    font8
   Width 7,Height 12    font12
   Width 11,Height 16    font16
   Width 14,Height 20    font20
   Width 17,Height24    font24


  • If you need characters in different sizes and fonts, you can generate the font library you want by the font extraction software provided in the Resources
  • In fact, you can use the Image2Lcd software to convert a picture to arrays and display them by the functions in the example.
  • Datasheet of chips are provided, you can read them for more information.