Understanding LCD problems

Hi everybody,
I'm a beginner who started using Arduino with a small group of friends. We have a Mega2560 and we'd like to power and program an LCD screen, we have a 1620A.

We connected every single pin between the LCD and the Arduino, following the necessary scheme correctly. We just miss a resistor between V0 and ground, as asked by the official scheme, though we think it might not be the actual reason of our problem.

Our problem is that the screen is actually powered and the backlight turns on, but it shows no data at all or characters or text.

We already tried the standard LCD library, then also the Fmalpartida one, but we have no results.

Is the resistor really the problem? Does it affect the contrast which might be zero now, without it?

Thanks a lot for any kind of help, we would really appreciate.

I can't read Italian but it appears that you provided more information when you posted in the Italian section of the forum than you did here and it looks like you got some answers as well.

If you still have a problem then let us know what LCD you are using, what code you are using, etc.

Aa far as the contrast is concerned your display will typically be blank if you do not connect pin 3. You must connect either a potentiometer as shown in most datasheets or a resistor as your 'official scheme', whatever that is, indicates. Many devices work acceptably with pin 3 connected to GND but few or none of them work with the pin left disconnected.

Don

ItalianBiker:
We connected every single pin between the LCD and the Arduino, following the necessary scheme correctly.

You only need connections to four data pins - the other four are left unconnected.

ItalianBiker:
We just miss a resistor between V0 and ground, as asked by the official scheme, though we think it might not be the actual reason of our problem.

Might not?

It is the total reason for the display not working. If you do not connect it, you will never get a display (though the LCD controller is getting all your information). As an approximation, connect it to ground. Try connecting to ground via a 470 ohm or 1k resistor to see if it works better that way.

floresta:
I can't read Italian but it appears that you provided more information when you posted in the Italian section of the forum than you did here and it looks like you got some answers as well.

If you still have a problem then let us know what LCD you are using, what code you are using, etc.

Aa far as the contrast is concerned your display will typically be blank if you do not connect pin 3. You must connect either a potentiometer as shown in most datasheets or a resistor as your 'official scheme', whatever that is, indicates. Many devices work acceptably with pin 3 connected to GND but few or none of them work with the pin left disconnected.

Don

Posting in the Italian section I provided the same information, more or less, I just omitted the doubt about the resistor because we tried to put the resistor in the meantime and the problem didn't change.

We're using the following LCD:
http://www.amazon.it/COLEMETER-HD44780-DISPLAY-RETROILLUMINA-Elettronica/dp/B00CHG0B4K

And we're using the basic sketch "Hello World!" which should be working. As I said we tried both libraries.

We then tried to connect several resistors of different ohms, the contrast actually changed but still no text at all on the screen.
About the pin 3, I don't know why you mentioned that specific one, but if the scheme wanted to connect that, we did it.
I'll let you know with certainty later on, just let me check if we connected it to GND.

Thanks!

Paul__B:
You only need connections to four data pins - the other four are left unconnected.
Might not?

It is the total reason for the display not working. If you do not connect it, you will never get a display (though the LCD controller is getting all your information). As an approximation, connect it to ground. Try connecting to ground via a 470 ohm or 1k resistor to see if it works better that way.

Of course we didn't connect all the pins. We connected all the pins that were requested by the scheme.
I still think the resistor isn't the problem. Note that I don't wanna be disrespectful, but we then tried different resistors to ground and still didn't see any text in any case.

Let me know if I need to provide further information in order to make you help us.
Thanks a lot guys!

Posting in the Italian section I provided the same information, more or less, I just omitted the doubt about the resistor because we tried to put the resistor in the meantime and the problem didn’t change.

I didn’t see this in your original English post.

We’re using the following LCD:
http://www.amazon.it/COLEMETER-HD44780-DISPLAY-RETROILLUMINA-Elettronica/dp/B00CHG0B4K

And we’re using the basic sketch “Hello World!” which should be working. As I said we tried both libraries.

I assume that ‘the scheme’ refers to this tutorial → http://arduino.cc/en/Tutorial/LiquidCrystal.

You mentioned trying ‘both’ libraries. You must be sure to delete, rename, or move the library that you are not intending to use.

Here is my generic step by step approach that should work:

(1) If the module has a backlight then get it working properly. This involves only pins 15 and 16 on most LCD modules. Make sure to use a current limiting resistor if there is none on the LCD module.

(2) Get the power and contrast working properly. This involves only pins 1, 2, and 3 on most LCD modules. You should be able to just barely see blocks on one row of a two row display and on two rows of a four row display.

NOTE: The Arduino has not been used yet, except as a possible source for the power needed for the first two steps. Do not try to go any further until this is working. If you don’t see the blocks then no amount of program code will help.

(3) Connect the LCD R/W pin (pin 5) to GND.

(4) Connect the six control and data wires between your LCD module and your Arduino.

(5) Upload your sketch and it should work.

Troubleshooting:

If you have a 16x1 display and there are blocks only on the left half of the row in step 2 then use

lcd.begin(8, 2);

in your sketch.

If you still don’t get a display then make sure that your wiring matches the numbers in the descriptor (or vice versa).

