Top critical review
50 people found this helpful
Doesn't conform to any kind of standard. May not work for you directly out of the packet.
on 11 February 2014
Review of the Funduino I2C LCM1602 board (red), as depicted
Disappointing. Looks like a well thought out implementation. - The I2C connector mounts on either end of the board, so unlike others, it can be tucked neatly behind the display. Sadly, the one they kindly fit for you is on the "wrong" end (like many others) so that it sticks out beyond the end of display. A shame, but I wouldn't dock points for it.
This device arrives with no documentation or guidance. That might be ok if it complied with some kind of standard. This one doesn't, and the lack of any documentation anywhere on the web (at the time of writing) could result in a considerable number of hours to get it working. - Unless you read this, that is. I would advise beginners to stay away, but for those who have a little more experience or have bought one anyway, the following may be useful.
It is easy to find a web schematic for a PCF8574-based I2C LCD interface. All the ones I've found have essentially the following specification:
Default A0=A1=A2=0 giving I2C address = 0x20
P0 = LCD D4
P1 = LCD D5
P2 = LCD D6
P3 = LCD D7
P4 = LCD E
P5 = LCD R/W
P6 = LCD RS
P7 = LCD backlight (-ve logic)
This board is wired somewhat differently:
Default A0=A1=A2=1 giving I2C address = 0x27
P0 = LCD RS
P1 = LCD R/W
P2 = LCD E
P3 = LCD backlight (+ve logic) (via physical jumper enable/disable)
P4 = LCD D4
P5 = LCD D5
P6 = LCD D6
P7 = LCD D7
If you're using it with PIC, that's probably all you need to know, as you're probably programming it all yourself.
If you're using a library, however, it's likely written for the commonly found schematic, in which case some changes will be required.
For the Arduino "LiquidCrystal_I2C" library, the following changes are required:
In LiquidCrystal_I2C.h, make the following changes to define the correct control lines:
#define LCD_BACKLIGHT 0x00
#define LCD_NOBACKLIGHT 0x80
#define En B00010000 // Enable bit
#define Rw B00100000 // Read/Write bit
#define Rs B01000000 // Register select bit
To (changes for Funduino):
#define LCD_BACKLIGHT B00001000
#define LCD_NOBACKLIGHT 0x00
#define En B00000100 // Enable bit
#define Rw B00000010 // Read/Write bit
#define Rs B00000001 // Register select bit
In LiquidCrystal_I2C.cpp, make the following changes to fix the data bits:
In function LiquidCrystal_I2C::begin
we need to swap the data nibbles, since library assumes data is bits 0..3, but Funduino has them as bits 4..7
Change all three occurances of:
Change the single occurance:
In function LiquidCrystal_I2C::send
we need to be using the high nibble to send data, rather than low nibble
uint8_t lownib=value & 0x0F;
uint8_t highnib=value & 0xF0;
Finally, don't forget to use address 0x27 in your initialisation call rather than 0x20:
LiquidCrystal_I2C lcd ( 0x27, 16, 2 ) ; // I2C LCD ( address, chars, lines )
You need to remember to change this for any example you want to run and, no doubt, anything you download from the web.
Or you could solder the three links on board to change the address to 0x20 (or any of the 6 addresses in between).
On the plus side it works, can be had for less than the cost of the PCF8574 chip in the UK, and can be used as a general purpose port extender. But I'd rather not have invested the time to work out the schematic.
Is this an appropriate amount of effort/feedback to give for a £2 device?