ST7735 1.44" Chinese TFT: what's the simplest way to convert 5V levels to 3.3V?

I just got a ST7735 1.44" Chinese TFT, it works with AdaFruit library out of the box. But upon some googling I found out that I will fry it if I continue using it. That's because ST7735 is a 3.3V IC that is NOT 5V tolerant, and Arduino outputs 5V logic levels.

I am less than thrilled by the idea of buying a special high-speed level converter IC, soldering and connecting this monstrosity to Arduino. Is there a simpler way?

I've seen a recommendation to simply put a 1K resistor in-line, but I'm not sure that'll save my TFT from frying. For one, 1K seems too low a value. 10K - 51K sounds more like it.

Thoughts?

I suspect the display uses the common ST7735 driver. A 1K series resistor works fine, the key requirement is to limit the current into each display driver pin to an acceptable level. With 1K the current will be about 1mA which is unlikely to stress the driver input protection diodes that clamp the input voltage to ~0.5V above 3.3V, i.e. at 3.8V. As the logic level is about 5V (typically 4.8V) the current into the pin is about 1mA.

An alternative is to use a voltage divider as described here. I tend to use 1K2 with 2K2 (or 1K8) as the divider.

Yes of course, ST7735, I mistyped.
I've assembled a breadboard with 2K resistors and everything seems to be working fine. Also tried 10K but that did not work (I wonder why - don't MOSFET inputs only draw mere nanoamperes?)

Guess I'll keep my fingers crossed and hope the magic smoke won't go out of the ST7735. If it does - I'll update this thread with a warning to other users :slight_smile:

High value series resistors do not work in these situations for two reasons:

  • Sometimes there is a high value resistor pullup/pulldown that means a logic 0/1 is not reached
  • Stray and driver input capacitance forms a low pass filter (also called an RC Filter) and the high SPI clock rate does not get through or the waveform is badly distorted at the driver input terminal