I just got an Arduino and an LCD screen, and I can't seem to get the LCD to display anything. I've tried getting the HelloWorld demo to work, the one that comes with the Arduino software under the LiquidCrystal library. I've made a video of my setup, and I've also taken a closer picture of my soldering.
The LCD you are using is not 16x2, as the code library you are trying to make work requires. The one you are apparently using is 20x4 The LCD (just from looking at it has 20 pins (making it most likely a parallel data bus)...and you have 11 hooked up. Obtain the data sheet for the LCD you are using, interface that with the arduino you are using with the required hookups, and then find a library which supports your LCD driver chip.
All you are currently doing now is powering the logic circuit and LCD backlight.
The display is 20X4 instead of 16X2. I've tried adjusting the lcd.begin statement to account for that but I get the same results.
There are 16 pins on my LCD, not 20 -- I've seen LCDs with 14 pins, without the extra two on the right that control the backlight, but other than that it looks to be the same as other LCDs that I've seen examples of, and they use the LiquidCrystal library. There are even labels on the pins (underneath where the header is on the video) that match up with all of the code examples I've seen.
In that tutorial, there is a code sample that uses the LiquidCrystal library to drive the LCD, it's not all that different from the HelloWorld example I've been using. I've tried using that code example and I get the same results.
Are you sure it's not a problem with the library? Even if it was, I'm not sure where I would go to find a different one...
/*
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
* 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
This example code is in the public domain.
http://www.arduino.cc/en/Tutorial/LiquidCrystal
*/
// include the library code:
#include <LiquidCrystal.h>
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup() {
// set up the LCD's number of columns and rows:
lcd.begin(20, 4);
// Print a message to the LCD.
lcd.print("hello, world!");
}
void loop() {
// set the cursor to column 0, line 1
// (note: line 1 is the second row, since counting begins with 0):
lcd.setCursor(0, 1);
// print the number of seconds since reset:
lcd.print(millis()/1000);
}
I've tested the connections as much as I can and I haven't found anything wrong, but don't know of a way to be POSITIVE that they're good... I suppose if everything else can be eliminated, that must be it, right?
you forgot or haven't set the cursor on the hello world!
here replace that part of the code with this.
void setup() {
// set up the LCD's number of columns and rows:
lcd.begin(20, 4);
// Print a message to the LCD.
lcd.setCursor(0,0);
lcd.print("hello, world!");
}
also try and maybe use 16,4 on the lcd.begin because I have a 16x4 LCD and had alot of trouble making it work and making it 16x2 or 16x4 made little difference, the way I got it to work in the end was to hook it up in 8 bit mode which you can see on my LCD post.
I tried it with and without the setCursor call, same behavior. I also tried hooking it up in 8-bit mode and I didn't get anything different, and all combinations of lcd.begin() with 16/20 and 2/4.
At one point, I managed to get a bunch of scrolling garbage characters on the screen for a few seconds instead of just a blank display, but I haven't been able to reproduce that behavior. For a moment I thought my LCD might not be broken, but that's what it's looking like to me.
AdamHorton:
I tried it with and without the setCursor call, same behavior. I also tried hooking it up in 8-bit mode and I didn't get anything different, and all combinations of lcd.begin() with 16/20 and 2/4.
At one point, I managed to get a bunch of scrolling garbage characters on the screen for a few seconds instead of just a blank display, but I haven't been able to reproduce that behavior. For a moment I thought my LCD might not be broken, but that's what it's looking like to me.
Any more ideas?
try taking away the counter and just have the word hello world displayed. also try and follow THIS guide which helped me and idk but might help you: Arduino Tutorial - connecting a parallel LCD
These first two are red herrings, they won't help or hurt:
The display is 20X4 instead of 16X2. I've tried adjusting the lcd.begin statement to account for that but I get the same results.
You get the same results because the current LiquidCrystal library only checks the second value, and it only checks to see if that value is '1' or greater than '1'.
I tried it with and without the setCursor call, same behavior.
You do not have to set the cursor. It is set to 0,0 when the LCD is initialized.
try taking away the counter and just have the word hello world displayed.
This is not a bad idea. Having changing data in an initial program is a poor choice when it comes to troubleshooting.
For a moment I thought my LCD might not be broken, but that's what it's looking like to me.
I doubt that it is broken.
Your contrast may be set too high. If you have a voltmeter you should find that the voltage at pin 3 is less than 1 volt when the display is correct.
You have used way too much solder - check both sides of the board for solder bridges between LCD pins. Also, the connections to several of the pins on the LCD module don't look too good, especially 4, 5, and 11.
I also tried hooking it up in 8-bit mode and I didn't get anything different,
If that was before you corrected the E and R/W connections then it would be a good idea to try it again. There have been more than one instance of timing problems lately, possibly due to displays that slower than normal. The 4-bit mode seems to be less tolerant of this condition.
So I'll be the first person to tell you that my soldering skills are abysmal. I'm a software guy, and I haven't done much soldering in my time. I decided to just re-do my soldering, and look:
AdamHorton:
So I'll be the first person to tell you that my soldering skills are abysmal. I'm a software guy, and I haven't done much soldering in my time. I decided to just re-do my soldering, and look: