Arduino DUE + ILI9488 = white screen only

Help please
I have an arduino due
I have this TFT http://www.lcdwiki.com/3.95inch_Arduino_Display-Mega2560
The packet the TFT came in has ILI9488 and MAR3953

I have tried following the examples and double checked pin assignments and I am able to compile to the due but ALL I get is white screen, have tried other libraries and get nothing but white screen.

I wont list all the libraries, all I would like is hopefully from someone who has made this combo work it to have it display "hello world", I can then modify and build from there

(I have successfully used OLED with an UNO and I have had the DUE working with 2 line LCD screen)

First off. Can you confirm that the pcb looks like the picture in your link. i.e. U1-U5 mounted. empty U6.
But actually C1, R2, R3, R1, R4 mounted. empty R5.

Please confirm whether you have a soldering iron and feel confident to remove R4 and mount R5.

Don't worry. I can get you working even if you can't solder.

David.


I can remove the resistor from r4 to r5 if making it 16bit is going to make it work

There is no point in using 8-bit interface because the 16-bit header pins are always engaged.

Please move 0R from R4 to R5. Don't worry if you lose the 0R. Solder a plain wire across the pads.

  1. Plug the Shield into the Due as Nature intended.
  2. Install MCUFRIEND_kbv and Adafruit_GFX via IDE Library Manager.
  3. Follow instructions in mcufriend_how_to.txt
17. If you do not have a standard Uno Shield, you can add a SPECIAL to the mcufriend_special.h
    Edit mcufriend_shield.h:  #define USE_SPECIAL
    Edit mcufriend_special.h: e.g. #define USE_MEGA_16BIT_SHIELD
    If your "special" is write-only,  the library can not read the ID.  It always returns 0xD3D3

  1. Since your shield is write-only you must always "force" the ID e.g. in setup()
    uint16_t ID = tft.readID();
    if (ID == 0xD3D3) ID = 0x9488; // write-only shield
    tft.begin(ID);

Please report back.

David.

p.s. write notes on paper. then you can report each numbered step that you took in your "problem" message.
it takes a few minutes but ensures that you get accurate replies.

Thanks will try that tomorrow
I did the bulk of the above setting everything as 8bit so will see how it goes

Move R0 from R4 to R5 (quick continuity test indicates its soldered correctly)
Adafruit GFX - 1.10.13 uninstalled and re-installed clean
MCUFRIEND_kbv 2.9.9 uninstalled and re-installed clean

MCUFRIEND_kbv\utility\mcufriend_special.h (tried each one separately [not together])
#define USE_DUE_16BIT_SHIELD //RD on PA15 (D24)
#define USE_MEGA_16BIT_SHIELD // 2.14sec Mega2560 Shield

MCUFRIEND_kbv\MCUFRIEND_kbv.cpp (9488 is defined to work)
#define SUPPORT_9488_555 //costs +230 bytes, 0.03s / 0.19s

MCUFRIEND_kbv\examples\testcard_kbv
if (ID == 0xD3D3) ID = 0x9488; // write-only shield

Serial Output:
TFT ID = 0xD3D3 <-read ID
TFT ID = 0x9488 <-forced ID

I still have only a white screen.

Hi @david_prentice
seeing as this TFT maybe a lot of trouble even IF I get it running (did not cost much)

I would also be happy if you could recommend a 3.95" TFT that would work with DUE with a lot less effort.

If it helps I am not interested in touch screen as it will not be used.

@david_prentice - so i tried some other libraries with the display now set to 16bit
http://www.rinkydinkelectronics.com/library.php?id=51 <-- this library actually got me something other than a white screen (small step forward)

Arduino\libraries\UTFT2.9\examples\Arduino (AVR)\UTFT_Demo_480x320 <-- ran this example NO chnages

#define CTE32HR 21 // ILI9481 (16bit) <-- has no 9488 definition in to be found

But I did get the below on the display

I ran the simple text output with the same driver and got this

Do not change anything else in the library files.
Obviously you still have to use tft.begin(0x9488); in individual sketches.

