SOLVED - eBay 1.8" ST7735 LCD Problem

Hey Guys

I bought this LCD from eBay and it arrived yesterday: The board that arrived did not say “HY 1.8” as I expected but “KMR 1.8”. See photo:

I hooked up the LCD (Sorry, I left the board at home, so I can’t give the exact connections between the board and arduino, but I think it must be right, because there are some images and lines being printed. Read further).

I downloaded the latest Adafruit 7735 and GFX library files from Github and tried running the example. I could see faint images being printed but the display was mostly just a bright white. Looking at the LCD from a very low angle (70 degrees or so, I could cleary see the text and lines being shown looked OK, but it was as if the contrast was extremely low. Everything is just bright white.

When I press the Arduino’s reset button, the display shows the image with proper black bakground and contrast for a few seconds, but as soon as the Arduino boot and runs the code again, the display again turns the strange low constrast white.

I tried initializing with initR and BLACKTAB, REDTAB, GREENTAB and also initB. initB displayed nothing. initR displayed text and lines, all of them still very faint.

Something obviously happens while the arduino resets that makes the LCD show properly. I narrowed it down to pin13 on the arduino. With the adafruit example running, I uploaded another sketch which simply sets pin13 to an output and digitalWrites it to LOW. Doing this, the LCD obviously freezes with the last image it displayed, but it displays it correctly with black background.

I tried another arduino uno - still same problem. I tried the following sketch found here:

#define cs_lcd   10
#define cs_sd    7
#define dc       9
#define rst      8

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

Adafruit_ST7735 tft = Adafruit_ST7735(cs_lcd, dc, rst);

void setup()

void loop()
  tft.setTextColor(ST7735_WHITE, ST7735_BLACK);
  for ( int i = 0; i < 100; i++ )
    tft.setCursor(40, 50);
    tft.print( i );
    delay( 100 );

Here is a video of the problem: Everytime the screen displays properly is after I press the arduino’s reset button.

Can anyone tell me what might be wrong?

I read another forum post today that said that even though the LCD borad can be powered by 5V (JP1 on board left open circuit), the SPI must be at 3.3V logic level? Could this be a problem?

I managed to fix the problem. Although the LCD may be supplied by 5V, the logic must still be at 3.3V level. For now, I just placed 1K resistors in-line with the four data lines. Just in case someone else struggles with the odd naming convention on the board:

| eBay LCD Board | Adafruit Pin Name | Arduino Pin No (Hardware SPI) | Notes | | - | - | - | - | | SCK | SCLK | 13 | 1K resistor in line | | SDA | MOSI | 11 | 1K resistor in line | | CS | TFT_CS | defined by "cs" in sketch | 1K resistor in line | | A0 | DC | defined by "dc" in sketch | 1K resistor in line | | RST | RST | defined by "rst" in sketch, or connected to Arduion RESET | | LED+ | | | Connect to Arduino 3.3V. Module has a 10R resistor inline already. LED is rated for 3.5V 30mA | | LED- | | | Connect to GND |

Next, I'll try using the SD Card.

keywords: ST7735S, ST7735R, kmr-1.8 spi v1, streaks, white display

Thanks. I'll try this. I've been pulling out my hair trying to get this 1.8" lcd to work.

Where did you find the st7735.h file?

I used the adaFruit libraries:

Thanks a lot, putting the 10k resistors, solved the problem to me, too....great...many thanks.

Thanks a lot, putting the 1k resistors, solved the problem to me, too....great...many thanks.

Sorry if I shouldn't add to such an old post but I just wanted to add that the "1k" resistor solution didn't work for me. It helped and make the screen flicker less and the colours more visible but it didn't stop it completely. What worked for me was running the Arduino off 3.3 volts rather than 5.

I was very relieved when I got it to work properly because I was sure I fried my board. (My backlight doesn't seem to have a current limiting resistor, so it got really hot when I first tried to power it up.)

The proper way to connect the SPI and Control line resistors (to reduce them to 3.3V) is to implement a voltage divider using 2 resistors per pin (10 total for the 5 lines). If you simply put a single 1K resistor in line you'll not reduce the voltage to 3.3 (I measured around 4.5). The SPI signals also get very ugly on the display side of the resistor which will likely greatly increase the chance you'll get communication errors.

I did try using only a single resistor on the control lines using the exact same display board, the KMR-1.8, and it did fix the brightness problem but after looking at the signals on an oscilloscope I think I'll either go with a level shifter circuit or the voltage divider (2 resistors per pin). I'm surprised the display even works with only a single resistor after seeing how malformed the signals get.