I recently obtained a handful of used 40×4 (40 characters, 4 rows) LCDs with backlight. These displays are produced by Powertip.
Let’s try to get this Powertip PC4004-A LCD working with Arduino…
Reading the PC4004-A datasheet learns that the pinout is familiar to the popular HD44780 display.
Function | HD44780 pin | PC4004-A pin |
GND, Vss | 1 | 13 |
VCC, Vdd (+3.3 to +5V) | 2 | 14 |
Vo (Contrast adjustment) | 3 | 12 |
RS, Register Select (0=Command, 1=Data) | 4 | 11 |
R/W (0=Read, 1=Write) | 5 | 10 |
EN, Enable/Clock | 6 | 9 (E1) |
DB0, data bus bit 0 | 7 | 8 |
DB1, data bus bit 1 | 8 | 7 |
DB2, data bus bit 2 | 9 | 6 |
DB3, data bus bit 3 | 10 | 5 |
DB4, data bus bit 4 | 11 | 4 |
DB5, data bus bit 5 | 12 | 3 |
DB6, data bus bit 6 | 13 | 2 |
DB7, data bus bit 7 | 14 | 1 |
Backlight Anode (+) | 15 | 17 |
Backlight Cathode (-) | 16 | 18 |
Enable 2 | n.a. | 15 (E2) |
Vee, Negative voltage generator | n.a. | 16 |
The PC4004-A has the same pin functions but they are assigned to different pins and they are arranged in a 2×8 double row IDC connector with 0.1″ spacing. The backlight has two separate connections on the other end of the PCB. As the HD44780 only supports 2 rows, the PC4004-A has a second Enable pin that addresses character rows 2 and 4.
The display consumes about 4mA, the backlight about 220mA at 4.2V. I really should measure that because these numbers are from the data sheet.
I found some example code on the arduino forum but the sketch failed to compile with Arduino 1.0.3 because it did not find LiquidCrystal440.h. LiquidCristal440.h is actually a rewrite of the LiquidCristal library by John Raines. Extract it and replace the LiquidCrystal library with the new one.
This is my working sample code:
/* PC4004-A 40x4 LCD character display - Hello World http://code.google.com/p/liquidcrystal440/ The circuit: * LCD RS pin 11 to arduino digital pin 12 * LCD R/W pin 10 to arduino digital pin 11 * LCD Enable 1 pin 9 to arduino digital pin 10 * LCD Enable 2 pin 15 to arduino digital pin 9 * LCD D4 pin 4 to arduino digital pin 5 * LCD D5 pin 3 to arduino digital pin 4 * LCD D6 pin 2 to arduino digital pin 3 * LCD D7 pin 1 to arduino digital pin 2 * 10K potentiometer: * ends to +5V and ground * wiper to LCD Vo pin 12 This example code is in the public domain. */ // include the library code // don't forget to get the modified LiquidCristal library // by John Raines at http://code.google.com/p/liquidcrystal440/ #include <LiquidCrystal.h> // LCD function: RS,RW,EN1,EN2,D4,D5,D6,D7 // PC4004-A pins: 11,10, 9, 15, 4, 3, 2, 1 LiquidCrystal lcd(12,11, 10, 9, 5, 4, 3, 2); void setup() { // set up the LCD's number of columns and rows: lcd.begin(40, 4); // show some output lcd.setCursor(0, 0); lcd.print("hello, world!"); lcd.setCursor(0, 1); lcd.print("hello, world 2!"); lcd.setCursor(0, 2); lcd.print("hello, world 3!"); lcd.setCursor(0, 3); lcd.print("hello, world 4!"); } void loop() { }
And the photo at the start of this post proves it works!
Hi,
Just scavenged a Batron 40457 from an old UPS system today and found myself on your site. Good info, turns out that my pinout is the same as the PC4004-A 40×4 that you describe.
Now I just need some free time to start and experiment.
Thanks a lot !!
where did you get your IDC connector?
The cable with the IDC connectors was salvaged from old hardware, together with the display. You can find the connectors separately by searching online for “2X8 IDC” or “16 way IDC”, e.g. on eBay.
Holy Cats, lectroleevin. This worked on my LCD, salvaged from an old De La Rue Cash Systems DT 5000 box. There are some keys I can map to some more digital pins. Then use this old box to control my homemade camera slider. Thank you so much for your post!
Nice to hear that Derek. Keep on hackin’!
Hello,
I have problem with the backlight.
I measured infinitive Ohms in either direction.
I put 5V on the a & k connection but no backlight?
Did I do something wrong?
Even a new 4004 measured no resistance in either direction.
If the backlight is an LED, the datasheet specifies 4.2V. If your supply is 5V you might need a resistor to limit the current. A 3.9 ohms resistor should limit the current to a safe 200mA but you could always start with a higher resistor value.
If you check the datasheet, you will see is are also version with “EL B/L” (Electroluminescent lighting requires a high AC voltage) and even a “W/O B/L” version (without backlight). In both cases you would not measure infinitive ohms.
i have a promlem with code , some error occurred
no matching function for call to ‘LiquidCrystal::LiquidCrystal(int, int, int, int, int, int, int, int)’