From fd16a6066d4b7bcd8ad7e6d94c187de021b59e51 Mon Sep 17 00:00:00 2001 From: Bodmer Date: Thu, 26 Nov 2020 14:18:28 +0000 Subject: [PATCH] Update ILI9486 driver for SPI --- Processors/TFT_eSPI_ESP32.c | 4 ++-- Processors/TFT_eSPI_ESP32.h | 6 +++--- Processors/TFT_eSPI_ESP8266.c | 2 +- Processors/TFT_eSPI_ESP8266.h | 4 ++-- Processors/TFT_eSPI_Generic.c | 2 +- Processors/TFT_eSPI_Generic.h | 4 ++-- Processors/TFT_eSPI_STM32.c | 2 +- Processors/TFT_eSPI_STM32.h | 4 ++-- TFT_Drivers/ILI9486_Init.h | 16 ++++++++++++---- User_Setup_Select.h | 6 +++++- 10 files changed, 31 insertions(+), 19 deletions(-) diff --git a/Processors/TFT_eSPI_ESP32.c b/Processors/TFT_eSPI_ESP32.c index 7a7de75..ed28d1a 100644 --- a/Processors/TFT_eSPI_ESP32.c +++ b/Processors/TFT_eSPI_ESP32.c @@ -173,7 +173,7 @@ void TFT_eSPI::pushPixels(const void* data_in, uint32_t len) } //////////////////////////////////////////////////////////////////////////////////////// -#elif !defined (ILI9481_DRIVER) && !defined (ILI9488_DRIVER) && !defined (TFT_PARALLEL_8_BIT) // Most displays +#elif !defined (SPI_18BIT_DRIVER) && !defined (TFT_PARALLEL_8_BIT) // Most SPI displays //////////////////////////////////////////////////////////////////////////////////////// /*************************************************************************************** @@ -349,7 +349,7 @@ void TFT_eSPI::pushPixels(const void* data_in, uint32_t len){ } //////////////////////////////////////////////////////////////////////////////////////// -#elif (defined (ILI9481_DRIVER) || defined (ILI9488_DRIVER)) && !defined (TFT_PARALLEL_8_BIT)// Now code for ILI9481/8 +#elif defined (SPI_18BIT_DRIVER) // SPI 18 bit colour //////////////////////////////////////////////////////////////////////////////////////// /*************************************************************************************** diff --git a/Processors/TFT_eSPI_ESP32.h b/Processors/TFT_eSPI_ESP32.h index b5aff26..b1d2f9d 100644 --- a/Processors/TFT_eSPI_ESP32.h +++ b/Processors/TFT_eSPI_ESP32.h @@ -52,7 +52,7 @@ #endif // Code to check if DMA is busy, used by SPI bus transaction transaction and endWrite functions -#if !defined(TFT_PARALLEL_8_BIT) && !defined(ILI9481_DRIVER) && !defined(ILI9488_DRIVER) && !defined (RPI_DISPLAY_TYPE) || (defined (RPI_DISPLAY_TYPE) && defined (ST7796_DRIVER)) +#if !defined(TFT_PARALLEL_8_BIT) && !defined(SPI_18BIT_DRIVER) && !defined (RPI_DISPLAY_TYPE) || (defined (RPI_DISPLAY_TYPE) && defined (ST7796_DRIVER)) #define ESP32_DMA // Code to check if DMA is busy, used by SPI DMA + transaction + endWrite functions #define DMA_BUSY_CHECK dmaWait() @@ -349,9 +349,9 @@ #endif //////////////////////////////////////////////////////////////////////////////////////// -// Macros to write commands/pixel colour data to an ILI9488 TFT +// Macros to write commands/pixel colour data to a SPI ILI948x TFT //////////////////////////////////////////////////////////////////////////////////////// -#elif defined (ILI9481_DRIVER) || defined (ILI9488_DRIVER)// 16 bit colour converted to 3 bytes for 18 bit RGB +#elif defined (SPI_18BIT_DRIVER) // SPI 18 bit colour // Write 8 bits to TFT #define tft_Write_8(C) spi.transfer(C) diff --git a/Processors/TFT_eSPI_ESP8266.c b/Processors/TFT_eSPI_ESP8266.c index e621242..83939f9 100644 --- a/Processors/TFT_eSPI_ESP8266.c +++ b/Processors/TFT_eSPI_ESP8266.c @@ -109,7 +109,7 @@ void TFT_eSPI::pushSwapBytePixels(const void* data_in, uint32_t len){ } //////////////////////////////////////////////////////////////////////////////////////// -#elif defined (ILI9481_DRIVER) || defined (ILI9488_DRIVER) +#elif defined (SPI_18BIT_DRIVER) // SPI 18 bit colour //////////////////////////////////////////////////////////////////////////////////////// /*************************************************************************************** diff --git a/Processors/TFT_eSPI_ESP8266.h b/Processors/TFT_eSPI_ESP8266.h index 5dae7a2..7a1a3a0 100644 --- a/Processors/TFT_eSPI_ESP8266.h +++ b/Processors/TFT_eSPI_ESP8266.h @@ -115,9 +115,9 @@ #endif //////////////////////////////////////////////////////////////////////////////////////// -// Macros to write commands/pixel colour data to an ILI9488 TFT +// Macros to write commands/pixel colour data to a SPI ILI948x TFT //////////////////////////////////////////////////////////////////////////////////////// -#if defined (ILI9481_DRIVER) || defined (ILI9488_DRIVER) // 16 bit colour converted to 3 bytes for 18 bit RGB +#if defined (SPI_18BIT_DRIVER) // SPI 18 bit colour // Write 8 bits to TFT #define tft_Write_8(C) spi.transfer(C) diff --git a/Processors/TFT_eSPI_Generic.c b/Processors/TFT_eSPI_Generic.c index 011bcd0..82c6027 100644 --- a/Processors/TFT_eSPI_Generic.c +++ b/Processors/TFT_eSPI_Generic.c @@ -168,7 +168,7 @@ void TFT_eSPI::pushPixels(const void* data_in, uint32_t len) } //////////////////////////////////////////////////////////////////////////////////////// -#elif defined (ILI9481_DRIVER) || defined (ILI9488_DRIVER) // For 24 bit SPI colour TFT +#elif defined (SPI_18BIT_DRIVER) // SPI 18 bit colour //////////////////////////////////////////////////////////////////////////////////////// /*************************************************************************************** diff --git a/Processors/TFT_eSPI_Generic.h b/Processors/TFT_eSPI_Generic.h index b8fd250..c5d3512 100644 --- a/Processors/TFT_eSPI_Generic.h +++ b/Processors/TFT_eSPI_Generic.h @@ -92,9 +92,9 @@ #endif //////////////////////////////////////////////////////////////////////////////////////// -// Macros to write commands/pixel colour data to an ILI9488 TFT +// Macros to write commands/pixel colour data to a SPI ILI948x TFT //////////////////////////////////////////////////////////////////////////////////////// -#if defined (ILI9481_DRIVER) || defined (ILI9488_DRIVER) // 16 bit colour converted to 3 bytes for 18 bit RGB +#if defined (SPI_18BIT_DRIVER) // SPI 18 bit colour // Write 8 bits to TFT #define tft_Write_8(C) spi.transfer(C) diff --git a/Processors/TFT_eSPI_STM32.c b/Processors/TFT_eSPI_STM32.c index c1cb6ad..6c95d2f 100644 --- a/Processors/TFT_eSPI_STM32.c +++ b/Processors/TFT_eSPI_STM32.c @@ -260,7 +260,7 @@ void TFT_eSPI::pushPixels(const void* data_in, uint32_t len) } //////////////////////////////////////////////////////////////////////////////////////// -#elif defined (ILI9481_DRIVER) || defined (ILI9488_DRIVER) // For 24 bit colour TFT ############# UNTESTED ################### +#elif defined (SPI_18BIT_DRIVER) // SPI 18 bit colour //////////////////////////////////////////////////////////////////////////////////////// /*************************************************************************************** diff --git a/Processors/TFT_eSPI_STM32.h b/Processors/TFT_eSPI_STM32.h index 9c04fb6..71557dc 100644 --- a/Processors/TFT_eSPI_STM32.h +++ b/Processors/TFT_eSPI_STM32.h @@ -985,9 +985,9 @@ #endif #endif //////////////////////////////////////////////////////////////////////////////////////// -// Macros to write commands/pixel colour data to a SPI ILI9488 TFT +// Macros to write commands/pixel colour data to a SPI ILI948x TFT //////////////////////////////////////////////////////////////////////////////////////// -#elif defined (ILI9481_DRIVER) || defined (ILI9488_DRIVER) // 16 bit colour converted to 3 bytes for 18 bit RGB +#elif defined (SPI_18BIT_DRIVER) // SPI 18 bit colour // Write 8 bits to TFT #define tft_Write_8(C) \ diff --git a/TFT_Drivers/ILI9486_Init.h b/TFT_Drivers/ILI9486_Init.h index 9464cf7..a0321b1 100644 --- a/TFT_Drivers/ILI9486_Init.h +++ b/TFT_Drivers/ILI9486_Init.h @@ -15,8 +15,12 @@ delay(120); writecommand(0x3A); - writedata(0x55); - + #ifdef TFT_PARALLEL_8_BIT + writedata(0x55); // 16 bit colour interface + #else + writedata(0x66); // 18 bit colour interface + #endif + writecommand(0xC2); writedata(0x44); @@ -60,8 +64,12 @@ writedata(0x20); writedata(0x00); - writecommand(0x20); // display inversion OFF - + #ifdef TFT_PARALLEL_8_BIT + writecommand(TFT_INVOFF); + #else + writecommand(TFT_INVON); + #endif + writecommand(0x36); writedata(0x48); diff --git a/User_Setup_Select.h b/User_Setup_Select.h index c335d03..93c146a 100644 --- a/User_Setup_Select.h +++ b/User_Setup_Select.h @@ -115,6 +115,11 @@ #endif #endif +// Invoke 18 bit colour for selected displays +#if (defined (ILI9481_DRIVER) || defined (ILI9486_DRIVER) || defined (ILI9488_DRIVER)) && !defined (TFT_PARALLEL_8_BIT) + #define SPI_18BIT_DRIVER +#endif + // Load the right driver definition - do not tinker here ! #if defined (ILI9341_DRIVER) #include @@ -185,7 +190,6 @@ #define TFT_DRIVER 0x0000 #endif - // These are the pins for ESP8266 boards // Name GPIO NodeMCU Function #define PIN_D0 16 // GPIO16 WAKE