I have 1602 LCD, HD44780 driver compatible. I tried the I2C scanner sketch to establish the hex code address of the LCD, and this returned 0x3f which seems fine so far That was done using a Uno board. If I try the same exercise on a Mega2650 board, no result is returned. I assume further work is needed if I wish to use the Mega board for projects in the future. Please be aware I am quite new to all this, but would be grateful for any tips to clarify the above. Thanks
Thats a pretty vague post...
Does the LCD display characters correctly when connected to the Uno?
On the Mega, which pins are you connecting to?
A 1602 hd44780 LCD display does not support i2c.
I’m assuming that you meant that you have a PCF8574 i2c backpack on the LCD module to convert the hd44780 interface to i2c.
How are you connecting the SDA and SCL signals on the Mega?
If you connected them to A4 and A5 that will not work.
The i2c signals are on different pins on the UNO vs the Mega.
You can google around to find the pinout information.
Here is a link to one: https://arduino-info.wikispaces.com/MegaQuickRef
In terms of getting the LCD device working, keep in mind that there are many different i2c LCD libraries. They work differently and have different capabilities.
I would recommend using my hd44780 library package.
It is available in the IDE library manager so it can quickly and easily be installed from the IDE gui using the library manager.
With other libraries you must specify the i2c address.
Most libraries are also hard coded to work with backpacks that use a specific pin mapping between the PCF8574 and the hd44780 LCD display and if your backpack doesn’t use that pin mapping, it won’t work.
A few libraries allow the sketch to configure the PCF8574 pin mappings and backlight control.
If the pin mappings are not specified correctly, it will not work.
The hd44780 library can auto detect everything, the i2c address, the pin mappings, and the backlight control.
You can read more about it here: GitHub - duinoWitchery/hd44780: Extensible hd44780 LCD library
The github page contains information about the library including installation instructions.
Use the IDE library manager to install it as it is easier and faster than trying to do it manually or using the zip install.
Also, by using the IDE library manager it ensures that the library is installed properly not to mention that you will also get the latest tested version of the library.
The library package includes support for several different h/w i/o interfaces used to communicate with the LCD module.
Each i/o interface has its own i/o class and its own set of examples.
The examples for each i/o class are grouped together in a directory by the name of the i/o class.
While all the examples are always available regardless of which h/w you actually have, using an example for an i/o class that is for different h/w will not work.
It will compile but obviously will not work.
The i/o class you will want to use for a backpack which contains an i2c i/o expander chip is hd44780_I2Cexp
That i/o class includes a diagnostic sketch (I2CexpDiag) which will test the i2c signals and internal RAM of the LCD module to verify that the the library is properly communicating with the LCD module.
It is useful to first run this sketch to verify that the library is properly talking to your backpack and LCD module.
Read the instructions in the sketch for how to run it and what to expect on the serial monitor.
After running the diagnostic sketch, you can run and look at other sketches for the hd44780_I2Cexp i/o class like the HelloWorld sketch to see what header files need to be included and how to declare the lcd object.
The hd44780 library contains additional capabilities not available in other libraries like
- return status to tell if API functions are not working correctly (usually do to i2c communication issues)
- ability to enable automatic line wrapping
- ability to read the display RAM or LCD status
- faster than other libraries as Arduino can run in parallel with LCD commands/instructions
I would recommend first running the diagnostic skech I2CexpDiag to verify that everything is working, then you can run and look at the other examples included in the hd44780_I2Cexp i/o class (like HelloWorld) to see the what header files need to be included and how to declare the lcd object.
Thanks very much. Sorry for the confusion - yes it does have a PCF8574 i2c backpack. And I see now the Mega uses pins 20 and 21 for SCL and SDA. I will also look carefully into which i2c lcd library I use. It is all quite a big learning curve and heaps of fun. Thanks again for the guidance.