Nano on 1.44" 128x128 RGB TFT 7735S chip....Troubleshooting

Hi Guys,

i received my brandnew 1.44" 128x128 RGB TFTs today, equipped with an 7735S chipset. Im using an Arduino Nano, and the standard Adafruit GFX and ST7735 library, and have followed these instructions:

According Instructions i connected:

GND to GND
VCC first to 3.3, then 5V
SCL to PIN D13
SDA to PIN D11
RES to PIN D9
DC first not at all, now to 3.3V
CS to PIN D10

(See Attachments)

I checked that the Pins are set accordingly in the standard ADAFRUIT examples, booted up, downloaded and…BAM nothing, white screen. None of the example work, so i am obviously having a connection or library problem…
I have checked the connections multiple times, coming to the conclusion i did OK…

I have also tried the greentab and blacktab options with the commenting out, but got the same ressults…

Here the standard adafruit example code

/**************************************************************************
  This is a library for several Adafruit displays based on ST77* drivers.

  Works with the Adafruit 1.8" TFT Breakout w/SD card
    ----> http://www.adafruit.com/products/358
  The 1.8" TFT shield
    ----> https://www.adafruit.com/product/802
  The 1.44" TFT breakout
    ----> https://www.adafruit.com/product/2088
  The 1.14" TFT breakout
  ----> https://www.adafruit.com/product/4383
  The 1.3" TFT breakout
  ----> https://www.adafruit.com/product/4313
  The 1.54" TFT breakout
    ----> https://www.adafruit.com/product/3787
  The 2.0" TFT breakout
    ----> https://www.adafruit.com/product/4311
  as well as Adafruit raw 1.8" TFT display
    ----> http://www.adafruit.com/products/618

  Check out the links above for our tutorials and wiring diagrams.
  These displays use SPI to communicate, 4 or 5 pins are required to
  interface (RST is optional).

  Adafruit invests time and resources providing this open source code,
  please support Adafruit and open-source hardware by purchasing
  products from Adafruit!

  Written by Limor Fried/Ladyada for Adafruit Industries.
  MIT license, all text above must be included in any redistribution
 **************************************************************************/

#include <Adafruit_GFX.h>    // Core graphics library
#include <Adafruit_ST7735.h> // Hardware-specific library for ST7735
#include <Adafruit_ST7789.h> // Hardware-specific library for ST7789
#include <SPI.h>

//#if defined(ARDUINO_FEATHER_ESP32) // Feather Huzzah32
//  #define TFT_CS         14
//  #define TFT_RST        15
//  #define TFT_DC         32

//#elif defined(ESP8266)
//  #define TFT_CS         4
//  #define TFT_RST        16                                            
//  #define TFT_DC         5

//#else
  // For the breakout board, you can use any 2 or 3 pins.
  // These pins will also work for the 1.8" TFT shield.
  #define TFT_CS        10
  #define TFT_RST        9 // Or set to -1 and connect to Arduino RESET pin
  #define TFT_DC         8
//#endif

// OPTION 1 (recommended) is to use the HARDWARE SPI pins, which are unique
// to each board and not reassignable. For Arduino Uno: MOSI = pin 11 and
// SCLK = pin 13. This is the fastest mode of operation and is required if
// using the breakout board's microSD card.

// For 1.44" and 1.8" TFT with ST7735 use:
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);

// For 1.14", 1.3", 1.54", and 2.0" TFT with ST7789:
//Adafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_RST);


// OPTION 2 lets you interface the display using ANY TWO or THREE PINS,
// tradeoff being that performance is not as fast as hardware SPI above.
//#define TFT_MOSI 11  // Data out
//#define TFT_SCLK 13  // Clock out

// For ST7735-based displays, we will use this call
//Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_MOSI, TFT_SCLK, TFT_RST);

// OR for the ST7789-based displays, we will use this call
//Adafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_MOSI, TFT_SCLK, TFT_RST);


float p = 3.1415926;

