I2C LCD 3E not responding

Having zero luck with getting ANY LCD to work. I've got an Uno and a Mega, three LCDs, one with four data lines and two with builtin I2C support.
They all light up.
I can see data activity on the four data line version that corresponds to the timing of the LOOP() but nothing happens. No blink, nada.
The two I2C modules show a line of boxes and a line of nothing.
The I2C modules show up with the scanner as "3E". Changing from the default "27" in the examples to "3E" doesn't help.
I've tried every example and library I can find. NOTHING works, at all.
No command has a response. The backlight stays on no matter what.
Both I2C LCDs behave the same on both the Uno and the Mega.
I got the LCM1602A-14 modules from Jameco, but there is little but the pinout for data. Since it lights up AND responds to the I2C_Scanner, I figure the four wires have got to be right.
I've got everything powered and verified, but no joy in mudville.
I've been able to get the DHT11 I2C modules to work as well as everything else in the kits, but so for getting ANY LCD to do ANYTHING (even blink) is beyond me.
Any help would be greatly appreciated. I'm new to Arduino, but have used GE Fanuc and other controllers so the tech isn't scarey.

Show us a good schematic of your proposed circuit.
Show us a good image of your ‘actual’ wiring.
Give links to components.


In the Arduino IDE, use Ctrl T or CMD T to format your code then copy the complete sketch.

Use the </> icon from the ‘reply menu’ to attach the copied sketch.

Have you tried 0x3F ? - it is one of the default addresses.

See below re possible addresses on these displays...

I2C Address of LCD

If you are using multiple devices on the same I2C bus, you may need to set a different I2C address for the board, so that it does not conflict with another I2C device.

To do so, the board has three solder jumpers (A0, A1 and A2) or solder pads.

i2c address selection jumpers on i2c lcd

Each of these is used to hardcode the address. If a jumper is shorted with a blob of solder, it sets the address.

An important point here is that many companies manufacture the same PCF8574 chip: Texas Instruments and NXP Semiconductors to name a few. And the I2C address of your LCD depends on the chip manufacturer.

If your LCD has a PCF8574 chip from Texas Instruments:

According to the Texas Instruments’ datasheet, three address selection bits (A0, A1 and A2) are placed at the end of the 7-bit I2C address register.

texas instruments pcf8574 i2c address register

As there are 3 address inputs, which can take 2 states, either HIGH/LOW, we can therefore create 8 (23) different combinations(addresses).

By default, all the 3 address inputs are pulled HIGH using onboard pullups, giving PCF8574 a default I2C address of 0100111Binary or 0x27Hex.

By shorting the solder jumpers, the address inputs are puled LOW. If you were to short all three jumpers, the address would be 0x20. The range of all possible addresses spans from 0x20 to 0x27. Please refer the below illustration.

i2c lcd address selection jumper table for ti

If your LCD has a PCF8574 chip from NXP Semiconductors:

According to the NXP Semiconductors’ datasheet, three address selection bits (A0, A1 and A2) are also placed at the end of the 7-bit I2C address register. But other bits in the Address Register are different.

nxp semiconductors pcf8574 i2c address register

Again! The 3 address input can have 2 states, either HIGH / LOW, giving us 8 (23) different combinations.

By default, all the 3 address inputs are pulled HIGH using onboard pullups, giving PCF8574 a default I2C address of 0111111Binary or 0x3FHex.

By shorting the solder jumpers, the address inputs are puled LOW. If you were to short all three jumpers, the address would be 0x38. The range of all possible addresses spans from 0x38 to 0x3F. Please refer the below illustration.

i2c lcd address selection jumper table for nxp

1 Like

Not got that module. No address jumpers.

Yes, I tried 3E and 3F (as well as the original 27) - none worked.
SDA, SCL to matching pins on Uno at end of row. The scanner see it so it HAS to be wired right.

Wiring is 4 wires. pwr, gnd are right because it lights up & displays a row of boxes. SDA/SCL are right because the I2C_scanner returns 3E on two modules.

Post your code.

can only post one picture at a time.

I'm using EXAMPLE code supplied with library. "HELLO WORLD" doesn't work even with only change 27 to 3E.

/*
LCD_I2C - Arduino library to control a 16x2 LCD via an I2C adapter based on PCF8574

Copyright(C) 2020 Blackhack <davidaristi.0504@gmail.com>

This program is free software : you can redistribute it and /or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.If not, see < https://www.gnu.org/licenses/>.

*/

#include <LCD_I2C.h>

LCD_I2C lcd(0x3E); // Default address of most PCF8574 modules, change according

void setup()
{
lcd.begin(); // If you are using more I2C devices using the Wire library use lcd.begin(false)
// this stop the library(LCD_I2C) from calling Wire.begin()
lcd.backlight();
}

