Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 35 additions & 0 deletions TFT_Drivers/GC9D01_Defines.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
// Change the width and height if required (defined in portrait mode)
// or use the constructor to over-ride defaults
#ifndef TFT_WIDTH
#define TFT_WIDTH 160
#endif
#ifndef TFT_HEIGHT
#define TFT_HEIGHT 160
#endif

// Delay between some initialisation commands
#define TFT_INIT_DELAY 0x80

// Generic commands used by TFT_eSPI.cpp
#define TFT_NOP 0x00
#define TFT_SWRST 0x01

#define TFT_CASET 0x2A
#define TFT_PASET 0x2B
#define TFT_RAMWR 0x2C

#define TFT_RAMRD 0x2E
#define TFT_IDXRD 0x00 //0xDD // ILI9341 only, indexed control register read

#define TFT_MADCTL 0x36
#define TFT_MAD_MY 0x80
#define TFT_MAD_MX 0x40
#define TFT_MAD_MV 0x20
#define TFT_MAD_ML 0x10
#define TFT_MAD_BGR 0x00
#define TFT_MAD_MH 0x04
#define TFT_MAD_RGB 0x08


#define TFT_INVOFF 0x20
#define TFT_INVON 0x21
236 changes: 236 additions & 0 deletions TFT_Drivers/GC9D01_Init.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,236 @@

// This is the command sequence that initialises the GC9D01 driver

{
writecommand(0xFE);
writecommand(0xEF);

writecommand(0x80);
writedata(0xFF);

writecommand(0x81);
writedata(0xFF);

writecommand(0x82);
writedata(0xFF);

writecommand(0x83);
writedata(0xFF);

writecommand(0x84);
writedata(0xFF);

writecommand(0x85);
writedata(0xFF);

writecommand(0x86);
writedata(0xFF);

writecommand(0x87);
writedata(0xFF);

writecommand(0x88);
writedata(0xFF);

writecommand(0x89);
writedata(0xFF);

writecommand(0x8A);
writedata(0xFF);

writecommand(0x8B);
writedata(0xFF);

writecommand(0x8C);
writedata(0xFF);

writecommand(0x8D);
writedata(0xFF);

writecommand(0x8E);
writedata(0xFF);

writecommand(0x8F);
writedata(0xFF);

writecommand(0x3A);
writedata(0x05);

writecommand(0xEC);
writedata(0x01);

writecommand(0x74);
writedata(0x02);
writedata(0x0E);
writedata(0x00);
writedata(0x00);
writedata(0x00);
writedata(0x00);
writedata(0x00);

writecommand(0x98);
writedata(0x3E);
writecommand(0x99);
writedata(0x3E);

writecommand(0xB5);
writedata(0x0D);
writedata(0x0D);

writecommand(0x60);
writedata(0x38);
writedata(0x0F);
writedata(0x79);
writedata(0x67);

writecommand(0x61);
writedata(0x38);
writedata(0x11);
writedata(0x79);
writedata(0x67);

writecommand(0x64);
writedata(0x38);
writedata(0x17);
writedata(0x71);
writedata(0x5F);
writedata(0x79);
writedata(0x67);

writecommand(0x65);
writedata(0x38);
writedata(0x13);
writedata(0x71);
writedata(0x5B);
writedata(0x79);
writedata(0x67);

writecommand(0x6A);
writedata(0x00);
writedata(0x00);

writecommand(0x6C);
writedata(0x22);
writedata(0x02);
writedata(0x22);
writedata(0x02);
writedata(0x22);
writedata(0x22);
writedata(0x50);

writecommand(0x6E);
writedata(0x03);
writedata(0x03);
writedata(0x01);
writedata(0x01);
writedata(0x00);
writedata(0x00);
writedata(0x0f);
writedata(0x0f);
writedata(0x0d);
writedata(0x0d);
writedata(0x0b);
writedata(0x0b);
writedata(0x09);
writedata(0x09);
writedata(0x00);
writedata(0x00);
writedata(0x00);
writedata(0x00);
writedata(0x0a);
writedata(0x0a);
writedata(0x0c);
writedata(0x0c);
writedata(0x0e);
writedata(0x0e);
writedata(0x10);
writedata(0x10);
writedata(0x00);
writedata(0x00);
writedata(0x02);
writedata(0x02);
writedata(0x04);
writedata(0x04);

writecommand(0xbf);
writedata(0x01);

writecommand(0xF9);
writedata(0x40);

writecommand(0x9b);
writedata(0x3b);
writecommand(0x93);
writedata(0x33);
writedata(0x7f);
writedata(0x00);

writecommand(0x7E);
writedata(0x30);

writecommand(0x70);
writedata(0x0d);
writedata(0x02);
writedata(0x08);
writedata(0x0d);
writedata(0x02);
writedata(0x08);

writecommand(0x71);
writedata(0x0d);
writedata(0x02);
writedata(0x08);

writecommand(0x91);
writedata(0x0E);
writedata(0x09);

writecommand(0xc3);
writedata(0x19);
writecommand(0xc4);
writedata(0x19);
writecommand(0xc9);
writedata(0x3c);

writecommand(0xf0);
writedata(0x53);
writedata(0x15);
writedata(0x0a);
writedata(0x04);
writedata(0x00);
writedata(0x3e);

writecommand(0xf2);
writedata(0x53);
writedata(0x15);
writedata(0x0a);
writedata(0x04);
writedata(0x00);
writedata(0x3a);

writecommand(0xf1);
writedata(0x56);
writedata(0xa8);
writedata(0x7f);
writedata(0x33);
writedata(0x34);
writedata(0x5f);

writecommand(0xf3);
writedata(0x52);
writedata(0xa4);
writedata(0x7f);
writedata(0x33);
writedata(0x34);
writedata(0xdf);

writecommand(0x36);
writedata(0x00);


writecommand(0x11);
delay(200);

writecommand(0x29);
writecommand(0x2C);
}
28 changes: 28 additions & 0 deletions TFT_Drivers/GC9D01_Rotation.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@

