TFT LCD ID not recognised - Just White

Hi there and thanks for having such a great resource for us new to the Arduino world.

I have just purchased a 2.8" TFT touch display to use on a project but for the life of me i cannot get the thing to work.

purchase from ebay - so i should have realised that it would not have been as easy as plug and play!

https://www.ebay.co.uk/itm/384749838816?hash=item5994e0a1e0:g:7ZIAAOSwzn5iFfRa

Having realised the adafruit libraries were not going to help i have searched the forum for others with the same issue of just getting a white screen and realised i needed the MCUFRIEND libraries.

I am now unsure what i need to change in the MCUFRIEND-kbv.cpp file to get this thing to work for me. I tried defining #define SUPPORT_8230 but this has done nothing to help.

the "how to" on Github suggests running LCD_ID_readreg.ino to verify the non-standard wiring and posting here for help.

Read Registers on MCUFRIEND UNO shield
controllers either read as single 16-bit
e.g. the ID is at readReg(0)
or as a sequence of 8-bit values
in special locations (first is dummy)

reg(0x0000) C0 C0	ID: ILI9320, ILI9325, ILI9335, ...
reg(0x0004) 00 00 00 00	Manufacturer ID
reg(0x0009) 00 00 61 00 00	Status Register
reg(0x000A) 00 08	Get Power Mode
reg(0x000C) 00 06	Get Pixel Format
reg(0x0061) E1 E1	RDID1 HX8347-G
reg(0x0062) E2 E2	RDID2 HX8347-G
reg(0x0063) E3 E3	RDID3 HX8347-G
reg(0x0064) E4 E4	RDID1 HX8347-A
reg(0x0065) E5 E5	RDID2 HX8347-A
reg(0x0066) E6 E6	RDID3 HX8347-A
reg(0x0067) E7 E7	RDID Himax HX8347-A
reg(0x0070) F0 F8	Panel Himax HX8347-A
reg(0x00A1) E1 E1 E1 E1 E1	RD_DDB SSD1963
reg(0x00B0) F0 F8	RGB Interface Signal Control
reg(0x00B4) F4 F4	Inversion Control
reg(0x00B6) F6 F6 F6 FE FE	Display Control
reg(0x00B7) F7 F7	Entry Mode Set
reg(0x00BF) FF FF FF FF FF FF	ILI9481, HX8357-B
reg(0x00C0) C0 C0 C0 C0 C0 C0 C0 C0 C0	Panel Control
reg(0x00C8) C8 D8 D8 D8 D8 D8 D8 D8 D8 D8 D8 D8 D8	GAMMA
reg(0x00CC) CC C4	Panel Control
reg(0x00D0) D0 D0 D0	Power Control
reg(0x00D2) D2 D2 D2 D2 DA	NVM Read
reg(0x00D3) D3 D3 D3 DB	ILI9341, ILI9488
reg(0x00D4) D4 D4 C4 C4	Novatek ID
reg(0x00DA) 00 00	RDID1
reg(0x00DB) 00 00	RDID2
reg(0x00DC) 00 00	RDID3
reg(0x00E0) E0 E0 E0 E0 E0 E0 E0 E0 E0 E0 E0 E0 E0 E0 E0 E0	GAMMA-P
reg(0x00E1) E1 E1 E1 E1 E1 E1 E1 E1 E1 E1 E1 E1 E1 E1 E1 E1	GAMMA-N
reg(0x00EF) EF FF FF FF FF FF	ILI9327
reg(0x00F2) F2 FA FA FA FA FA FA FA FA FA FA FA	Adjust Control 2
reg(0x00F6) F6 F6 FE FE	Interface Control

There is the output from the serial monitor and hopefully one of you kind folks can help me get this thing to work.

as you can tell i am very new to the arduino world and hope this wont stop me in my tracks......

Thank in advance,

Geo.

The sale page implies that you get a Uno clone + Red Shield + Blue Shield.

Is this the readreg output for the 2.8 inch Blue Shield ?

Please install MCUFRIEND_kbv via the IDE Library Manager.
Edit the setup() in graphictest_kbv.ino example e.g.

    if (ID == 0xD3D3) ID = 0x9481; // write-only shield
    ID = 0x9329;                             // force ID for ILI9329
    tft.begin(ID);
}

Take notes on paper. Please report back. i.e. white screen, wrong colours, text mirror, scroll directions, readPixel() error, ...

Does the Red Shield work ok ?
Compare the two Shield behaviours.

Please look at the part numbers on the '245A buffer chips.
Does it say HC245 or LVC245 ?

David.

David,

thanks for the speedy and helpful response!

I edited the setup as suggested by removing the // and the screen came to life on uploading.

I am not sure what the display is meant to show but the shaded colour bars show green as purple, red as teal, blue as yellow and the text is mirrored.

With regard to the red shield, this unfortunately arrived broken with a chipped screen and does not even light up. i am trying to sort this with the seller but it appears that they are based in china and just dispached from the uk.

As to the buffer chips they only two chips i can see are SMT245TS.

Thanks again for your help!

Geo.

Try ID = 0x9338 or ID = 0x9302

You can still run LCD_ID_readreg.ino on the Red Shield.

But the good news is that they are dispatched from the UK. So they will probably just replace your chipped screen within 2 or 3 days.

I am intrigued by your Blue screen. I might ask you to do some special tests.

SMT245TS is just a Chinese version of HC245A. But I thought that I could read LVC on the web photo.

David.

Both of these work - i cant discern any difference between the two.

i will do this a bit later if it will help you in any way.

Ask away and i will do what i can - it will also help me learn.

I can only assume what i got was different to the photos in the listing as the chips are the same on the red shield.

Again, thanks David for your help!

Geo.

Indeed i can - Here it is