void setup(void) {
  Serial.begin(9600);
  Serial.print(F("Hello! ST77xx TFT Test"));

  // Use this initializer if using a 1.8" TFT screen:
 // tft.initR(INITR_BLACKTAB);      // Init ST7735S chip, black tab

  // OR use this initializer (uncomment) if using a 1.44" TFT:
  tft.initR(INITR_144GREENTAB); // Init ST7735R chip, green tab

  // OR use this initializer (uncomment) if using a 0.96" 160x80 TFT:
  //tft.initR(INITR_MINI160x80);  // Init ST7735S mini display

  // OR use this initializer (uncomment) if using a 1.3" or 1.54" 240x240 TFT:
  //tft.init(240, 240);           // Init ST7789 240x240

  // OR use this initializer (uncomment) if using a 2.0" 320x240 TFT:
  //tft.init(240, 320);           // Init ST7789 320x240

  // OR use this initializer (uncomment) if using a 1.14" 240x135 TFT:
  //tft.init(135, 240);           // Init ST7789 240x135

  Serial.println(F("Initialized"));

Im not sure but this might be the answer:

Im shooting 5V at the 3.3V board.....will try resistors...i hope i still have some in correct values

Please post a link to the actual display that you have bought. I need to see a photo of the pcb side.

All TFT controller chips are 3.3V (or 2.8V)
They are NOT input voltage tolerant.

However the ST7735 is more forgiving than other controllers. It will work with modest series resistors.
Note that the ST7735S datasheet explicitly states that Logic high levels should be less than 3.6V

I gave up with trying to follow your wiring from the photos you posted.

I suggest that you choose some better coloured wires and post a photo that clearly shows both ends of each wire.

I suggest that you follow Bodmer's advice from Miniflyer's link.

David.

This is the actual display. There are front and rear pictures.
The exact wiring is in my post in text format.
I've just ordered an entire assortment of resistors of 130 types, i'm getting a bit tired of buying a value, and my next project needing another :slight_smile: Displays aside for a week, back to the xmas lights....

Your Aliexpress link shows a 3.3V board.
Their text lies about 3.3V - 5.0V.
You should only connect VCC to 3.3V and provide some form of protection from the Nano's 5V GPIO

Q1, R1, R2, R3 enable you to control the backlight via wimpy GPIO e.g. ARM

David.

david_prentice:
Q1, R1, R2, R3 enable you to control the backlight via wimpy GPIO e.g. ARM

David.

What do you mean by that?

Resistors were shipped today, lets see if the 8-15 days hold true....

ARMs are typically limited to 3mA for their GPIO ports. They can't switch a TFT backlight.

Hence your display has a transistor. This means you can turn the backlight off under program control with any Arduino. You can even use PWM.

David.

Ahhhh i see. I just need 100% power on as soon as its powered up

OK i received the 1.8k and 1.2k resistors.
New wiring:

Arduino -> Display

GND -> GND
3.3V -> VCC
D13 -> 1.2k -> SCL -> 1.8k -> GND
D11 -> 1.2k -> SDA -> 1.8k -> GND
D9 -> 1.2k -> RES -> 1.8k -> GND
D8 -> 1.2k -> DC -> 1.8k -> GND
D10 -> 1.2k -> CS -> 1.8k -> GND

What am i getting?
When i start up the arduino and upload the code, the display backlight flickers, stays on constant while the code is transferred, and then goes black. No graphics, nothing.

Hello! ST77xx TFT TestInitialized
80
done

This is what is put out over the serialport.
Only change: the backlight is a LOT dimmer now. Not even as bright as my smartphone on lowest brightness....

Not really clear what the problem is? I have tried commenting in and out all the various options in the library examples......
The only thing i have not found out yet how to select the "Red Label" .....it ony shows green and black....

OK now i am fully confused,

Here the guy is using the same display (except the green tab vs my red one) on an uno (5v signal level) without voltage divider successfully.....

Any ideas?

Look at 1:40 in the video. It shows a buffer chip. Probably 74LV245 or CD4050

Right i am missing that chip on mine.

But not getting anything. Tried other example codes, tried moving the display to another array line on the breadboard in case of contact faults.....nothing, flickering, steady dim backlight, black.....

I am stll not a step further.

Does anyone have library that runs with the red tab displays? As of now it is the only solution i can still think of....

UPDATE:

I have now tested 3 various displays of the following types:

The 7735 and 7789 displays i tried to run on the standard Adafruit and u8g2 library, the SD1329 on the u8g2 only.
Since all 3 are showing the same behavior i believe my problem is in the wiring/setup.
-The 7735 (Red Tab) lit up "regular" bright unter 5v wiring, showing just the hint of motion. Adding the resistors changed the brightness to a low low glim, still showing no images. White backlight constantly on.
-The 1329 shows no backlight glow at all-
-The 7789 (Blue tab) was only run on the resistors. It shows the faintest of glow, hardly visible unless in very low ambient light. It appears to show some motion, but the glow is so faint it is hard to tell.

Since it is similar result on all 3, i suspect i have a wiring issue.

Basic scematics from the Nano unchanged and used on all 3 displays:

Arduino -> Display

GND -> GND
3.3V -> VCC
D13 -> 1.2k -> SCL -> 1.8k -> GND
D11 -> 1.2k -> SDA -> 1.8k -> GND
D9 -> 1.2k -> RES -> 1.8k -> GND
D8 -> 1.2k -> DC -> 1.8k -> GND
D10 -> 1.2k -> CS -> 1.8k -> GND

The wiring looks a bit chaotic, i apologize, but contacts have all been checked and doublechecked.....

It would take 5 minutes of your life to cut your resistor leads to length and present a neatly wired breadboard.

If you want to use a breadboard with broken power rails, you should link them e.g. with plain wire links.
Hint. the cropped surplus from resistors will provide plenty of single-core jumper links.

Nowadays you can buy resistors and jumper wire from Ebay. Very cheap. No excuse for bad wiring.

David.

OK i cleaned up everything, now it looks like this without the display:

Running the ST7735 Display on the ST7735 Options gets me just a blank white screen.
However changing to ST7789 and setting up to 128*128 gets me this:

The original code i am running on the Adafruot library is here:

#include <Adafruit_GFX.h>    // Core graphics library
#include <Adafruit_ST7735.h> // Hardware-specific library for ST7735
#include <Adafruit_ST7789.h> // Hardware-specific library for ST7789
#include <SPI.h>

  // For the breakout board, you can use any 2 or 3 pins.
  // These pins will also work for the 1.8" TFT shield.
  #define TFT_CS        10
  #define TFT_RST        9 // Or set to -1 and connect to Arduino RESET pin
  #define TFT_DC         8
#endif

// OPTION 1 (recommended) is to use the HARDWARE SPI pins, which are unique
// to each board and not reassignable. For Arduino Uno: MOSI = pin 11 and
// SCLK = pin 13. This is the fastest mode of operation and is required if
// using the breakout board's microSD card.

// For 1.44" and 1.8" TFT with ST7735 use:
//Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);

// For 1.14", 1.3", 1.54", and 2.0" TFT with ST7789:
Adafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_RST);


float p = 3.1415926;

void setup(void) {
  Serial.begin(115200);
  Serial.print(F("Hello! ST77xx TFT Test"));


  // OR use this initializer (uncomment) if using a 1.3" or 1.54" 240x240 TFT:
  tft.init(128, 128);           // Init ST7789 240x240


  Serial.println(F("Initialized"));

  uint16_t time = millis();
  tft.fillScreen(ST77XX_BLACK);
  time = millis() - time;

  Serial.println(time, DEC);
  delay(500);

  // large block of text
  tft.fillScreen(ST77XX_BLACK);
  testdrawtext("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur adipiscing ante sed nibh tincidunt feugiat. Maecenas enim massa, fringilla sed malesuada et, malesuada sit amet turpis. Sed porttitor neque ut ante pretium vitae malesuada nunc bibendum. Nullam aliquet ultrices massa eu hendrerit. Ut sed nisi lorem. In vestibulum purus a tortor imperdiet posuere. ", ST77XX_WHITE);
  delay(1000);

  // tft print function!
  tftPrintTest();
  delay(4000);

  // a single pixel
  tft.drawPixel(tft.width()/2, tft.height()/2, ST77XX_GREEN);
  delay(500);

  // line draw test
  testlines(ST77XX_YELLOW);
  delay(500);

  // optimized lines
  testfastlines(ST77XX_RED, ST77XX_BLUE);
  delay(500);

  testdrawrects(ST77XX_GREEN);
  delay(500);

  testfillrects(ST77XX_YELLOW, ST77XX_MAGENTA);
  delay(500);

  tft.fillScreen(ST77XX_BLACK);
  testfillcircles(10, ST77XX_BLUE);
  testdrawcircles(10, ST77XX_WHITE);
  delay(500);

  testroundrects();
  delay(500);

  testtriangles();
  delay(500);

  mediabuttons();
  delay(500);

  Serial.println("done");
  delay(1000);
}