// This is the command sequence that rotates the GC9D01 driver coordinate frame

rotation = m % 4;

writecommand(TFT_MADCTL);
switch (rotation) {
case 0: // Portrait
writedata(TFT_MAD_BGR);
_width = _init_width;
_height = _init_height;
break;
case 1: // Landscape (Portrait + 90)
writedata(TFT_MAD_MX | TFT_MAD_MV | TFT_MAD_BGR);
_width = _init_height;
_height = _init_width;
break;
case 2: // Inverter portrait
writedata(TFT_MAD_MX | TFT_MAD_MY | TFT_MAD_BGR);
_width = _init_width;
_height = _init_height;
break;
case 3: // Inverted landscape
writedata(TFT_MAD_MV | TFT_MAD_MY | TFT_MAD_BGR);
_width = _init_height;
_height = _init_width;
break;
}
2 changes: 2 additions & 0 deletions TFT_config.h
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,8 @@
#define ILI9225_DRIVER
#elif defined (CONFIG_TFT_GC9A01_DRIVER)
#define GC9A01_DRIVER
#elif defined (CONFIG_TFT_GC9D01_DRIVER)
#define GC9D01_DRIVER
#endif

#ifdef CONFIG_TFT_RGB_ORDER
Expand Down
6 changes: 6 additions & 0 deletions TFT_eSPI.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -757,6 +757,9 @@ void TFT_eSPI::init(uint8_t tc)
#elif defined (GC9A01_DRIVER)
#include "TFT_Drivers/GC9A01_Init.h"

#elif defined (GC9D01_DRIVER)
#include "TFT_Drivers/GC9D01_Init.h"

#elif defined (ILI9225_DRIVER)
#include "TFT_Drivers/ILI9225_Init.h"

Expand Down Expand Up @@ -858,6 +861,9 @@ void TFT_eSPI::setRotation(uint8_t m)
#elif defined (GC9A01_DRIVER)
#include "TFT_Drivers/GC9A01_Rotation.h"

#elif defined (GC9D01_DRIVER)
#include "TFT_Drivers/GC9D01_Rotation.h"

#elif defined (ILI9225_DRIVER)
#include "TFT_Drivers/ILI9225_Rotation.h"

Expand Down
5 changes: 5 additions & 0 deletions User_Setup_Select.h
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,8 @@

//#include <User_Setups/Setup301_BW16_ST7735.h> // Setup file for Bw16-based boards with ST7735 160 x 80 TFT
//#include <User_Setups/Setup302_Waveshare_ESP32S3_GC9A01.h> // Setup file for Waveshare ESP32-S3-Touch-LCD-1.28 board with GC9A01 240*240 TFT
//#include <User_Setups/Setup303_Waveshare_GC9D01.h> // Setup file for Waveshare 0.71" round LCD board with 160 x 160 IPS


//#include <User_Setups/SetupX_Template.h> // Template file for a setup

Expand Down Expand Up @@ -259,6 +261,9 @@
#elif defined (GC9A01_DRIVER)
#include "TFT_Drivers/GC9A01_Defines.h"
#define TFT_DRIVER 0x9A01
#elif defined (GC9D01_DRIVER)
#include "TFT_Drivers/GC9D01_Defines.h"
#define TFT_DRIVER 0x9D01
#elif defined (ILI9225_DRIVER)
#include "TFT_Drivers/ILI9225_Defines.h"
#define TFT_DRIVER 0x9225
Expand Down
44 changes: 44 additions & 0 deletions User_Setups/Setup303_Waveshare_GC9D01.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
// See SetupX_Template.h for all options available
#define USER_SETUP_ID 303

#define GC9D01_DRIVER

#define TFT_RGB_ORDER TFT_BGR // Colour order Blue-Green-Red
#define TFT_INVERSION_OFF

#define TFT_WIDTH 160
#define TFT_HEIGHT 160


// Pin definition published by Waveshare for ESP32-C6
//#define TFT_MISO -1
//#define TFT_MOSI 7
//#define TFT_SCLK 6
//#define TFT_CS 5
//#define TFT_DC 4
//#define TFT_RST 8

// Pin definition successfully tested with Raspberry Pi Pico 2W (RP2350) via SPI
//#define TFT_MISO -1
#define TFT_MOSI 3
#define TFT_SCLK 2
#define TFT_CS 5
#define TFT_DC 20
#define TFT_RST 22
#define TFT_BL 21


#define LOAD_GLCD // Font 1. Original Adafruit 8 pixel font needs ~1820 bytes in FLASH
#define LOAD_FONT2 // Font 2. Small 16 pixel high font, needs ~3534 bytes in FLASH, 96 characters
#define LOAD_FONT4 // Font 4. Medium 26 pixel high font, needs ~5848 bytes in FLASH, 96 characters
#define LOAD_FONT6 // Font 6. Large 48 pixel font, needs ~2666 bytes in FLASH, only characters 1234567890:-.apm
#define LOAD_FONT7 // Font 7. 7 segment 48 pixel font, needs ~2438 bytes in FLASH, only characters 1234567890:.
#define LOAD_FONT8 // Font 8. Large 75 pixel font needs ~3256 bytes in FLASH, only characters 1234567890:-.
#define LOAD_GFXFF // FreeFonts. Include access to the 48 Adafruit_GFX free fonts FF1 to FF48 and custom fonts
#define SMOOTH_FONT



#define SPI_FREQUENCY 27000000
#define SPI_READ_FREQUENCY 20000000
//#define SPI_TOUCH_FREQUENCY 2500000