reg(0x0000) 80 80	ID: ILI9320, ILI9325, ILI9335, ...
reg(0x0004) 00 00 00 00	Manufacturer ID
reg(0x0009) 00 00 61 00 00	Status Register
reg(0x000A) 08 08	Get Power Mode
reg(0x000C) 06 06	Get Pixel Format
reg(0x0061) E1 E1	RDID1 HX8347-G
reg(0x0062) E2 E2	RDID2 HX8347-G
reg(0x0063) E3 E3	RDID3 HX8347-G
reg(0x0064) E4 E4	RDID1 HX8347-A
reg(0x0065) E5 E5	RDID2 HX8347-A
reg(0x0066) E6 E6	RDID3 HX8347-A
reg(0x0067) E7 E7	RDID Himax HX8347-A
reg(0x0070) F0 F0	Panel Himax HX8347-A
reg(0x00A1) A1 A1 A1 A1 A1	RD_DDB SSD1963
reg(0x00B0) B0 B0	RGB Interface Signal Control
reg(0x00B4) B4 B4	Inversion Control
reg(0x00B6) B6 B6 B6 BE BE	Display Control
reg(0x00B7) B7 BF	Entry Mode Set
reg(0x00BF) BF BF BF BF BF BF	ILI9481, HX8357-B
reg(0x00C0) C0 C0 C0 C0 C0 C0 C0 C0 C0	Panel Control
reg(0x00C8) C8 D8 D8 D8 D8 D8 D8 D8 D8 D8 D8 D8 D8	GAMMA
reg(0x00CC) CC CC	Panel Control
reg(0x00D0) D0 D0 C0	Power Control
reg(0x00D2) D2 D2 C2 C2 C2	NVM Read
reg(0x00D3) D3 D3 C3 C3	ILI9341, ILI9488
reg(0x00D4) D4 C4 C4 C4	Novatek ID
reg(0x00DA) 00 00	RDID1
reg(0x00DB) 00 00	RDID2
reg(0x00DC) 00 00	RDID3
reg(0x00E0) E0 E0 E0 E0 E0 E0 E0 E0 E0 E0 E0 E0 E0 E0 E0 E0	GAMMA-P
reg(0x00E1) E1 E1 E1 E1 E1 E1 E1 E1 E1 E1 E1 E1 E1 E1 E1 E1	GAMMA-N
reg(0x00EF) EF FF FF FF FF FF	ILI9327
reg(0x00F2) F2 FA FA FA FA FA FA FA FA FA FA FA	Adjust Control 2
reg(0x00F6) F6 F6 FE FE	Interface Control

Cheers,

Geo.

While the so-called "driver" in the ebay description is a dead link, i found this ecran en ecriture miroir - #3 by yo60

Thanks rainyshadow for the input......

My french is not quite what it used to be and for some reason the links would not work for me until i copy and pasted them.

I was able to download the rar files and after unzipping them they are ino files that i dont think really help me in any way.

So i think i have managed to sort things out to get my project on the right tract......

I uploaded the TouchScreen_Calibr_native example and changed