void loop() {
  tft.invertDisplay(true);
  delay(500);
  tft.invertDisplay(false);
  delay(500);
}

void testlines(uint16_t color) {
  tft.fillScreen(ST77XX_BLACK);
  for (int16_t x=0; x < tft.width(); x+=6) {
    tft.drawLine(0, 0, x, tft.height()-1, color);
    delay(0);
  }
  for (int16_t y=0; y < tft.height(); y+=6) {
    tft.drawLine(0, 0, tft.width()-1, y, color);
    delay(0);
  }

  tft.fillScreen(ST77XX_BLACK);
  for (int16_t x=0; x < tft.width(); x+=6) {
    tft.drawLine(tft.width()-1, 0, x, tft.height()-1, color);
    delay(0);
  }
  for (int16_t y=0; y < tft.height(); y+=6) {
    tft.drawLine(tft.width()-1, 0, 0, y, color);
    delay(0);
  }

  tft.fillScreen(ST77XX_BLACK);
  for (int16_t x=0; x < tft.width(); x+=6) {
    tft.drawLine(0, tft.height()-1, x, 0, color);
    delay(0);
  }
  for (int16_t y=0; y < tft.height(); y+=6) {
    tft.drawLine(0, tft.height()-1, tft.width()-1, y, color);
    delay(0);
  }

  tft.fillScreen(ST77XX_BLACK);
  for (int16_t x=0; x < tft.width(); x+=6) {
    tft.drawLine(tft.width()-1, tft.height()-1, x, 0, color);
    delay(0);
  }
  for (int16_t y=0; y < tft.height(); y+=6) {
    tft.drawLine(tft.width()-1, tft.height()-1, 0, y, color);
    delay(0);
  }
}

void testdrawtext(char *text, uint16_t color) {
  tft.setCursor(0, 0);
  tft.setTextColor(color);
  tft.setTextWrap(true);
  tft.print(text);
}

void testfastlines(uint16_t color1, uint16_t color2) {
  tft.fillScreen(ST77XX_BLACK);
  for (int16_t y=0; y < tft.height(); y+=5) {
    tft.drawFastHLine(0, y, tft.width(), color1);
  }
  for (int16_t x=0; x < tft.width(); x+=5) {
    tft.drawFastVLine(x, 0, tft.height(), color2);
  }
}

void testdrawrects(uint16_t color) {
  tft.fillScreen(ST77XX_BLACK);
  for (int16_t x=0; x < tft.width(); x+=6) {
    tft.drawRect(tft.width()/2 -x/2, tft.height()/2 -x/2 , x, x, color);
  }
}

void testfillrects(uint16_t color1, uint16_t color2) {
  tft.fillScreen(ST77XX_BLACK);
  for (int16_t x=tft.width()-1; x > 6; x-=6) {
    tft.fillRect(tft.width()/2 -x/2, tft.height()/2 -x/2 , x, x, color1);
    tft.drawRect(tft.width()/2 -x/2, tft.height()/2 -x/2 , x, x, color2);
  }
}

void testfillcircles(uint8_t radius, uint16_t color) {
  for (int16_t x=radius; x < tft.width(); x+=radius*2) {
    for (int16_t y=radius; y < tft.height(); y+=radius*2) {
      tft.fillCircle(x, y, radius, color);
    }
  }
}

void testdrawcircles(uint8_t radius, uint16_t color) {
  for (int16_t x=0; x < tft.width()+radius; x+=radius*2) {
    for (int16_t y=0; y < tft.height()+radius; y+=radius*2) {
      tft.drawCircle(x, y, radius, color);
    }
  }
}

void testtriangles() {
  tft.fillScreen(ST77XX_BLACK);
  uint16_t color = 0xF800;
  int t;
  int w = tft.width()/2;
  int x = tft.height()-1;
  int y = 0;
  int z = tft.width();
  for(t = 0 ; t <= 15; t++) {
    tft.drawTriangle(w, y, y, x, z, x, color);
    x-=4;
    y+=4;
    z-=4;
    color+=100;
  }
}

