3.3v character lcds

Not open for further replies.


Senior Member+
I was looking around for 16x2 or preferably 20x4 lcds to plug into my Teensy 3.0. While there are a lot of these boards out there, most seem to be 5v. So, I was wondering am I missing suitable displays or are people with Teensy's just using voltage converters to talk to 5v devices? What are people using with their Teensy's. I would prefer something that uses either serial, i2c, or spi (in that order), but if the only solution is something that uses 7-10 pins, I can probably deal with. I am not really looking for high performance, mostly something that works with minimal effort. At the moment, my remote display is using my phone with bluetooth.

So far, I found one 16x2 display at Adafruit (does not work with i2c/spi backpacks, uses 7 pins): http://www.adafruit.com/products/823. Adafruit does have a simple library for this, and it doesn't look like it uses asm.

I also found an ebay seller with an i2c display using the ST7032i chipset: http://www.ebay.com/itm/290947405866?ssPageName=STRK:MESINDXX:IT&_trksid=p3984.m1436.l2649. I've seen some references to software on the web. Hopefully openGLCD will support it.

There are some 3.3v graphic displays using the SPLC780D chipset, such as: http://www.ebay.com/itm/1602-16-x-2...040?pt=LH_DefaultDomain_0&hash=item27d1641290.

There are also some SPI displays that don't feel it is important to mention the chipset, such as: http://www.ebay.com/itm/1PC-2-2-Inc...712?pt=LH_DefaultDomain_0&hash=item1c357f4dc0.
Are you referring to my openGLCD library? openGLCD is for graphic LCDs.
The lcd on the ebay link is a character lcd. It is essentially a hd44780 lcd with a i2c interface in front of it.
For that lcd what you want/need is a new interface class for fm's LiquidCrystal replacement library.
From looking at the datasheet, it looks like it would be pretty simple as the i2c message interface to talk to it just requires a single control byte
to set the hd44780 RS control line prior to sending the hd44780 control or data byte.
I could quickly toss one together but I have no way of testing it.

If you don't need i2c what you could do is drop back to 4 bit parallel and cheat a bit
to use a 5v lcd.
I do this for hooking up teensy3 to 5v ks0108 graphic LCDs.
The electrical interface for a hd44780 display is pretty much identical to the ks0108.

All you have to do is put 10k resistors between the teensy3 pins and the LCD pins.
The 10k reduces the current on the mismatched voltages to protect from 5v signals
going into the Teensy3 pins.
The resistor essentially makes the teensy3 pin 5v tolerant.
Paul and I worked on this strategy to try to save people the expense and complexity of having
to use full level shifters.
For output signals from the Teensy to the LCD, it isn't an issue since the
LCD expects 5V highs and the teensy will supply 3v.
The good news is that in most cases a 5v part will interpret the 3v high signal as a high
so the 3v teensy can still drive a high to a 5v input.

I've been using this method on a teensy3 test platform that I've been using
to test openGLCD for the past 7 months.