uint16_t readID(void) {
    uint16_t ID = tft.readID();
    if (ID == 0xD3D3) ID = 0x9486;
    return ID;

To

if (ID == 0xC4C4) ID = 0x9338;

and this allowed me to calibrate the screen and get the settings from the serial monitor

*** COPY-PASTE from Serial Terminal:
const int XP=7,XM=A1,YP=A2,YM=6; //240x320 ID=0x9338
const int TS_LEFT=916,TS_RT=136,TS_TOP=132,TS_BOT=927;

Then i was able to put these settings into my Sketch

#include <TouchScreen.h>
#include <Adafruit_GFX.h>
#include <MCUFRIEND_kbv.h>
#include <max6675.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include "icon.h"

// Pinouts
#define fan        1
#define relay      0
#define buzzer     11

#define thermoCS   10
#define thermoDO   12
#define thermoCLK  13

#define oneWireBus A5

// Variables
int temp = 0;
int temp1 = 0;
unsigned int preHeat = 120;
unsigned int reflow = 180;
unsigned int coolDown = 50;
unsigned int timer = 60;
unsigned int mm = 88;
unsigned int ss = 88;
bool reflowing;
bool cooling;
bool fanState;
int saveTimer;
unsigned long previousMillis = 0;
int x = 165, y = 231, w = 36, h = 36;


MCUFRIEND_kbv tft;

MAX6675 thermocouple(thermoCLK, thermoCS, thermoDO);

OneWire oneWire(oneWireBus);
DallasTemperature sensors(&oneWire);

// require touch screen calibration
// Put your calibrated touchSensor values here
const int XP=7,XM=A1,YP=A2,YM=6; //240x320 ID=0x9338
const int TS_LEFT=916,TS_RT=136,TS_TOP=132,TS_BOT=927;

#define MINPRESSURE 200
#define MAXPRESSURE 1000

TouchScreen ts = TouchScreen(XP, YP, XM, YM, 300);

// buttons
Adafruit_GFX_Button on_btn, off_btn, up1, dwn1, up2, dwn2, up3, dwn3, up4, dwn4, fanBtn;

// get touch input
int pixel_x, pixel_y;
bool Touch_getXY(void)
{
  TSPoint p = ts.getPoint();
  pinMode(YP, OUTPUT);      //restore shared pins
  pinMode(XM, OUTPUT);
  digitalWrite(YP, HIGH);   //because TFT control pins
  digitalWrite(XM, HIGH);
  bool pressed = (p.z > MINPRESSURE && p.z < MAXPRESSURE);
  if (pressed) {
    pixel_x = map(p.x, TS_LEFT, TS_RT, 0, tft.width());
    pixel_y = map(p.y, TS_TOP, TS_BOT, 0, tft.height());
  }
  return pressed;
}

#define BLACK   0x0000
#define WHITE   0xFFFF
#define BLUE    0x001F
#define RED     0xF800
#define GREEN   0x07E0
#define CYAN    0x07FF
#define MAGENTA 0xF81F
#define YELLOW  0xFFE0

void setup(void)
{
  //Serial.begin(9600);   // Turn off serial communication while using serial ports
  pinMode(buzzer, OUTPUT);
  pinMode(relay, OUTPUT);
  pinMode(fan, OUTPUT);
  digitalWrite(buzzer, LOW);
  digitalWrite(relay, LOW);
  digitalWrite(fan, LOW);
  //sensors.begin();
  tft.begin(0x9338);
  tft.setRotation(0);
  tft.fillScreen(BLACK);
  tft.setTextColor(BLACK, YELLOW);
  tft.setTextSize(2);
  tft.setCursor(45, 5);
  tft.print(" REFLOW IRON ");
  tft.fillRect(45, 0, 156, 5, YELLOW);
  tft.fillRect(45, 20, 156, 5, YELLOW);

  tft.setAddrWindow(x, y, x + w - 1, y + h - 1);
  tft.pushColors((const uint8_t*)fan1, w * h, 1, false);
  tft.setAddrWindow(0, 0, tft.width() - 1, tft.height() - 1);
  fanBtn.initButton(&tft,  220, 250, 18, 24, WHITE, BLACK, WHITE, "F", 2);
  fanBtn.drawButton(false);

  // initialise buttons
  up1.initButton(&tft,  195, 108, 20, 20, WHITE, BLACK, WHITE, "+", 2);
  dwn1.initButton(&tft,  220, 108, 20, 20, WHITE, BLACK, WHITE, "-", 2);
  up1.drawButton(false);
  dwn1.drawButton(false);

  up2.initButton(&tft,  195, 143, 20, 20, WHITE, BLACK, WHITE, "+", 2);
  dwn2.initButton(&tft,  220, 143, 20, 20, WHITE, BLACK, WHITE, "-", 2);
  up2.drawButton(false);
  dwn2.drawButton(false);

  up3.initButton(&tft,  195, 178, 20, 20, WHITE, BLACK, WHITE, "+", 2);
  dwn3.initButton(&tft,  220, 178, 20, 20, WHITE, BLACK, WHITE, "-", 2);
  up3.drawButton(false);
  dwn3.drawButton(false);

  up4.initButton(&tft,  195, 213, 20, 20, WHITE, BLACK, WHITE, "+", 2);
  dwn4.initButton(&tft,  220, 213, 20, 20, WHITE, BLACK, WHITE, "-", 2);
  up4.drawButton(false);
  dwn4.drawButton(false);

  on_btn.initButton(&tft,  60, 295, 100, 40, WHITE, 0x068B, WHITE, "START", 2);
  off_btn.initButton(&tft, 180, 295, 100, 40, WHITE, 0xF340, WHITE, "RESET", 2);
  on_btn.drawButton(false);
  off_btn.drawButton(false);
}

void loop(void)
{
  if (millis() - previousMillis >= 1000) {
    previousMillis = millis();

    temp = thermocouple.readCelsius();      // get temperature from thermocouple
    //sensors.requestTemperatures();
    //temp1 = sensors.getTempCByIndex(0);   // get ambient temperature

    if (reflowing) {
      // pre heating stage
      if (temp < preHeat)
        tft.drawRect(0, 90, 240, 35, RED);

      // reflow stage
      if (temp > preHeat) {
        tft.drawRect(0, 90, 240, 35, BLACK);
        tft.drawRect(0, 125, 240, 35, GREEN);

        // turn off the heating element if temp exceeds set reflow temp
        if (temp > reflow) {
          digitalWrite(relay, LOW);
        }
        // turn it back on otherwise
        if (temp < reflow) {
          digitalWrite(relay, HIGH);
        }
        // countdown timer
        timer--;
        // timer finished
        if (timer == 0) {
          reflowing = false;        // turn off reflow
          cooling = true;           // turn on cooling
          digitalWrite(relay, LOW); // turn off relay
          digitalWrite(buzzer, HIGH); // turn off buzzer
          delay(500);
          digitalWrite(buzzer, LOW); // turn off buzzer
          tft.drawRect(0, 125, 240, 35, BLACK);
        }
        mm = timer / 60;
        ss = timer % 60;
        tft.fillRect(130, 203, 50, 20, BLACK);
        tft.fillRect(30, 233, 120, 40, BLACK);
      }
    }
    tft.fillRoundRect(115, 40, 115, 41, 15, RED);
  }

  if (cooling) {
    tft.setAddrWindow(x, y, x + w - 1, y + h - 1);
    tft.pushColors((const uint8_t*)fan1, w * h, 1, false);
    tft.setAddrWindow(0, 0, tft.width() - 1, tft.height() - 1);
    delay(50);
    tft.setAddrWindow(x, y, x + w - 1, y + h - 1);
    tft.pushColors((const uint8_t*)fan2, w * h, 1, false);
    tft.setAddrWindow(0, 0, tft.width() - 1, tft.height() - 1);
    delay(50);
    if (temp > coolDown) {
      digitalWrite(fan, HIGH);
      tft.drawRect(0, 160, 240, 35, BLUE);
    }
    if (temp < coolDown) {
      cooling = false;
      timer = saveTimer;
      digitalWrite(fan, LOW);
      tft.drawRect(0, 160, 240, 35, BLACK);
      tft.fillRect(130, 203, 50, 20, BLACK);
    }
  }

  bool down = Touch_getXY();

  // Start | Reset
  on_btn.press(down && on_btn.contains(pixel_x, pixel_y));
  off_btn.press(down && off_btn.contains(pixel_x, pixel_y));

  if (on_btn.justPressed())  on_btn.drawButton(true);
  if (off_btn.justPressed()) off_btn.drawButton(true);
  if (on_btn.justReleased()) {
    on_btn.drawButton();
    if (timer > 30) {
      saveTimer = timer;
      reflowing = true;
      mm = timer / 60;
      ss = timer % 60;
      tft.fillRect(130, 203, 50, 20, BLACK);
      tft.fillRect(30, 233, 120, 40, BLACK);
      digitalWrite(relay, HIGH);
    }
  }
  if (off_btn.justReleased()) {
    off_btn.drawButton();
    asm volatile ("jmp 0");   // reset
  }
  // PreHeat
  up1.press(down && up1.contains(pixel_x, pixel_y));
  dwn1.press(down && dwn1.contains(pixel_x, pixel_y));

  if (up1.justPressed())  up1.drawButton(true);
  if (dwn1.justPressed()) dwn1.drawButton(true);
  if (up1.justReleased()) {
    up1.drawButton();
    tft.fillRect(130, 98, 50, 20, BLACK);
    preHeat++;
  }
  if (dwn1.justReleased()) {
    dwn1.drawButton();
    tft.fillRect(130, 98, 50, 20, BLACK);
    preHeat--;
  }
  // Reflow
  up2.press(down && up2.contains(pixel_x, pixel_y));
  dwn2.press(down && dwn2.contains(pixel_x, pixel_y));

  if (up2.justPressed())  up2.drawButton(true);
  if (dwn2.justPressed()) dwn2.drawButton(true);
  if (up2.justReleased()) {
    up2.drawButton();
    tft.fillRect(130, 133, 50, 20, BLACK);
    reflow++;
  }
  if (dwn2.justReleased()) {
    dwn2.drawButton();
    tft.fillRect(130, 133, 50, 20, BLACK);
    reflow--;
  }
  // cooldown
  up3.press(down && up3.contains(pixel_x, pixel_y));
  dwn3.press(down && dwn3.contains(pixel_x, pixel_y));

  if (up3.justPressed())  up3.drawButton(true);
  if (dwn3.justPressed()) dwn3.drawButton(true);
  if (up3.justReleased()) {
    up3.drawButton();
    tft.fillRect(130, 168, 50, 20, BLACK);
    coolDown++;
  }
  if (dwn3.justReleased()) {
    dwn3.drawButton();
    tft.fillRect(130, 168, 50, 20, BLACK);
    coolDown--;
  }
  // set timer
  up4.press(down && up4.contains(pixel_x, pixel_y));
  dwn4.press(down && dwn4.contains(pixel_x, pixel_y));

  if (up4.justPressed())  up4.drawButton(true);
  if (dwn4.justPressed()) dwn4.drawButton(true);
  if (up4.justReleased()) {
    up4.drawButton();
    tft.fillRect(130, 203, 50, 20, BLACK);
    timer += 5;
  }
  if (dwn4.justReleased()) {
    dwn4.drawButton();
    tft.fillRect(130, 203, 50, 20, BLACK);
    timer -= 5;
  }
  // fan
  fanBtn.press(down && fanBtn.contains(pixel_x, pixel_y));

  if (fanBtn.justPressed())  fanBtn.drawButton(true);
  if (fanBtn.justReleased()) {
    fanBtn.drawButton();
    fanState = !fanState;
  }

  if (fanState) {
    digitalWrite(fan, HIGH);
    tft.setAddrWindow(x, y, x + w - 1, y + h - 1);
    tft.pushColors((const uint8_t*)fan1, w * h, 1, false);
    tft.setAddrWindow(0, 0, tft.width() - 1, tft.height() - 1);
    delay(50);
    tft.setAddrWindow(x, y, x + w - 1, y + h - 1);
    tft.pushColors((const uint8_t*)fan2, w * h, 1, false);
    tft.setAddrWindow(0, 0, tft.width() - 1, tft.height() - 1);
    delay(50);
  }
  else {
    digitalWrite(fan, LOW);
  }

  tft.setTextSize(3);
  tft.setTextColor(RED);
  tft.setCursor(5, 50);
  tft.print("Temp : ");
  tft.setTextColor(WHITE);
  tft.print(temp);
  tft.print((char)247);
  tft.print("C");
  tft.setTextSize(2);
  tft.setTextColor(WHITE);
  tft.setCursor(10, 100);
  tft.print("Pre Heat : ");
  tft.print(preHeat);
  tft.setTextColor(WHITE);
  tft.setCursor(10, 135);
  tft.print("Reflow   : ");
  tft.print(reflow);
  tft.setTextColor(WHITE);
  tft.setCursor(10, 170);
  tft.print("Cooldown : ");
  tft.print(coolDown);
  tft.setTextColor(WHITE);
  tft.setCursor(10, 205);
  tft.print("Timer(s) : ");
  tft.print(timer);

  tft.setTextSize(4);
  tft.setTextColor(WHITE);
  tft.setCursor(30, 235);
  tft.print(mm);
  tft.print(":");
  if (ss < 10) tft.print(0);
  tft.print(ss);
  tft.setTextSize(2);
}

And hey presto........my screen and buttons all work as anticipated!

Now i just need to add my circuit and see if my reflow hotplate works.

But can i ask? Is there a way of me now permanently storing the Hex code ID= 0x9338 somewhere in MCUFRIEND so that i dont have to remember it?

Thanks again for the assistance,

Geo.

First off. Please compare 0x9338 with 0x9302 in graphictest_kbv.ino
Take notes on paper.

Both should do VERTICAL SCROLL
Only one will do SOFTWARE SCROLL
The other will say readPixel() error

What ID is reported on Serial Terminal ?
What ID is reported on Adafruit Tests Page ?

Both of your controllers have unusual readreg reports.
There is no obvious ID.

When we have chosen the "better" guess for ID, you can run LCD_ID_readreg on the Blue Shield with this edit.

void setup()
{
    Serial.begin(9600);
    while (!Serial) ;
    Serial.println("Read Registers on MCUFRIEND UNO shield");
    Serial.println("controllers either read as single 16-bit");
    Serial.println("e.g. the ID is at readReg(0)");
    Serial.println("or as a sequence of 8-bit values");
    Serial.println("in special locations (first is dummy)");
    Serial.println("");
    lcdInit();
    lcdReset();      //ensures that controller is in default state
    for (uint16_t i = 0; i < 256; i++) readReg(i, 7, "f.k");  // UNCOMMENT THIS LINE

Copy-Paste the Serial Terminal. I suspect that it just reports garbage. But I might spot some active registers.

David.

Again you are completely correct!

0x9338 works and 0x9302 software scroll says

readPixel() error should be 24-bit

Serial took 0ms to start
ID = 0xC4C4
TFT size is 240x320
Unknown LCD driver chip: C0C0

reg(0x0000) C0 C0 C0 C0 C0 C4 C4	f.k
reg(0x0001) C1 C1 C1 C5 C5 C1 C5	f.k
reg(0x0002) C2 C2 C2 C2 C6 C2 C6	f.k
reg(0x0003) C3 C3 C3 C3 C7 C7 C7	f.k
reg(0x0004) 00 00 00 00 00 00 00	f.k
reg(0x0005) C5 C1 C1 C1 C5 C1 C5	f.k
reg(0x0006) C6 C2 C2 C2 C6 C6 C6	f.k
reg(0x0007) C7 C7 C3 C3 C7 C7 C7	f.k
reg(0x0008) C8 D8 D8 D8 DC DC DC	f.k
reg(0x0009) 00 00 61 00 00 00 00	f.k
reg(0x000A) 00 08 00 00 00 00 00	f.k
reg(0x000B) 00 00 00 00 00 00 00	f.k
reg(0x000C) 00 06 00 00 00 00 00	f.k
reg(0x000D) 00 00 00 00 00 00 00	f.k
reg(0x000E) 00 00 00 00 00 00 00	f.k
reg(0x000F) 00 00 00 00 00 00 00	f.k
reg(0x0010) D0 D8 D8 D8 DC DC DC	f.k
reg(0x0011) D1 D9 D9 D9 DD DD DD	f.k
reg(0x0012) D2 DA DA DA DE DE DE	f.k
reg(0x0013) D3 DB DB DB DF DB DF	f.k
reg(0x0014) D4 C0 C0 C0 C4 C4 C4	f.k
reg(0x0015) D5 C1 C1 C1 C5 C5 C5	f.k
reg(0x0016) D6 C6 C2 C2 C6 C2 C6	f.k
reg(0x0017) D7 C7 C3 C3 C7 C3 C7	f.k
reg(0x0018) D8 D8 D8 D8 DC D8 DC	f.k
reg(0x0019) D9 D9 D9 D9 DD D9 DD	f.k
reg(0x001A) DA DA DA DA DE DA DE	f.k
reg(0x001B) DB DB DB DB DF DB DF	f.k
reg(0x001C) DC D8 D8 D8 DC D8 DC	f.k
reg(0x001D) DD D9 D9 D9 DD D9 DD	f.k
reg(0x001E) DE DA DA DA DE DA DE	f.k
reg(0x001F) DF DB DB DB DF DB DF	f.k
reg(0x0020) E0 E0 E0 E0 E4 E0 E4	f.k
reg(0x0021) E1 E1 E1 E1 E5 E1 E5	f.k
reg(0x0022) E2 E2 E2 E2 E6 E2 E6	f.k
reg(0x0023) E3 E3 E3 E3 E7 E3 E7	f.k
reg(0x0024) E4 E4 E0 E0 E4 E0 E4	f.k
reg(0x0025) E5 E5 E1 E1 E5 E1 E5	f.k
reg(0x0026) E6 E6 E2 E2 E6 E2 E6	f.k
reg(0x0027) E7 E7 E3 E3 E7 E3 E7	f.k
reg(0x0028) E8 F8 F8 F8 FC F8 FC	f.k
reg(0x0029) E9 F9 F9 F9 FD F9 FD	f.k
reg(0x002A) EA FA FA FA FE FA FE	f.k
reg(0x002B) EB FB FB FB FF FB FF	f.k
reg(0x002C) EC E4 E0 E0 E4 E0 E4	f.k
reg(0x002D) ED E5 E1 E1 E5 E5 E5	f.k
reg(0x002E) 00 FC FC 00 FC FC FC	f.k
reg(0x002F) EF E3 E3 E3 E7 E7 E7	f.k
reg(0x0030) F0 F8 F8 F8 FC F8 FC	f.k
reg(0x0031) F1 F9 F9 F9 FD FD FD	f.k
reg(0x0032) F2 FA FA FA FE FE FE	f.k
reg(0x0033) F3 FB FB FB FF FF FF	f.k
reg(0x0034) F4 F4 E0 E0 E4 E4 E4	f.k
reg(0x0035) F5 F5 E1 E1 E5 E5 E5	f.k
reg(0x0036) F6 F6 E2 E2 E6 E6 E6	f.k
reg(0x0037) F7 E7 E3 E3 E7 E3 E7	f.k
reg(0x0038) F8 F8 F8 F8 FC FC FC	f.k
reg(0x0039) F9 F9 F9 F9 FD FD FD	f.k
reg(0x003A) FA FA FA FA FE FE FE	f.k
reg(0x003B) FB FB FB FB FF FF FF	f.k
reg(0x003C) FC FC F8 F8 FC FC FC	f.k
reg(0x003D) FD FD F9 F9 FD FD FD	f.k
reg(0x003E) FE FE FA FA FE FA FE	f.k
reg(0x003F) FF FF FB FB FF FF FF	f.k
reg(0x0040) C0 C0 C0 C0 C4 C4 C4	f.k
reg(0x0041) C1 C1 C1 C1 C5 C1 C5	f.k
reg(0x0042) C2 C2 C2 C2 C6 C2 C6	f.k
reg(0x0043) C3 C3 C3 C3 C7 C3 C7	f.k
reg(0x0044) C4 C4 C0 C0 C4 C0 C4	f.k
reg(0x0045) 00 01 FF 00 00 00 00	f.k
reg(0x0046) C6 C6 C2 C2 C6 C2 C6	f.k
reg(0x0047) C7 C3 C3 C3 C7 C3 C7	f.k
reg(0x0048) C8 D8 D8 D8 DC D8 DC	f.k
reg(0x0049) C9 D9 D9 D9 DD D9 DD	f.k
reg(0x004A) CA DA DA DA DE DA DE	f.k
reg(0x004B) CB DB DB DB DF DB DF	f.k
reg(0x004C) CC C0 C0 C0 C4 C0 C4	f.k
reg(0x004D) CD C1 C1 C1 C5 C1 C5	f.k
reg(0x004E) CE C6 C2 C2 C6 C2 C6	f.k
reg(0x004F) CF C3 C3 C3 C7 C3 C7	f.k
reg(0x0050) D0 D8 D8 D8 DC D8 DC	f.k
reg(0x0051) D1 D9 D9 D9 DD D9 DD	f.k
reg(0x0052) 00 00 00 00 00 00 00	f.k
reg(0x0053) D3 DB DB DB DF DB DF	f.k
reg(0x0054) 00 00 00 00 00 00 00	f.k
reg(0x0055) D5 C1 C1 C1 C5 C1 C5	f.k
reg(0x0056) 00 00 00 00 00 00 00	f.k
reg(0x0057) D7 C7 C3 C3 C7 C3 C7	f.k
reg(0x0058) D8 D8 D8 D8 DC DC DC	f.k
reg(0x0059) D9 D9 D9 D9 DD DD DD	f.k
reg(0x005A) DA DA DA DA DE DE DE	f.k
reg(0x005B) DB DB DB DB DF DF DF	f.k
reg(0x005C) DC D8 D8 D8 DC D8 DC	f.k
reg(0x005D) DD D9 D9 D9 DD DD DD	f.k
reg(0x005E) DE DA DA DA DE DE DE	f.k
reg(0x005F) 00 00 00 00 00 00 00	f.k
reg(0x0060) E0 E0 E0 E0 E4 E4 E4	f.k
reg(0x0061) E1 E1 E1 E1 E5 E5 E5	f.k
reg(0x0062) E2 E2 E2 E2 E6 E6 E6	f.k
reg(0x0063) E3 E3 E3 E3 E7 E7 E7	f.k
reg(0x0064) E4 E4 E0 E0 E4 E4 E4	f.k
reg(0x0065) E5 E5 E1 E1 E5 E1 E5	f.k
reg(0x0066) E6 E6 E2 E2 E6 E6 E6	f.k
reg(0x0067) E7 E7 E3 E3 E7 E7 E7	f.k
reg(0x0068) 00 00 00 00 00 00 00	f.k
reg(0x0069) E9 F9 F9 F9 FD FD FD	f.k
reg(0x006A) EA FA FA FA FE FA FE	f.k
reg(0x006B) EB FB FB FB FF FF FF	f.k
reg(0x006C) EC FC F8 F8 FC F8 FC	f.k
reg(0x006D) ED FD F9 F9 FD F9 FD	f.k
reg(0x006E) EE FE FA FA FE FA FE	f.k
reg(0x006F) EF FF FB FB FF FB FF	f.k
reg(0x0070) F0 F8 F8 F8 FC F8 FC	f.k
reg(0x0071) F1 F9 F9 F9 FD F9 FD	f.k
reg(0x0072) F2 FA FA FA FE FA FE	f.k
reg(0x0073) F3 FB FB FB FF FB FF	f.k
reg(0x0074) F4 F4 F8 F8 FC F8 FC	f.k
reg(0x0075) F5 F5 F9 F9 FD F9 FD	f.k
reg(0x0076) F6 F6 FA FA FE FA FE	f.k
reg(0x0077) F7 F7 FB FB FF FB FF	f.k
reg(0x0078) F8 F8 F8 F8 FC F8 FC	f.k
reg(0x0079) F9 F9 F9 F9 FD F9 FD	f.k
reg(0x007A) FA FA FA FA FE FA FE	f.k
reg(0x007B) FB FB FB FB FF FB FF	f.k
reg(0x007C) FC FC F8 F8 FC F8 FC	f.k
reg(0x007D) FD FD F9 F9 FD F9 FD	f.k
reg(0x007E) FE FE FA FA FE FA FE	f.k
reg(0x007F) FF FF FB FB FF FF FF	f.k
reg(0x0080) C0 C0 C0 C0 C4 C0 C4	f.k
reg(0x0081) C1 C1 C1 C1 C5 C5 C5	f.k
reg(0x0082) C2 C2 C2 C2 C6 C2 C6	f.k
reg(0x0083) C3 C3 C3 C3 C7 C3 C7	f.k
reg(0x0084) C4 C4 C0 C0 C4 C4 C4	f.k
reg(0x0085) C5 C5 C1 C1 C5 C5 C5	f.k
reg(0x0086) C6 C2 C2 C2 C6 C6 C6	f.k
reg(0x0087) C7 C7 C3 C3 C7 C7 C7	f.k
reg(0x0088) C8 D8 D8 D8 DC DC DC	f.k
reg(0x0089) C9 D9 D9 D9 DD DD DD	f.k
reg(0x008A) CA DA DA DA DE DE DE	f.k
reg(0x008B) CB DB DB DB DF DF DF	f.k
reg(0x008C) CC C0 C0 C0 C4 C4 C4	f.k
reg(0x008D) CD C1 C1 C1 C5 C5 C5	f.k
reg(0x008E) CE C2 C2 C2 C6 C6 C6	f.k
reg(0x008F) CF C7 C3 C3 C7 C7 C7	f.k
reg(0x0090) D0 D8 D8 D8 DC DC DC	f.k
reg(0x0091) D1 D9 D9 D9 DD DD DD	f.k
reg(0x0092) D2 DA DA DA DE DA DE	f.k
reg(0x0093) D3 DB DB DB DF DB DF	f.k
reg(0x0094) D4 C0 C0 C0 C4 C0 C4	f.k
reg(0x0095) D5 C1 C1 C1 C5 C1 C5	f.k
reg(0x0096) D6 C6 C2 C2 C6 C2 C6	f.k
reg(0x0097) D7 C7 C3 C3 C7 C3 C7	f.k
reg(0x0098) D8 D8 D8 D8 DC D8 DC	f.k
reg(0x0099) D9 D9 D9 D9 DD D9 DD	f.k
reg(0x009A) DA DA DA DA DE DA DE	f.k
reg(0x009B) DB DB DB DB DF DB DF	f.k
reg(0x009C) DC D8 D8 D8 DC D8 DC	f.k
reg(0x009D) DD D9 D9 D9 DD D9 DD	f.k
reg(0x009E) DE DA DA DA DE DA DE	f.k
reg(0x009F) DF DB DB DB DF DB DF	f.k
reg(0x00A0) E0 E0 E0 E0 E4 E0 E4	f.k
reg(0x00A1) E1 E1 E1 E1 E5 E1 E5	f.k
reg(0x00A2) E2 E2 E2 E2 E6 E2 E6	f.k
reg(0x00A3) E3 E3 E3 E3 E7 E3 E7	f.k
reg(0x00A4) E4 E4 E0 E0 E4 E0 E4	f.k
reg(0x00A5) E5 E5 E1 E1 E5 E1 E5	f.k
reg(0x00A6) E6 E6 E2 E2 E6 E2 E6	f.k
reg(0x00A7) E7 E7 E3 E3 E7 E7 E7	f.k
reg(0x00A8) E8 F8 F8 F8 FC F8 FC	f.k
reg(0x00A9) E9 F9 F9 F9 FD FD FD	f.k
reg(0x00AA) EA FA FA FA FE FE FE	f.k
reg(0x00AB) EB FB FB FB FF FF FF	f.k
reg(0x00AC) EC E0 E0 E0 E4 E4 E4	f.k
reg(0x00AD) ED E5 E1 E1 E5 E5 E5	f.k
reg(0x00AE) EE E6 E2 E2 E6 E6 E6	f.k
reg(0x00AF) EF E7 E3 E3 E7 E7 E7	f.k
reg(0x00B0) F0 F8 F8 F8 FC FC FC	f.k
reg(0x00B1) F1 F9 F9 F9 FD FD FD	f.k
reg(0x00B2) F2 FA FA FA FE FA FE	f.k
reg(0x00B3) F3 FB FB FB FF FF FF	f.k
reg(0x00B4) F4 F4 E0 E0 E4 E4 E4	f.k
reg(0x00B5) F5 F5 E1 E1 E5 E5 E5	f.k
reg(0x00B6) F6 F6 E2 E2 E6 E6 E6	f.k
reg(0x00B7) F7 F7 E3 E3 E7 E3 E7	f.k
reg(0x00B8) F8 F8 F8 F8 FC FC FC	f.k
reg(0x00B9) F9 F9 F9 F9 FD FD FD	f.k
reg(0x00BA) FA FA FA FA FE FA FE	f.k
reg(0x00BB) FB FB FB FB FF FB FF	f.k
reg(0x00BC) FC FC F8 F8 FC F8 FC	f.k
reg(0x00BD) FD FD F9 F9 FD FD FD	f.k
reg(0x00BE) FE FE FA FA FE FA FE	f.k
reg(0x00BF) FF FF FB FB FF FB FF	f.k
reg(0x00C0) C0 C0 C0 C0 C4 C0 C4	f.k
reg(0x00C1) C1 C1 C1 C1 C5 C1 C5	f.k
reg(0x00C2) C2 C2 C2 C2 C6 C2 C6	f.k
reg(0x00C3) C3 C3 C3 C3 C7 C3 C7	f.k
reg(0x00C4) C4 C4 C0 C0 C4 C0 C4	f.k
reg(0x00C5) C5 C5 C1 C1 C5 C1 C5	f.k
reg(0x00C6) C6 C6 C2 C2 C6 C2 C6	f.k
reg(0x00C7) C7 C7 C3 C3 C7 C3 C7	f.k
reg(0x00C8) C8 D8 D8 D8 DC D8 DC	f.k
reg(0x00C9) C9 D9 D9 D9 DD D9 DD	f.k
reg(0x00CA) CA DA DA DA DE DA DE	f.k
reg(0x00CB) CB DB DB DB DF DB DF	f.k
reg(0x00CC) CC C0 C0 C0 C4 C0 C4	f.k
reg(0x00CD) CD C1 C1 C1 C5 C1 C5	f.k
reg(0x00CE) CE C6 C2 C2 C6 C2 C6	f.k
reg(0x00CF) CF C7 C3 C3 C7 C3 C7	f.k
reg(0x00D0) D0 D8 D8 D8 DC D8 DC	f.k
reg(0x00D1) D1 D9 D9 D9 DD DD DD	f.k
reg(0x00D2) D2 DA DA DA DE DE DE	f.k
reg(0x00D3) D3 D3 DB DB DF DF DF	f.k
reg(0x00D4) D4 C0 C0 C0 C4 C0 C4	f.k
reg(0x00D5) D5 C1 C1 C1 C5 C5 C5	f.k
reg(0x00D6) D6 C6 C2 C2 C6 C6 C6	f.k
reg(0x00D7) D7 C7 C3 C3 C7 C7 C7	f.k
reg(0x00D8) D8 D8 D8 D8 DC D8 DC	f.k
reg(0x00D9) D9 D9 D9 D9 DD DD DD	f.k
reg(0x00DA) 00 00 00 00 00 00 00	f.k
reg(0x00DB) 00 00 00 00 00 00 00	f.k
reg(0x00DC) 00 00 00 00 00 00 00	f.k
reg(0x00DD) DD D9 D9 D9 DD DD DD	f.k
reg(0x00DE) DE DA DA DA DE DE DE	f.k
reg(0x00DF) DF DB DB DB DF DF DF	f.k
reg(0x00E0) E0 E0 E0 E0 E4 E4 E4	f.k
reg(0x00E1) E1 E1 E1 E1 E5 E5 E5	f.k
reg(0x00E2) E2 E2 E2 E2 E6 E6 E6	f.k
reg(0x00E3) E3 E3 E3 E3 E7 E7 E7	f.k
reg(0x00E4) E4 E4 E0 E0 E4 E0 E4	f.k
reg(0x00E5) E5 E5 E1 E1 E5 E1 E5	f.k
reg(0x00E6) E6 E6 E2 E2 E6 E2 E6	f.k
reg(0x00E7) E7 E7 E3 E3 E7 E3 E7	f.k
reg(0x00E8) E8 F8 F8 F8 FC F8 FC	f.k
reg(0x00E9) E9 F9 F9 F9 FD F9 FD	f.k
reg(0x00EA) EA FA FA FA FE FA FE	f.k
reg(0x00EB) EB FB FB FB FF FB FF	f.k
reg(0x00EC) EC FC F8 F8 FC F8 FC	f.k
reg(0x00ED) ED FD F9 F9 FD F9 FD	f.k
reg(0x00EE) EE FE FA FA FE FA FE	f.k
reg(0x00EF) EF FF FB FB FF FB FF	f.k
reg(0x00F0) F0 F8 F8 F8 FC F8 FC	f.k
reg(0x00F1) F1 F9 F9 F9 FD F9 FD	f.k
reg(0x00F2) F2 FA FA FA FE FA FE	f.k
reg(0x00F3) F3 FB FB FB FF FB FF	f.k
reg(0x00F4) F4 F4 F8 F8 FC F8 FC	f.k
reg(0x00F5) F5 F5 F9 F9 FD F9 FD	f.k
reg(0x00F6) F6 F6 FA FA FE FA FE	f.k
reg(0x00F7) F7 F7 FB FB FF FB FF	f.k
reg(0x00F8) F8 F8 F8 F8 FC F8 FC	f.k
reg(0x00F9) F9 F9 F9 F9 FD F9 FD	f.k
reg(0x00FA) FA FA FA FA FE FA FE	f.k
reg(0x00FB) FB FB FB FB FF FF FF	f.k
reg(0x00FC) FC FC F8 F8 FC F8 FC	f.k
reg(0x00FD) FD FD F9 F9 FD FD FD	f.k
reg(0x00FE) FE FE FA FA FE FE FE	f.k
reg(0x00FF) FF FF FB FB FF FF FF	f.k
reg(0x0000) C0 C0	ID: ILI9320, ILI9325, ILI9335, ...
reg(0x0004) 00 00 00 00	Manufacturer ID
reg(0x0009) 00 00 61 00 00	Status Register
reg(0x000A) 00 08	Get Power Mode
reg(0x000C) 00 06	Get Pixel Format
reg(0x0061) E1 E1	RDID1 HX8347-G
reg(0x0062) E2 E2	RDID2 HX8347-G
reg(0x0063) E3 E3	RDID3 HX8347-G
reg(0x0064) E4 E4	RDID1 HX8347-A
reg(0x0065) E5 E5	RDID2 HX8347-A
reg(0x0066) E6 E6	RDID3 HX8347-A
reg(0x0067) E7 E7	RDID Himax HX8347-A
reg(0x0070) F0 F8	Panel Himax HX8347-A
reg(0x00A1) E1 E5 E5 E5 E1	RD_DDB SSD1963
reg(0x00B0) F0 F8	RGB Interface Signal Control
reg(0x00B4) F4 F4	Inversion Control
reg(0x00B6) F6 F6 FE FA FE	Display Control
reg(0x00B7) F7 FF	Entry Mode Set
reg(0x00BF) FF FB FF FF FB FF	ILI9481, HX8357-B
reg(0x00C0) C0 C4 C4 C0 C0 C0 C0 C0 C0	Panel Control
reg(0x00C8) C8 DC DC D8 D8 D8 D8 D8 D8 D8 D8 D8 D8	GAMMA
reg(0x00CC) CC C4	Panel Control
reg(0x00D0) D0 D8 D8	Power Control
reg(0x00D2) D2 DA DE DA DE	NVM Read
reg(0x00D3) D3 C3 C7 C3	ILI9341, ILI9488
reg(0x00D4) D4 C4 C0 C4	Novatek ID
reg(0x00DA) 00 00	RDID1
reg(0x00DB) 00 00	RDID2
reg(0x00DC) 00 00	RDID3
reg(0x00E0) E0 E0 E4 E0 E0 E0 E0 E0 E0 E0 E4 E0 E0 E0 E0 E0	GAMMA-P
reg(0x00E1) E1 E1 E1 E1 E1 E1 E1 E1 E1 E1 E1 E1 E1 E1 E1 E1	GAMMA-N
reg(0x00EF) EF E3 E3 E3 E3 E3	ILI9327
reg(0x00F2) F2 FA FA FE FE FA FE FE FA FA FA FA	Adjust Control 2
reg(0x00F6) F6 F2 FA FA	Interface Control

Cheers,

Geo.

I don't recognise any ID locations. And tft.readID() appears to return sometimes 0xC0C0 and sometimes 0xC4C4 i.e. reg(0x0000)

You can hack MCUFRIEND_kbv.cpp by just adding 0xC0C0 and 0xC4C4

    case 0xC0C0:  // these will not be reliable
    case 0xC4C4:  //
    case 0x9338:
        _lcd_capable = AUTO_READINC | MIPI_DCS_REV1 | MV_AXIS | READ_24BITS;
		goto common_9329;

How are you getting on with your Ebay supplier ?

The sale page implies that Red Shield is ILI9340 and Blue Shield is RM68090. The readreg reports do not agree with either.

If you have a good dialog with the Ebay supplier, you could ask them for the controller part number.
The "Ebay shop" probably will not know the part number but they just have to ask their wholesaler. i.e. one email or phone call.

Then I can support this controller properly. Which would be good for their customers. (I am the author of MCUFRIEND_kbv )

However the important thing is for you to get a non-broken replacement Red Shield. And the shop to pack items safely in foam / bubblewrap.

David.

David, thanks!

I have received a full refund as they did not want to send postage for return.

I will ask them for the information you asked and see if they will respond.

Cheers,

Geo.

Full refund is the typical Ebay response. At least you now have a working Uno and working Blue Shield for free !!

You would be much happier with a replacement Red Shield.

Their other customers would be happier with a library that works out of the box.

It is much easier for a shop to ask their wholesaler for information
Than to refund customers.

David.

Yeah they were very quick to refund and were not interested in just replacing the red shield. I think they only supply these as complete sets.

I have asked them for the controller information and stated that you may be able to offer support for the shields so that they can minimise the issues other customers may face.

I will let you know if they get back to me.

David, thanks for your help with this!

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