Fork me on GitHub

Project Notes

#398 LCD I²C Adapter

Using an I²C adapter to reduce the Arduino pins needed to drive an LCD.

Build

Notes

LCDs based on the Hitachi HD44780 or a compatible chipset are a popular display option for Arduino project. Common form factors are 1602 (16 column, 2 row) and 2004 (20 column, 4 row).

The basic LCDs require at least 6 Arduino pins to drive, and the standard LiquidCrystal library is available for this.

To save pins and simplify wiring, there are I²C adapters available - either separately or packaged with an LCD. These board basically use some form of Remote 8-Bit I/O Expander chip, most commonly the PCF8574 or PCF8574A, for example from NXP.

I am using a product “5pcs 1602 2004 LCD Adapter Plate IIC I2C / Interface lcd1602 I2C LCD Adapter for new” (aliexpress seller listing) that uses a PCF8574AT.

module

I²C Addressing

The address for the module is different for the PCF8574 and PCF8574A. The 7-bit hex address (without R/W bit) per the datasheet:

A2 A1 A0 PCF8574 PCF8574A
0 0 0 0x20 0x38
0 0 1 0x21 0x39
0 1 0 0x22 0x3A
0 1 1 0x23 0x3B
1 0 0 0x24 0x3C
1 0 1 0x25 0x3D
1 1 0 0x26 0x3E
1 1 1 0x27 0x3F

There are 3 unsoldered address pads on the module (A0, A1, A2) that are used to adjust the unit address. On the board I have, each of these are pulled high with a 1kΩ resistor by default. Closing the address pad will pull it low. Thus the default address for the PCF8574 is 0x27, and PCF8574A is 0x3F.

Code and Libraries

I²C is not supported by the standard LiquidCrystal library. When I searched for I²C LCD libraries:

  • it seems there is no clear leader
  • there are many independent forks of common source code
  • it’s a bit of a mess!

Never-the-less, I picked a reletively recent one: LiquidCrystal_I2C and it is working just fine.

The I2CAdapter.ino sketch is a simple test of the library.

Construction

Breadboard

Schematic

Build

Credits and References

About LEAP#398 LCDI2CHD44780PCF8574A

This page is a web-friendly rendering of my project notes shared in the LEAP GitHub repository.

Project Source on GitHub Return to the LEAP Catalog
About LEAP

LEAP is my personal collection of electronics projects - usually involving an Arduino or other microprocessor in one way or another. Some are full-blown projects, while many are trivial breadboard experiments, intended to learn and explore something interesting.

Projects are often inspired by things found wild on the net, or ideas from the many great electronics podcasts and YouTube channels. Feel free to borrow liberally, and if you spot any issues do let me know or send a pull-request.

NOTE: For a while I included various scale modelling projects here too, but I've now split them off into a new repository: check out LittleModelArt if you are looking for these projects.

Project Gallery view the projects as an image gallery Notebook reference materials and other notes Follow the Blog follow projects and notes as they are published in your favourite feed reader