LCD given up the ghost?

Hi all,
I am new here, please don't be too mean :stuck_out_tongue:

Anyway, I got my LCD (http://www.coolcomponents.co.uk/catalog/blue-16x2-display-p-151.html) out of the drawer earlier, I had header pins soldered in for bread-boarding and wanted to switch back to flying leads ready for installing it in a project.

Connected it up to the Arduino for a test run and flashed the 'Hello World' LCD example, and I get nothing on the screen.

I've double and triple checked the connections and everything is wired up as it should be.
I can adjust the contrast until all characters go white.
There's just no display.

My main question is has anyone had this happen to their LCD? If I can confirm it is dead before spending a few hours trouble shooting that would be great, haha :slight_smile:

Thanks for taking the time to read this, I hope someone has some suggestions!

dean8020

Well it looks like a pretty standard display so I guess you get the standard answer.

Since all you did was change the connections, from breadboard pins to wires, then it is these connections that are suspect. Without a good photograph that shows your connections I can only guess at the problem.

With only the power, contrast, and backlight connections made you should vary the potentiometer and see what happens. At one extreme the display should be blank. At the other extreme you normally see only one row of blocks, but with some displays you will see blocks in all 32 character positions. You should be able to adjust the potentiometer until you see just the top row of blocks.

With that part working you should then connect your LCD module to the Arduino and try out a sketch. Don't forget to connect pin 5 of the LCD to ground.

Don

Hi,

I can indeed vary the pot and go from blank, through one row of blocks to two rows of blocks.
http://www.obr-recording.co.uk/Arduino/IMAG0219.jpg
http://www.obr-recording.co.uk/Arduino/IMAG0220.jpg
http://www.obr-recording.co.uk/Arduino/IMAG0221.jpg

And the connections are here:
http://www.obr-recording.co.uk/Arduino/IMAG0222.jpg

The insulation is a little chewed as I went through and re-flowed all of the joints just in case (it hasn't helped).

I have pin 5 (R/W) grounded, though on my data sheet it is R/!W [H: Read (MPU->Module) L: Write (MPU<-Module)]
It did used to work wired up as standard though so I doubt it is that, and tying it high doesn't help either.

Dean

Without a good photograph that shows your connections I can only guess at the problem.

Let me rephrase that. Without a good photograph that unambiguously shows all of the connections between your LCD module and your Arduino I can only guess at the problem. You should also post a copy/paste version of the code that you are using.

I have pin 5 (R/W) grounded, though on my data sheet it is R/!W [H: Read (MPU->Module) L: Write (MPU<-Module)]
It did used to work wired up as standard though so I doubt it is that, and tying it high doesn't help either.

I don't think you have interpreted the datasheet correctly. When you to send information to the LCD module you are writing and when you retrieve information from the LCD module you are reading. The current LiquidCrystal library has no provisions to read from the module, it only writes to it. The RW pin must always be low.

Don

Hi,
With the data sheet, it was the Write: MPU <- Module that threw me.

Anyway
http://www.obr-recording.co.uk/Arduino/IMAG0223.jpg

Being on flying leads its a bit of a mess, so i'll list out the connections with wire colours to make it easier to trace across the picture.

LCD Pin LCD Colour Arduino
1 GND Black Gnd
2 Vcc Pink 5V
3 Vo White Pot Wiper
4 Rs Green 12
5 R/W Yellow Gnd
6 E Purple 11
11 D4 Grey 5
12 D5 Grey 4
13 D6 Grey 3
14 D7 Grey 2
15 Backlight + Blue 5V
16 Backlight - Blue Gnd

Also the pot is across 5V - Gnd

None of the Grey data wires cross over in the picture Left stays left, Right stays Right.

Sorry it's such a mess.

Dean

Sorry, Forgot to paste the code.

/*
  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);
}

What do you have to say about the note in the box on page 18 of the datasheet?

Don

I would have to say I overlooked that part,
Yes, even though it tells me to have a look on the pin out table.

Though I assume its a standard LED in the backlight, so given that it still works it hasn't gone pop. At most I have probably taken a load of hours off its life time.

Thank you for pointing this out though so I could rectify the situation :slight_smile:

Are you also saying that you think this may be the reason for the whole thing not functioning??

Dean

Are you also saying that you think this may be the reason for the whole thing not functioning??

It's a possibility. Without a series resistor the LEDs were trying to draw an excessive amount of current. Hopefully the regulator in your power supply just dropped the voltage to the point where it was not being overloaded and therefore caused the LCD controller to stop functioning.

Try putting a resistor in series with the backlight and see if it works.

Don

I've put the series Resistor in (82R) data sheet says minimum 68R as the LED is 3.3V.

Still no joy.

Dean

I think that you should pull all of the wires out and start over again. Get the backlight functioning first (pins 15 and 16). Next add the controller and display power (pins 1, 2, and 3) and adjust the contrast until you can just see the single row of blocks. Finally connect the other seven LCD connections, six to the Arduino I/O pins and RW to ground. You could take a look at Lady Ada's tutorial (Arduino Tutorial - connecting a parallel LCD), but that's basically what I outlined above.

You might want to try some different I/O pins and a simpler sketch as well.

#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);                          // this will work for all displays except some rare 16x1's
  lcd.print("hello, world!");
  lcd.setCursor(0,1)
  lcd.print("it works!");
  }

void loop()
  {
  }

Don

Check your 3-way and 4-way junctions with ohmmeter to make sure what are under the heat shrink wrap is well connected. If your rw is not connected to ground (I have to assume it is since it goes into a four way junction under wrap), then the initialization sent from Arduino is not received and you have the boxes on screen.

Don, I was reading the doc, it mentioned db0-7 and rw rs have certain mos pull up current on page 48. Does that mean when disconnected they are all internally pulled up?

Don, I was reading the doc, it mentioned db0-7 and rw rs have certain mos pull up current on page 48. Does that mean when disconnected they are all internally pulled up?

It could be interpreted that way. It also could be interpreted as a desired pull-up current to be implemented by an external resistor. I think your interpretation is more likely to be correct since the values on that page are labeled as 'characteristics' of the device as opposed to 'ratings'.

Don

Hello,

I decided to start over, and do it all step by step. So I have followed Lady Ada's tutorial to the letter.

First I swapped back to breadboard pins to make everything a bit easier to see.

Step 1: The Backlight
http://www.obr-recording.co.uk/Arduino/01.jpg

The resistor is 510R (the tutorial didn't mention on and said to connect straight up, but I heeded the warning from earlier).

Step 2: Contrast Pot and Logic power
http://www.obr-recording.co.uk/Arduino/02.jpg

As it turns out, while I typed this I had a look at the pot and it's 100k rather than 10k. But as it's providing a reference voltage not resistance this doesn't matter?

Step 3: Data lines, including RW to ground.
http://www.obr-recording.co.uk/Arduino/03.jpg

Step 4: Sketch

#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);                          // this will work for all displays except some rare 16x1's
  lcd.print("hello, world!");
  lcd.setCursor(0,1)
  lcd.print("it works!");
  }

void loop()
  {
  }

I used the simplified code you suggested.

and the result:
http://www.obr-recording.co.uk/Arduino/04.jpg

Still nothing...

Dean

In your void loop add a "heartbeat" to show that the arduino is indeed runnning- say like blink the led every second or do a serial print .

The datasheet for that panel might have the R/W a little mixed up too.

Added the code to make the on board LED flash:

#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()
  {
  pinMode(13, OUTPUT);  //SM LED pin
  
  lcd.begin(16, 2);                          // this will work for all displays except some rare 16x1's
  lcd.print("hello, world!");
  lcd.setCursor(0,1);
  lcd.print("it works!");
  }

void loop()
  {
    digitalWrite(13, HIGH);
    delay(500);
    digitalWrite(13,LOW);
    delay(500);
  }

and it flashes.

Dean

Have you tried it with RW high just in case their datasheets are actually correct (in which case it would be their modules that are exactly backwards from all others in the known universe).

Don

Also, you could try some pressure on the frame surrounding your LCD glass. We have seen some cases lately where that has been a problem, although the symptoms are typically a really messed up display instead of no display at all.

Don

Yes, I have just tried tying it high again, and there is no difference, exactly the same symptoms. It would be quite ridiculous if it were backwards though, a sure way to reduce your potential market.

I have also tried pushing on it, but nothing.

I have ordered myself a new one, so I will be able to check the ardunio is happy when that arrives (found some for £2.89!! :slight_smile: ) but that will be a few days, and it would be a shame to throw this one out if it is something cure-able.

It does look like your wiring is ok so what to do? If it was me I would try another plan of attack with more control on my part.

Have not looked at how the 4bit is done in the library but it has been done in stand alone code. Search the playground (I just googled arduino 4 bit lcd) and load one that you find. Will need a little moding for the pins. In the code you will see how the pausing is done between commands (especially in the intializing stage). It will not hurt to crank those values up to slow things down between writing to the LCD.

I mainly do assembly for a hobby ( Arduino does make it too easy) but in my routines I wait for a little bit (the LCD is trying to intialize itself when first powered up) then I bang the initialize command 3 times in a row then the 4 bit command all with nice delays. With the stand alone code you can play with it (the delays and the sequence of commands).

As an alternative you can try it in the 8bit mode just to throw at it what you can while you are waiting on the new one.