1602 LCD using I2C Adapter

From Embedded Workshop
Jump to navigation Jump to search

Hardware


All of these 1602, 2002, 2004 LCD modules use the same HD44780 controller chip.
Documentation for HD44780 controller chip: https://www.sparkfun.com/datasheets/LCD/HD44780.pdf
Documentation for the PCF8774A: https://www.ti.com/lit/ds/symlink/pcf8574a.pdf

Here's a schematic showing how the PCF8574 connects to the LCD:
https://www.electrodragon.com/w/File:1602_IIC_schematic_R2.png

Basically, via the I2C bus and the I2C expander, you are bit-banging commands & data into the display's
parallel interface, using its 4-bit bus interface (4 of the bus pins aren't used).

Software

Using the library manager, install the LiquidCrystal library

Find the LiquidCrystal library inside your Arduino/libraries folder,
and then open examples/HelloWorld_i2c\HelloWorld_i2c.ino sketch.
Give this sketch a try.  Run i2c_scanner to find your device's I2C address.
Make sure the code is using your device's address!
My I2C adapter board has its pins wired a little differently than the "default"
Here's what I use:
--- From HelloWorld_i2c.ino sketch ---
//LiquidCrystal_I2C lcd(0x38);  // Set the LCD I2C address
//LiquidCrystal_I2C lcd(0x27);  // Use I2C address 0x27 instead
//LiquidCrystal_I2C lcd(0x38, BACKLIGHT_PIN, POSITIVE);  // Set the LCD I2C address

// Define the pins the I2C 8-bit expander chip uses for LCD connections:
//                    addr, en,rw,rs,d4,d5,d6,d7,bl,blpol
LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);  // LCD I2C address and my PCF8574 pin assignment
The BACKLIGHT_PIN is being managed by the I2C adapter board.  References to this definition may be removed.
Pin 13 is NOT connected to any backlight control.

Other links:

http://wiki.sunfounder.cc/index.php?title=I%C2%B2C_LCD1602
https://opencircuit.shop/resources/file/da88acc1702a90667728fcf4ac9c75c455475706466/I2C-LCD-interface.pdf
https://create.arduino.cc/projecthub/akshayjoseph666/interface-i2c-16x2-lcd-with-arduino-uno-just-4-wires-273b24
https://www.makerguides.com/character-i2c-lcd-arduino-tutorial/
https://www.electrodragon.com/w/1602_LCD