//LiquidCrystal lcd(RS, E, D4, D5, D6, D7);
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);      // put your pin numbers here

If you get a display but it is garbled or has some other problems then try again with a ‘static’ sketch, one that displays a simple message on the top row of the display and then stops. All of your code should be in setup() and loop() should be empty between the brackets.

#include <LiquidCrystal.h>

//LiquidCrystal lcd(RS, E, D4, D5, D6, D7);
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);      // put your pin numbers here

void setup()
  {
  lcd.begin(16, 2);                          // put your LCD parameters here
  lcd.print("hello, world!");
  lcd.setCursor(0,1);
  lcd.print("it works!");
  }

void loop()
  {
  }

If you are still having problems then we need to see a photograph of your setup that clearly and unambiguously shows all of the connections between your Arduino and your LCD module. We also need a copy/paste version of the code that you are actually using, not a link to the code that you think you are using.

Don

Thank you very much for all the details in your message. We tried, once again, to follow step by step your approach but, guess what?, it still doesn’t work. It’s kinda funny yet aggravating hahaha.

We know it’s not a contrast issue since we can see the blocks, as expected from the contrast.

We just probably need to check that the data flow through the data wires. Our tester shows a voltage on the ends of the LCD and GND, but how can we make sure the current of the data wires reaches the LCD?

Anyway, here you can see the pictures of our situation, and the code we used (copy/pasted to be as accurate as possible).

/*
  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(16, 2);
  // 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 hope the information I gave is enough. All this is so weird to us!

P.S.: The thing about the resistors happened after posting in English, that’s why I couldn’t mention that :slight_smile:

It looks to me like there is a short between RS and RW.

There was a little piece of tin between RS and RW. We removed it and nothing changed.
We also tried again and again every connection with the tester but it says it's all right...

What is that Fritzing diagram supposed to represent? It doesn't match the constructor in the code you have furnished and it only shows three data lines instead of four.

Your soldering job is horrible. Take a look at this: --> Common Soldering Problems | Adafruit Guide To Excellent Soldering | Adafruit Learning System
Don

Sorry the Fritzing scheme I posted is wrong. It's the first version we made and we had to do it again - in fact in the picture you can actually see 4 data wires.

But at least you can see how we connected the wires in the pictures.

Do you think all the problem is because of the soldering? We're not experienced in soldering so we understand it's not a great job. Do you think it's gonna work after solving the soldering problems?

You could also have a bad wire. The inexpensive jumper wires are sometimes defective. Have you tested for continuity from the unsoldered end of the jumper wire to the solder blob on the display? There is a slight possibility of a problem with an Arduino pin, and you might want to change your constructor and move the wires to the new pin settings.

Were you able to solve this problem?

I also 2x16 lcd display does not want to do anything
These two display just purchased farnell.com

MC21605C6W SPR-LCD, 2X16, STN, REFLECTIVE, 5MM 85312095

MC21605H6W-SPTLY LCD, 2X16, STN, LED B / L, BLK ON Y / GREEN 85312095

attach to the arduino uno, like the previous one, which functions properly
MC21605H6W-SPTLY LCD, 2X16, STN, LED B / L, BLK ON Y / GREEN 85312095

Indulis

sorry for panic
I solved all with 10 Kom potentiometer from pin 3.
Indulis

@Indulisap
It looks like the first two replies had your answer.

Don

I wish our problem was easier. I still believe it's not a resistor issue since we tried even big numbers, which actually changed the contrast, but didn't make anything appear on the screen but the blocks.

I guess our next steps will be to buy a 10kohm potentiometer, just to try, and a new LCD. Maybe the problem is the LCD itself.

ItalianBiker:
I guess our next steps will be to buy a 10kohm potentiometer, just to try,

You can try it, but it is a waste of time - you only ever need the series resistors.

The common use of 10k potentiometers is an interesting phenomenon. The original datasheet for the HD44780 showed such a potentiometer in the “examples” section and this has blindly been followed in all successive publications. The only particular reason for continuing with a potentiometer of that value and wired as such, is that it happens to be a commonly available value. A 1k potentiometer wired as a variable resistor from Vo to ground is in fact, a more useful approach being as effective as a 10-turn 10k pot which is only ever used for one tenth of its range at the “ground” end. :smiley:

By all means get another display. If you are going to experiment, you always want more than one of each part anyway. We are keen to hear how you go, but it is almost certain that there is some simple blunder present that is not readily apparent in the photographs (which I admit, I have not yet examined closely).

Paul__B:
it is almost certain that there is some simple blunder present that is not readily apparent in the photographs (which I admit, I have not yet examined closely).

You have your VDD from pin 2 of the LCD plugged into 3.3V on the Arduino instead of 5V.

Paul__B:
You have your VDD from pin 2 of the LCD plugged into 3.3V on the Arduino instead of 5V.

We tried that too, but it didn't work as well...

ItalianBiker:
We tried that too, but it didn't work as well...

That does not actually quite make sense. :smiley:

We tried to plug what you said into 5 V, but it didn't make any difference. That's what I meant.
You said that we needed to plug pin 2 into 5 V instead of 3,3. We did that and nothing changed.