HD44780 LCD

From Leo's Notes
Last edited on 9 August 2020, at 20:13.

The Hitachi HD44780 is a LCD controller developed by Hitachi in the 1980s. These displays are easily identified by their 16 pin interface. LCD displays using the HD44780 are inexpensive and comes in various sizes.

As of 2020, the 20x4 variants cost about $12 CAD while the smaller 16x02 variants cost about $3 CAD.

Usage[edit | edit source]

The LCD can be driven in 4-bit operation mode which only requires pins D4-D7. If you do not want to deal with all this but instead would rather use an i2c interface, you can get an adapter board with a PCF8574 for about $1 USD.

Pinouts[edit | edit source]

The HD44780 has a 16 pin header.

Pin Description
1 VSS - Ground
2 VDD - 5v
3 VE - Contrast voltage
4 RS - Register Select
5 RW - Read/Write
6 En - Enable
7 Data 0 - Not used in 4-bit operation
8 Data 1 - Not used in 4-bit operation
9 Data 2 - Not used in 4-bit operation
10 Data 3 - Not used in 4-bit operation
11 Data 4
12 Data 5
13 Data 6
14 Data 7
15 Backlight Anode - 5v
16 Backlight Cathode - Ground

User Defined Fonts[edit | edit source]

The HD44780 has a ROM that contains all the ASCII characters for the 5x8 dot matrix. A limited number of custom characters can be programmed into the device as bitmaps and are stored in the controller's memory. These custom characters will need to be re-programmed after the controller is switched on.

More information at: http://www.quinapalus.com/hd44780udg.html

Troubleshooting[edit | edit source]

Garbage being rendered on startup[edit | edit source]

I tried hooking up a HD44780 to an Arduino Pro Mini and tried using the example Hello World sketch but ended up getting garbage being drawn. Adding capacitors didn't help. The odd thing was, the LCD was able to render 'ello, world!' without the first 'H' sometimes but ends up showing garbage again when the microcontroller is reset.

I eventually used another Arduino with the same sketch using jumper wires rather than on the breadboard and it started working. I think the issue was one of the data pins wasn't making a proper connection and the display didn't end up in 4 bit mode? I'm unable to reproduce it however and everything is working reliably.