3.3V SPI TFT on Arduino Uno?

Hi, I'm new so I don't exactly know what I'm doing, but so far I like exploring Arduino and everything that connects to it. So I bought an SPI TFT 0.96" and the specs say that it's a 3.3V TFT, ST7735, 160x80 pixels.
I've found 3 libraries that support it:
Arduino ST7735,
UCGLib (with a modification to add the 160x80 resolution), and the
Libraries-Examples_ER-TFTM0.96-1 from BuyDisplay, which is the most comprehensive of all.
All libraries display text and images, but there is a problem with the result I'm getting when it's connected to Arduino Uno. I have it connected to 3.3V (and the rest of the pins are correct), but only one led from the backlight is lit, the graphics look interlaced, and there is a noticeable flickering. If I re-upload a sketch, for the 1 second it's resetting, the display looks great, non-interlaced, with both backlight LEDs on. After that 1 second, the UNO is fully restarted and running, the display is dim again, and interlaced. I've tried everything, another UNO board, 3 libraries, many example codes, all yield the same result.

As soon as I connected the display on an Arduino DUE, everything works as expected. I've read somewhere that "to work with a 3.3V screen on an UNO or MEGA you have to add level compensation". It sounds good but I don't know what it means and how to do it and why. My guess is that even though I'm feeding 3.3V to the screen's VCC input, the digital pins are sending 5V signals to the rest of the 5 pins of the screen. So how do I connect it to an UNO board?
It's this one:

My guess is that even though I'm feeding 3.3V to the screen's VCC input, the digital pins are sending 5V signals to the rest of the 5 pins of the screen

Your guess is correct. the output voltage of 5 volts is too high to apply safely to a 3.3v input. There are several ways to deal with that. 1. using resistors as a voltage divider or using level shifting IC's. In a breadboard situation I usually use resistors, but the better (and cleaner) way in a permanent circuit is to use level shifting IC's. Below is a tutorial.


Thanks for the reply. Most of the logic level converters are 4 channel, but a TFT has 5 connections sck, data(mosi), c/d, cs, and reset (excluding the ground and vcc). Do I need to level shift all of them? Should I look for the 8 channel level converters? (5 channel would be great but I can only find 4 and 8 channel converters).

I really don't recommend one way over the other, because I think it's a matter of personal preference. In my experience the method using resistors can often provide varying levels depending on their tolerances. IE: 1 10k resistor may be 9900 ohms while another may be 10,200 ohms.
This may or may not be an issue, depending on your circuit's environmental characteristics. That being said I do use that method often when breadboarding and temporary setups.

Level translator IC's are as stable as your power supply so for me, I'd use them in a "finished product". In this scenario you could probably get away with putting the reset on a resistor voltage divider since it would be a relatively slow signal, and use a X4 level translator on the others. Many folks use resistors quite successfully as well but consider the space used for 2 times the 5 signal lines for 10 resistors in your layout.

You may also want to consider using a 3.3V version of the Arduino family and eliminate the need to translate levels.
Just some of my thoughts on it.