Go Down

Topic: 1602 LCD Dispaly dont work (Read 2 times) previous topic - next topic

mato96

Hi all,I have arduino uno and I have problem with 1602 LCD Dispaly (16x2).I tried lot of source codes but my display make only this (nothing more) http://www.ladyada.net/images/arduino/lcdtut/contrasttest.jpg it's not showing text or numbers.

My connection of LCD:
LCD                       Arduino

1                           GND
2                           5V
3                           potentiometer(middle)
4                           Digital 12
5                           GND
6                           Digital 11
11                         Digital 5
12                         Digital 4
13                         Digital 3
14                         Digital 2
15                         5V
16                         GND                 

liudr

Need a high res picture and code you used.

dc42

1. Don't connect pins 15 and 16 directly to 5v and ground unless you know for sure that your lcd display includes a series resistor for the backlight. I have used 2 different sorts of these display, and both needed a series resistor.

2. I found that I needed the pot set almost at one end to see anything.

3. You need to post the code for your sketch if you want help fixing it.
Formal verification of safety-critical software, software development, and electronic design and prototyping. See http://www.eschertech.com. Please do not ask for unpaid help via PM, use the forum.

floresta

The fact that you is getting the row of blocks indicates that your display is powered and the contrast voltage is close enough to be usable.  If you are following the rest of the LadyAda tutorial then be aware that she is using different Arduino pins than those used in the Arduino tutorial.  Did you see this part:

Now we'll need to update the pins. Look for this line:
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
And change it to:
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);
To match the pin table we just made.


Don


mato96

My code:
Quote
#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);
}


It display only some characters:


I have some table on the back side of display:
  1     2    3   4   5   6  7   --  14  15    16
GND VVD VO RS RW E  DB0--DB7   BL1  BL2

jrraines

I have trouble following all the wires and am never as good at that as Don and John, but it looks to me like the blue wires from Arduino pins 11 and 12 go to DATA pins, not RS and EN control pins--ie in this line
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
the 5 and 3 should be 12 and 11. That makes me think the rest of them are probably also goofy.

mato96

Sorry if I misunderstood you, but blue wires from Arduino pins 11 and 12 go to E and RS.
And Digital pins 5 and 3 from arduino go to 11 and 13.

dc42

You need a delay call in loop(), e.g. delay(200). Otherwise it will print characters so fast that they will never stabilise.
Formal verification of safety-critical software, software development, and electronic design and prototyping. See http://www.eschertech.com. Please do not ask for unpaid help via PM, use the forum.

mato96

I tried it but not change. (I think that hello world should show nevertheless).

floresta

#9
Oct 08, 2011, 04:06 pm Last Edit: Oct 08, 2011, 06:09 pm by floresta Reason: 1
Quote
You need a delay call in loop(), e.g. delay(200). Otherwise it will print characters so fast that they will never stabilise.


No one else has ever needed this delay in all the years that this tutorial has been in existence.  The values only change once per second.

My own opinion is that the tutorial sketch is inappropriate for a beginner to use to check out their LCD.  There should be different static information written to each line of the display in setup() and loop() should be empty.


Code: [Select]
#include <LiquidCrystal.h>

//LiquidCrystal lcd(RS, E, D4, D5, D6, D7);
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);

void setup()
 {
 lcd.begin(16, 2);
 lcd.print("hello, world!");
 lcd.setCursor(0,1)
 lcd.print("it works!");
 }

void loop()
 {
 }


I don't see any connections to your backlight.  Some displays are not visible without the backlight on, but if you are seeing the row of blocks this is not your problem.  I suggest going back and starting again.  Use the connections that LadyAda suggests, it results in a much neater setup which is harder to mess up and easier to troubleshoot.

Don

dc42


Quote
You need a delay call in loop(), e.g. delay(200). Otherwise it will print characters so fast that they will never stabilise.


No one else has ever needed this delay in all the years that this tutorial has been in existence.  The values only change once per second.



The 16x2 LCD I used in my last project definitely need did periods when it wasn't being written in order to show steady characters, even if I was refreshing it with the same data all the time. Otherwise the display flickered, with bands appearing across it. I added a 200ms delay between refreshes and the problem went away.
Formal verification of safety-critical software, software development, and electronic design and prototyping. See http://www.eschertech.com. Please do not ask for unpaid help via PM, use the forum.

dc42

Your wiring and pin numbers in the lcd(...) call look OK to me, as far as I can tell from your photo. However, it looks like you have not soldered the connections to the LCD - or are they soldered on the other side? If you are using a row of header pins sitting loosely in the holes in the LCD board and not soldered, that may not give you reliable connections.
Formal verification of safety-critical software, software development, and electronic design and prototyping. See http://www.eschertech.com. Please do not ask for unpaid help via PM, use the forum.

floresta

Quote
The 16x2 LCD I used in my last project definitely need did periods when it wasn't being written in order to show steady characters, even if I was refreshing it with the same data all the time. Otherwise the display flickered, with bands appearing across it. I added a 200ms delay between refreshes and the problem went away.

This will happen if you are clearing the display before writing the new data but may not happen if you just overwrite the old information.

Quote
However, it looks like you have not soldered the connections to the LCD...

Good catch.

Don

dc42

#13
Oct 08, 2011, 04:20 pm Last Edit: Oct 08, 2011, 04:24 pm by dc42 Reason: 1

Quote
The 16x2 LCD I used in my last project definitely need did periods when it wasn't being written in order to show steady characters, even if I was refreshing it with the same data all the time. Otherwise the display flickered, with bands appearing across it. I added a 200ms delay between refreshes and the problem went away.

This will happen if you are clearing the display before writing the new data but may not happen if you just overwrite the old information.


I was not clearing the display between refreshes, and it happened anyway. I was making a call to enable a blinking cursor, but the same call with the cursor in the same position each time. Maybe the problem doesn't occur if you have the visible cursor turned off.
Formal verification of safety-critical software, software development, and electronic design and prototyping. See http://www.eschertech.com. Please do not ask for unpaid help via PM, use the forum.

liudr

I guess OP didn't solder on either side. If back side is soldered then the solder will come through and show up on the front side. So solder everything and use code in reply #9.
The left arrow character is 127 so I suspect the rs and en lines had contact but the data lines are all too loose and produced 127.

Go Up