void testroundrects() {
  tft.fillScreen(ST77XX_BLACK);
  uint16_t color = 100;
  int i;
  int t;
  for(t = 0 ; t <= 4; t+=1) {
    int x = 0;
    int y = 0;
    int w = tft.width()-2;
    int h = tft.height()-2;
    for(i = 0 ; i <= 16; i+=1) {
      tft.drawRoundRect(x, y, w, h, 5, color);
      x+=2;
      y+=3;
      w-=4;
      h-=6;
      color+=1100;
    }
    color+=100;
  }
}

void tftPrintTest() {
  tft.setTextWrap(false);
  tft.fillScreen(ST77XX_BLACK);
  tft.setCursor(0, 30);
  tft.setTextColor(ST77XX_RED);
  tft.setTextSize(1);
  tft.println("Hello World!");
  tft.setTextColor(ST77XX_YELLOW);
  tft.setTextSize(2);
  tft.println("Hello World!");
  tft.setTextColor(ST77XX_GREEN);
  tft.setTextSize(3);
  tft.println("Hello World!");
  tft.setTextColor(ST77XX_BLUE);
  tft.setTextSize(4);
  tft.print(1234.567);
  delay(1500);
  tft.setCursor(0, 0);
  tft.fillScreen(ST77XX_BLACK);
  tft.setTextColor(ST77XX_WHITE);
  tft.setTextSize(0);
  tft.println("Hello World!");
  tft.setTextSize(1);
  tft.setTextColor(ST77XX_GREEN);
  tft.print(p, 6);
  tft.println(" Want pi?");
  tft.println(" ");
  tft.print(8675309, HEX); // print 8,675,309 out in HEX!
  tft.println(" Print HEX!");
  tft.println(" ");
  tft.setTextColor(ST77XX_WHITE);
  tft.println("Sketch has been");
  tft.println("running for: ");
  tft.setTextColor(ST77XX_MAGENTA);
  tft.print(millis() / 1000);
  tft.setTextColor(ST77XX_WHITE);
  tft.print(" seconds.");
}

void mediabuttons() {
  // play
  tft.fillScreen(ST77XX_BLACK);
  tft.fillRoundRect(25, 10, 78, 60, 8, ST77XX_WHITE);
  tft.fillTriangle(42, 20, 42, 60, 90, 40, ST77XX_RED);
  delay(500);
  // pause
  tft.fillRoundRect(25, 90, 78, 60, 8, ST77XX_WHITE);
  tft.fillRoundRect(39, 98, 20, 45, 5, ST77XX_GREEN);
  tft.fillRoundRect(69, 98, 20, 45, 5, ST77XX_GREEN);
  delay(500);
  // play color
  tft.fillTriangle(42, 20, 42, 60, 90, 40, ST77XX_BLUE);
  delay(50);
  // pause color
  tft.fillRoundRect(39, 98, 20, 45, 5, ST77XX_RED);
  tft.fillRoundRect(69, 98, 20, 45, 5, ST77XX_RED);
  // play color
  tft.fillTriangle(42, 20, 42, 60, 90, 40, ST77XX_GREEN);
}

We have no idea what display is used in your photos.

I strongly recommend that you connect the black wires properly.
And post a photo of the display pcb (or a link to the Ebay sale)

David.

All info you are asking for i have posted in post #3 of this thread.

There are 2 black wires. The left one is connecting the display GND to the GND bar. (The arduino GND is connected to the GND bar with the silver bridge). The right wire connects the upper GND bar to the lower GND bar.
I'm afraid theres no more proper way to wire it than over a common bus.....

Your wiring is probably ok. Have you tested each Chinese jumper wire? They often break.

Neat wiring makes it possible for readers to check your photos.

Have you measured the 3.3V pin on the Arduino?

I can assure you that 128x128 ST7735 displays work fine (with 3.3V GPIO) but I only have red pcb displays (which have an AMS1117-3.3 on their VCC pin).

I do have the same ST7789 display as you. But only used it with 3.3V VCC and logic.

I have never seen or used a SSD1329 display. It is OLED. You must use the correct library to "initialise the display".

David.

All wires have been checked and are ok

Voltages:

Arduino 5V: 4,66V
Arduino 3.3V: 3,26V

5V logic signal taken after the first Resistor: 2,82V

The ST7789 i took to the other thread....

I just dont understand why the ST7735 display works partially with the ST7789 drivers activated, and not at all with the 7735?