The screen should work when plugged into a Due.
The screen should work when plugged into a MEGA2560.

David.

Use mega I got this (missed the define special earlier)

When I use due shield I get white screen only

I suggest that you always start with graphictest_kbv.ino

It makes any problems "obvious" e.g. CYAN instead of RED

I don't have the ILI9488 version of your shield. I only possess the ST7796 version.

Please run graphictest_kbv.ino
If you have an unusual picture post a screenshot.
I can recognise most things from graphictest_kbv

Please say whether you are using Due or Mega2560.
They should both work the same but it is always wise to report all steps accurately.

David.

Will run the test
I am using a DUE I don’t own a mega260

@david_prentice interesting result :roll_eyes:
So I have to use the mega 16 bit special library the due doesn’t work

ID = 0x9488;                             // force ID
tft.begin(ID);

Video attached - hope you can view it
DUE and ILI9488 settings

My apologies. I was waiting for a "new message" from you to say you had linked to a video.
This Forum software does not report edits.

Anyway, your video shows an 8-bit interface being driven by a 16-bit library. Hence all the "unusual pixels".

Your photo in #2 shows R4=0R i.e. 8-bit interface
Your photo in #7 shows R5=0R i.e. 16-bit interface.

I note that your pcb has no printed info about R4 and R5.
I also note that the copper traces are different on my ST7796 shield but the components are identical i,e, U1-U5

So it is possible that R5 and R4 do not work properly. i.e. the pcb layout is wrong. (you did say that your shield was cheap)

Are you sure that R4 is vacant and R5 is soldered ok in #7 ?

Both 8-bit and 16bit interface work in v2.9.9 for Mega2560
But only 16-bit interface works for Due.

If your Shield is "8bit-only" you would need to install the current Beta from GitHub to work on your Due.

David.

R4 was set from factory and everything says this was 8bit
R5 is now set and should be 16bit

Since the swap from 8bit to 16bit things are at least not just white screen (but a bit messed up as you said)

I just re-checked R4 has nothing and R5 is definitely soldered correctly

Do you have a link please :slight_smile:

@david_prentice I got the 3.95" obviously - i call it cheap
https://www.ebay.com.au/itm/324282797274?var=513594560370

Delete the current MCUFRIEND_kbv directory.

Install the current Beta from https://github.com/prenticedavid/MCUFRIEND_kbv

e.g. from ZIP (or as a regular Master Branch if you are a GitHub member)

And you enable USE_MEGA_8BIT_PORTC_SHIELD and USE_SPECIAL

I am intrigued. R4 and R5 simply configure IM0 pin high for 8bit and low for 16bit. So you can test the pcb "integrity" by removing both R4 and R5. Test pads with a DMM. i.e. R5 pad should be 0V. R4 pad should be 3.3V
When you mount the appropriate 0R the common pad is either 3.3V or 0V.

David.

will download and replace but some more info

I tried all of the bold ones, only the one not commented out gives me any output to screen

// only define one "USE_XXX" macro at any time

//#define USE_MEGA_8BIT_PROTOSHIELD
//#define USE_MEGA_8BIT_SHIELD // 4.7sec Mega2560 Shield
//#define USE_MEGA_8BIT_PORTC_SHIELD // 4.7sec Mega2560 Shield
#define USE_MEGA_16BIT_SHIELD // 2.14sec Mega2560 Shield
//#define USE_BLD_BST_MEGA32U4
//#define USE_BLD_BST_MEGA2560 // 12.23sec Uno Shield (17.38s C)
//#define USE_BLD_BST_MEGA4809 // 5.43sec XPRO-Adapter (7.09s C)
//#define USE_DUE_8BIT_PROTOSHIELD
//#define USE_DUE_16BIT_SHIELD //RD on PA15 (D24)
//#define USE_BOBCACHELOT_TEENSY
//#define USE_OPENSMART_SHIELD_PINOUT_UNO
//#define USE_OPENSMART_SHIELD_PINOUT_MEGA

Well that worked 100% as expected - it all shows correctly