LCD shields... are they bi-directional communication?

Hi all,

I have a 5V LCD shield and a 3.3V arduino... I was planning on using a level shifter to get them to work together but I'm not sure if this requires bi-directional communication? I would be using the LiquidCrystal library in the programming.

I am using this generic LCD shield (not I2C)

Thank you!

My 5V PLCD worked very well with 3.3V Arduino DUE. Just connect 5V of DUE Borad to Vcc of PLD; GND of DUE Board to GND of PLCD; make direct connections of all other signal pins.

You need a shifter on each pin for reliability but it will normally work. Most LCDs libraries do not feed back the busy signal but rely on delays, but for the best speed you need to feed the busy signal back and that will need a level shifter.

Interesting. More information:

I was previously using an Arduino 5V pro mini and had my project working flawlessly. I wanted to introduce some RF communication capabilities so I picked up some “Moteinos” which all run on 3.3V. I am using the Moteino Mega with my 16x2 LCD display that I linked to in the original post.

I am using a Nexperia 74LVC4245A translator to shift from 3.3V to 5V for the LCD pins.

My first test was to upload the program I was previously using with my Pro Mini to the Moteino Mega just to make sure the LCD screen / buttons, etc were working. Of course in my program I had to change the pin numbers to the appropriate pin numbers on the Moteino Mega, but nothing else was altered. Unfortunately, the LCD screen shows nothing on the screen.

I’ve checked over the connections 100 times now, verified the pin numbers are correct, verified that the translator is working correctly (I connected each of the pins to 3.3V to make sure the corresponding output one reliably outputs 5V). I cannot seem to get the LCD screen to print anything. I then used the very simple “Hello World” example program and still nothing. I also plugged my LCD screen back into my pro mini project board and it works flawlessly. No problems with the LCD screen being fried.

SO then I created a simple program to cycle through each of the digital outputs, run them high and then turn them off:

void setup() {


void loop() {

for (int j = 16; j < 23; j++)

I then probed digital pins 16 through 22 on the Moteino Mega and I could see each one rise to 3.3V for a moment, and fall back to zero. For this test I also removed the LCD shield, allowing me to probe the output pins on the translator. I was expecting to see the same result where each pin would rise to 5V for a moment, and then fall back to zero. However, with the LCD shield removed, all output pins on the translator were stuck at 5V for some strange reason. I repeated the test with the LCD shield back on the breadboard and I had the same result.

I then uploaded the hello world sketch back to the Moteino and I could see the voltages varying again on the input and only some of the outputs of the translator.

I’m wondering if the four data pins are sending info back and forth an I need a auto direction sensing translator?

Turned out to be a fault row on my bread board, agh!