lexus2k / lcdgfx

Driver for LCD displays running on Arduino/Avr/ESP32/Linux (including Rasperry) platforms
MIT License
354 stars 51 forks source link

ST7789 240x240 display #86

Open Adrianotiger opened 2 years ago

Adrianotiger commented 2 years ago

Hi, I was trying to add the 240x240 display to the list, but I can't see how I should do it.

If I just add the template an offset to the image is set.

Probably I need to edit some data here:


static const PROGMEM uint8_t s_ST7789_lcd135x240x16_initData[] = {
#ifdef SDL_EMULATION
    SDL_LCD_ST7789, 0x00, 0b00010000, 0x00,
#endif
    0x01, CMD_DELAY, 150,                     // SWRESET sw reset. not needed, we do hardware reset
    0x11, CMD_DELAY, 20,                      // SLPOUT exit sleep mode
    0x13, CMD_DELAY, 10,                      // NORON
    0x3A, 0x01, 0x55,                         // COLMOD set 16-bit pixel format 0x55
    0x36, 0x01, 0b00001000,                   // MADCTL 08 Adafruit
    0xB6, 0x02, 0x0A, 0x82,                   // DISSET5
    0xB2, 0x05, 0x0C, 0x0C, 0x00, 0x33, 0x33, // FRMCTR2 / PORCTL, Frame Rate Control (In Idle mode/ 8-colors)
    0xB7, 0x01, 0x35,                         // VGH / VGL
    0xBB, 0x01, 0x28,                         // VCOM
    0xC0, 0x01, 0x0C,                         // LCM / PWCTR1 power control 1
    0xC2, 0x02, 0x01, 0xFF,                   // VDV PWCTR3 power control 3
    0xC3, 0x01, 0x10,                         // VRH
    0xC4, 0x01, 0x20,                         // VDV
    0xC6, 0x01, 0x0F,                         // FRCTR2
    0xD0, 0x02, 0xA4, 0xA1,                   // PWCTRL1
    0xE0, 0x0E,                               // GMCTRP1 positive gamma correction
    0xD0, 0x00, 0x02, 0x07, 0x0A, 0x28, 0x32, 0x44, 0x42, 0x06, 0x0E, 0x12, 0x14, 0x17, 0xE1,
    0x0E, // GMCTRN1 negative gamma correction
    0xD0, 0x00, 0x02, 0x07, 0x0A, 0x28, 0x31, 0x54, 0x47, 0x0E, 0x1C, 0x17, 0x1B, 0x1E,
    //    0x2A,  0x04,  0x00,  0x00,  0x00,  0x7F,   // set column address, not needed. set by direct API
    //    0x2B,  0x04,  0x00,  0x00,  0x00,  0x9F,   // set page address, not needed. set by direct API
    0x21, CMD_DELAY, 10,  // INVON (21h): Display Inversion On
    0x29, CMD_DELAY, 120, // DISPON display on
};

But I don't know what. Is it possible to add the display in a future release? Thanks.

lexus2k commented 2 years ago

Hi, yes, it is possible to add such support for future releases. You may use ST7735 displays as an example, the actual library c++ files are automatically generated by Python script. Did you try to run it? lcd_code_generator.py

Adrianotiger commented 2 years ago

Did you try to run it? lcd_code_generator.py

No, sorry. Didn't know that there was this possibility. I will try it. Thanks.

lexus2k commented 2 years ago

Can you check the latest commit?

GitMoDu commented 5 months ago

I have tested the current version and it's not fully working yet. Seems like the offset aren't right. IMG_20231221_140521

lexus2k commented 5 months ago

@GitMoDu Did you try to use setOffset API? It is available for ST7789.

GitMoDu commented 5 months ago

Thanks, that did the trick. Using setOffset() API directly on the driver had no effect, but through the getInterface() I was able to set the offsets to 0. Now most orientations fill the screen perfectly with no artifacts.

IMG_20231227_132722

However, with -90 degree orientation seems like it's still not aligned.
IMG_20231227_132726