All that said,
when interfacing to a hd44780, using the LiquidCrystal library, the LCD never
drives any signals back into the Arduino board.
So as long as things are wired correctly no resistors would be needed to interface a 5v hd44780
to a teensy3.
In particular, I'd make doubly sure that the hd44780 r/w pin is hardwired to ground
to make sure that the lcd can never drive the data lines.
(If the data lines get driven, and you don't have the resistors, it could fry the teensy3 pin)
If you feel paranoid, just use the 10k resistors on all the data lines
or all the connections if you are really paranoid.

Here are some photos of a Teensy3 hooked up to a 5v ks0108 display.
The teensy3 pins used for the ks0108 control lines are directly connected to the ks0108 and the data lines are all
protected with 10 series resistors since on a ks0108 display the data moves both ways
and on reads the ks0108 will be driving the signals at 5v


--- bill
Thanks berryp. At the moment, I just want to display text as a status and debug aid. Eventually later, I may want to display graphics, but I included the graphics lcds just in case that was the only solution. I smoked a few things, and I'm just trying to be cautious when doing voltage conversion levels to be safe.
and install a backpack like SF or Adafruit or use the 4 bit interface.

Thanks. I had originally checked New Haven but all of the displays I looked at were 5v. In looking at it, there is also: http://www.newhavendisplay.com/nhdc0220bizfsrgbfbw3vm-p-2411.html.

Also, it looking at Adafruit further, they have a few other interesting displays besides the Nokia, such as:
Last edited:
The photos of the teensy3 running a glcd wasn't to show an example of a graphical glcd but rather
to show how you can hook a teensy3 to 5v lcds.

You could always just run a "5v" lcd at 3v. That way everything is using the same voltage
and supporting the same logic levels. The backlight would obviously be dimmer
unless you ran that at 5v - which is separate from the actual lcd interface circuitry.

My main concern regardless of whether using a 5v lcd at 3v or a 3v lcd
(which are essentially the same) is for the 3v power supply.
The teensy3 uses an internal voltage regulator. From a quick read of the datasheet
for the processor, it can supply 120ma.
Not sure what happens if you exceed that but I do know some larger lcds (both large text and many ks0108 graphical displays)
will exceed that current for the backlight.
The smaller 1602 type text displays typically use less than 10ma total including backlight.

If it were me, I use a 5v lcd (I already have several), and either use 4 bit parallel mode
or use a 595 shift register to avoid any 3v i2c issues and any potential teensy3 3v power supply issues.

I may hook one up later today to try it
and post a photo.

--- bill
The nice thing about about the Nokia 5110 is that it uses next to no power (around 1mA, excluding the backlight). You could probably power it from a digital pin...
I'm curious what these "3v" hd44780 modules really are.
They sure are proud of them as indicated by the price.
From what I've seen in looking at the datasheets the "5v" modules can run at 3v.
And those "3v" modules are capable of running at up to 5.5v and some at up to 7v

Just my opinion, but I think you guys are over-complicating this.
A 3v part can usually talk to a 5v part. Some 5v parts may not see the 3v as high
but the vast majority will.
The problem is when a 5v part drives an input to a 3v part if the 3v part
inputs are not 5v tolerant.
So the issue for Teensy3 is trying to use a part that has 5v outputs since the Teensy3
inputs are not 5v tolerant.
When using a hd44780 lcd with the Arduino LiquidCrystal library the LCD is only listening.
The LCD never drives any pins so there are no 5v outputs being connected to the Teensy3.

So as I mentioned a bit earlier,
the simple solution for interfacing a hd44780 lcd display to the Teensy3 is to just use
a "5v" lcd, run it at 5v, and hook up the connections directly to the Teensy3 pins.
Make sure the hd44780 r/w signal is grounded so the LCD will never
drive the data lines.

Then everything will "just work".
To demonstrate,
I wired up a Teensy3 to a 5v lcd/keypad shield using nothing but straight wires.
The shield is being powered with ~5v from the Teensy3 using the Teensy3 Vin pin.
I used the stock LiquidCrystal library that comes with the Arduino IDE.
As you can see, it "just works".

I used a shield rather than a bare hd44780 display as it was
quicker and easier to hook up vs using a breadboard.
But a stock hd44780 1602 type display would work just fine
powered from the teensy3 Vin pin.
Just make sure that the R/W signal on the lcd is hardwired to ground.

--- bill
Last edited:
For those of us in the USA, modern devices sells jeelabs stuff: http://moderndevice.com/product/lcd-character-displays/

Thanks berrypap. When I wrote the original message, I had two main concerns of whether 3.3v from the Teensy could drive the display (though if I'm powering from a regulated USB source, I can always use VIN for a 5v power), but also whether the display sends information back (status, ack packets, etc.) which might destroy the teensy. I imagine in general on screens by themselves, you don't tend to get communication back (though screens that provide button input could provide the information).
Looks similar to this Adafruit Monochrome 0.96" 128x64 OLED graphic display which is a 3V3 display that is 5V tolerant. The actual display is a UG-2864HSWEG01 from Univision Technology Inc., and the Solomon Systech SSD1306 driver. Adafruit have a library which supports hardware I2C and (software, bit-bashed) SPI. The soft SPI works but is slow, I did start converting it to hardware SPI and improving the graphics library which is astonishingly inefficient in places, and then stopped (illness, moving house etc). I should pick that up again.
In Europe, I got mine from lipoly.de althogh I see that floris.cc carries them now, I would probably order from there next time.
The display came today, and it runs great. It is fairly tiny, about 2/3 the size of teensy 3.0 on the long end, but very clear. I tested it on both the 3.3v teensy 3.0 and my 5v Uno r3, running with the ssd1306_128x64_i2c.ino test program (modifying the i2c address to 0x3c).
Unfortunately, my lcd no longer seems to work. I tried it on the Uno and it worked there, but it doesn't seem to work afterwards. I wonder if I plugged power into the ground wire and vice versa by accident. Oh well. Now to find a unit that is a bit more robust.
got the The adafruit 16x2, pretty impressive! Low profile and surprisely can work in SPI as well! I'm experimenting with it next week to buildup a library that allow work in graphic mode as well.
Micheal, it's happen to me recently with the same display as yours but I didn't exchanged the supply, I have another one that works well so I suppose they are not robust...
got the The adafruit 16x2, pretty impressive! Low profile and surprisely can work in SPI as well! I'm experimenting with it next week to buildup a library that allow work in graphic mode as well.
Micheal, it's happen to me recently with the same display as yours but I didn't exchanged the supply, I have another one that works well so I suppose they are not robust...

I got a replacement for the Oled device. I think however for use outside the lab, I probably want to stick to the 16x2 LCDs (that connector strip does not inspire confidence that it will last long). I have a 5v i2c 16x2 that I should play with level converters, and a non-i2c 5v LCD as well.

FWIW, a friend of mine was doing a mad scientist scout costume for Halloween, complete with a merit badge sash with various mad scientist merit badges (nuclear explosion, brain surgery, etc.). I thought that maybe she should think about a digital merit badge, and I cobbled up a display of the Oled display inside my neopixel ring:
Not open for further replies.