ILI9488 3.5" TFT Shield Displays Incorrect Colours

Hello, I'm fairly new to Arduinos and recently bought a 3.5" TFT Shield for use with a Mega 2560 off Amazon.

Here is the link to the unit I purchased:

3.5 Inch 480 x320 TFT LCD SSD Touchscreen Shield Panel Display Module Mega2560 Controlled

Here is an image of the shield:

After calibrating it, I was testing it out with the MCUFriend library graphicstest_kbv sketch and found that the colours are displayed incorrectly:

  • Red is displayed as Cyan
  • Green is displayed as Magenta
  • Blue is displayed as Yellow

Shown below Is one of the images showing the output displayed:

I've ensured I have the latest version of the mcufriend_kbv library.

The Serial Monitor output from the diagnose_tft_Support sketch looks like this:

*11:24:24.732 -> There are FAQs in extras/mcufriend_how_to.txt*
*11:24:24.779 -> *
*11:24:24.826 -> tft.readID() finds: ID = 0x9488*
*11:24:24.826 -> *
*11:24:24.826 -> MCUFRIEND_kbv version: 3.0.0*
*11:24:24.826 -> *
*11:24:25.376 -> *
*11:24:25.376 -> PORTRAIT is 320 x 480*
*11:24:25.376 -> *
*11:24:25.376 -> Run the examples/graphictest_kbv sketch*
*11:24:25.423 -> All colours, text, directions, rotations, scrolls*
*11:24:25.470 -> should work.  If there is a problem,  make notes on paper*
*11:24:25.517 -> Post accurate description of problem to Forum*
*11:24:25.610 -> Or post a link to a video (or photos)*
*11:24:25.610 -> *
*11:24:25.610 -> I rely on good information from remote users*

I hope somebody can advise what I should do to get the display working as intended.

Thanks very much,

Jon

Here are some more images of what the display looks like:

Is it simply a matter of revising the colour values in the software? All the various colours do display, but they just appear to be logically shifted, if you see what I mean.

Thanks!

Jon

I ran the LCD_ID_Readreg sketch to check the values there and found the following:

12:33:57.631 -> Read Registers on MCUFRIEND UNO shield
12:33:58.615 -> controllers either read as single 16-bit
12:33:58.615 -> e.g. the ID is at readReg(0)
12:33:58.662 -> or as a sequence of 8-bit values
12:33:58.709 -> in special locations (first is dummy)
12:33:58.745 -> 
12:33:58.745 -> reg(0x0000) 00 00	ID: ILI9320, ILI9325, ILI9335, ...
12:33:58.792 -> reg(0x0004) 00 54 80 66	Manufacturer ID
12:33:58.839 -> reg(0x0009) 00 00 61 00 00	Status Register
12:33:58.885 -> reg(0x000A) 00 08	Get Power Mode
12:33:58.932 -> reg(0x000C) 00 06	Get Pixel Format
12:33:58.979 -> reg(0x0061) 00 00	RDID1 HX8347-G
12:33:59.026 -> reg(0x0062) 00 00	RDID2 HX8347-G
12:33:59.026 -> reg(0x0063) 00 00	RDID3 HX8347-G
12:33:59.073 -> reg(0x0064) 00 00	RDID1 HX8347-A
12:33:59.120 -> reg(0x0065) 00 00	RDID2 HX8347-A
12:33:59.120 -> reg(0x0066) 00 00	RDID3 HX8347-A
12:33:59.167 -> reg(0x0067) 00 00	RDID Himax HX8347-A
12:33:59.213 -> reg(0x0070) 00 00	Panel Himax HX8347-A
12:33:59.260 -> reg(0x00A1) 00 93 30 93 30	RD_DDB SSD1963
12:33:59.307 -> reg(0x00B0) 00 00	RGB Interface Signal Control
12:33:59.354 -> reg(0x00B4) 00 02	Inversion Control
12:33:59.401 -> reg(0x00B6) 00 02 02 3B 3B	Display Control
12:33:59.448 -> reg(0x00B7) 00 06	Entry Mode Set
12:33:59.495 -> reg(0x00BF) 00 00 00 00 00 00	ILI9481, HX8357-B
12:33:59.542 -> reg(0x00C0) 00 0E 0E 0E 0E 0E 0E 0E 0E	Panel Control
12:33:59.588 -> reg(0x00C8) 00 B0 B0 B0 B0 B0 B0 B0 B0 B0 B0 B0 B0	GAMMA
12:33:59.635 -> reg(0x00CC) 00 03	Panel Control
12:33:59.682 -> reg(0x00D0) 00 00 00	Power Control
12:33:59.729 -> reg(0x00D2) 00 00 00 00 05	NVM Read
12:33:59.776 -> reg(0x00D3) 00 00 94 88	ILI9341, ILI9488
12:33:59.823 -> reg(0x00D4) 00 97 00 00	Novatek ID
12:33:59.823 -> reg(0x00DA) 00 54	RDID1
12:33:59.870 -> reg(0x00DB) 00 80	RDID2
12:33:59.916 -> reg(0x00DC) 00 66	RDID3
12:33:59.916 -> reg(0x00E0) 00 00 07 0C 05 13 09 36 AA 46 09 10 0D 1A 1E 0F	GAMMA-P
12:33:59.963 -> reg(0x00E1) 00 00 20 23 04 10 06 37 56 49 04 0C 0A 33 37 0F	GAMMA-N
12:34:00.057 -> reg(0x00EF) 00 00 00 00 00 00	ILI9327
12:34:00.104 -> reg(0x00F2) 00 58 04 12 02 22 22 FF 0A 90 14 88	Adjust Control 2
12:34:00.198 -> reg(0x00F6) 00 00 00 00	Interface Control

Hopefully this information assists!

Jon

Two thoughts:

  1. try adding something like tft.invertDisplay(true); or tft.invertDisplay(false); in your setup().
  2. (Less likely IMO): look near the top of MCUFRIEND_kbv.cpp for #define SUPPORT_9488_555. You could try commenting that out or uncommenting it in and see if it makes a difference. I don't think this is the problem, but if #1 doesn't do the trick, it can't hurt to try.

tft.invertDisplay(true); sorted it.

Thank you!

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.