void loop()
{
lcd.print(" Hello"); // You can make spaces using well... spaces
lcd.setCursor(5, 1); // Or setting the cursor in the desired position.
lcd.print("World!");
delay(500);

// Flashing the backlight
for (int i = 0; i < 5; ++i)
{
    lcd.backlight();
    delay(500);
    lcd.noBacklight();
    delay(500);
}

lcd.backlight();
lcd.clear();
delay(500);

}

#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x3E, 16, 2); // I2C address 0x27, 16 column and 2 rows

void setup()
{
lcd.init(); // initialize the lcd
lcd.backlight();

lcd.setCursor(0, 0); // move cursor to (0, 0)
lcd.print("Arduino"); // print message at (0, 0)
lcd.setCursor(2, 1); // move cursor to (2, 1)
lcd.print("GetStarted.com"); // print message at (2, 1)
}

void loop()
{
lcd.backlight();
lcd.setCursor(0, 0); // move cursor to (0, 0)
lcd.print("Arduino"); // print message at (0, 0)
lcd.setCursor(2, 1); // move cursor to (2, 1)
lcd.print("GetStarted.com"); // print message at (2, 1)
delay(500);
}

//sketch created by Akshay Joseph
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x3E, 16, 2);

void setup()
{

lcd.begin(16, 2);

lcd.backlight();
lcd.clear();
lcd.setCursor(4,0);
lcd.print("Hackster");
}

void loop()
{
}

Also tried this with the four wire version:

/*
LiquidCrystal Library - Hello World

Demonstrates the use a 16x2 LCD display. The LiquidCrystal
library works with all LCD displays that are compatible with the
Hitachi HD44780 driver. There are many of them out there, and you
can usually tell them by the 16-pin interface.

This sketch prints "Hello World!" to the LCD
and shows the time.

The circuit:

  • LCD RS pin to digital pin 12
  • LCD Enable pin to digital pin 11
  • LCD D4 pin to digital pin 5
  • LCD D5 pin to digital pin 4
  • LCD D6 pin to digital pin 3
  • LCD D7 pin to digital pin 2
  • LCD R/W pin to ground
  • LCD VSS pin to ground
  • LCD VCC pin to 5V
  • 10K resistor:
  • ends to +5V and ground
  • wiper to LCD VO pin (pin 3)

Library originally added 18 Apr 2008
by David A. Mellis
library modified 5 Jul 2009
by Limor Fried (http://www.ladyada.net)
example added 9 Jul 2009
by Tom Igoe
modified 22 Nov 2010
by Tom Igoe
modified 7 Nov 2016
by Arturo Guadalupi

This example code is in the public domain.

http://www.arduino.cc/en/Tutorial/LiquidCrystalHelloWorld

*/

// include the library code:
#include <LiquidCrystal.h>
// initialize the library by associating any needed LCD interface pin
// with the arduino pin number it is connected to
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

//LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 2);

void setup() {
Serial.begin(9600);
pinMode(LED_BUILTIN, OUTPUT);
// set up the LCD's number of columns and rows:
digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level)
lcd.begin(16,2);
lcd.display();
lcd.cursor();
lcd.home();
lcd.setCursor(3, 1);
lcd.print("Hi, world!");
// lcd.begin(16, 2);
// Print a message to the LCD.
lcd.setCursor(0, 0);
lcd.print("Hello, world!");
Serial.println("Hello, world!");
delay(1000); // wait for a second
digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
}

void loop() {
digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level)
lcd.display();
delay(250); // wait for a second
digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW
// lcd.noDisplay();
delay(250); // wait for a second
// set the cursor to column 0, line 1
// (note: line 1 is the second row, since counting begins with 0):
lcd.setCursor(0, 0);
lcd.print("It's Alive!");
lcd.setCursor(0, 1);
// print the number of seconds since reset:
lcd.print(millis() / 1000);
Serial.print(millis()/1000.0);
Serial.println(" S");
}

Hi @madmark2150
From the photo in #4 and #7, I think your display is not I2C, but SPI.
SDA SCK AND CS pins look like BUS SPI designations to me.

RV - mineirin

Have you tried a couple of external pull-ups (4.7k) on the lines on the I2C devices?

For the display that has the 4 data lines direct... what out put are you getting? Does it have a contrast pot you can adjust? Sometimes the characters are not visible if contrast is not set correctly.

Nothing worked. i put a contrast pot and and 220 ohm resistor as indicated in the schematic, but no joy.
I need to add pullups. Resistors are on order. But again, why is the scanner seeing it? I read the I2C discussion about pullups and thought you could get away without for a single device on the string.

Ok, now what? The data sheet is non-existent.
I specifically ordered the 5v model. The library won't install, say not valid format.

You may be out of luck with that display.

Look if this help.

RV mineirin

PS:
Beware, this display is for 3.3V.

I found this page on this display.

|3|CS|Chip Select Pin:

  • "Low": 3-line Interface
  • "open": I2C Interface

To select the I2C interface.

And this library for Arduino boards.

Datasheet for the display.

@bperrybap will the hd44780 library work with this display?

Maybe this...