Beginning LCDs

70K31583

Intro: Beginning LCDs

NOTE: I finally got my camera figured out so there should only be 1 or 2 blurry images. On with the Instructable!


LCDs are one of the coolest things to add to any project right now. You can use them to display things from the speed of your bike, to the amount of room being used up on your RAM. This Instructable will give you a general description on how LCDs work, and how to get started using them. The information provided here will give you enough information to even develop control circuits on any Microcontroller. LCDs are a lot simpler than you think!

STEP 1: How They Work

Most LCDs have a HD44780 LCD driver in them. The HD44780 is the most common LCD driver and is very easy to connect to. A LCD with this driver typically has 14 or 16 pin, with the first being ground and the second being 5V+. This is the only LCD type I will cover today being it is so common. Very common. LCDs of this type are parallel devices. That means that 8 bits of data are sent side by side (or parallel to each other) instead of in line. This is also the way parallel printer ports work which is why it such a popular decision to connect a LCD to a parallel port. Data is sent to LCD screens in a kind of 8-bit Binary ASCII code. For example: 01000001 translates to a capital a. 01000001=A. There are special symbols too like: 11110100=the Pi sign. In the instance of HD44780 driven LCDs, the first bit of data is the 14th pin and the last bit of data is the 7th pin. Unless you haven't figured it out already, this means that building a test rig, or interfacing to a microcontroller would be very simple.

STEP 2: Building a Test Rig

Based on the previous information, I will show you how to make a very simple manual LCD test rig that allows you to enter text and symbols which in turn teaches you exactly how they work. Below is the schematic. The jumpers (switches 1-8) have pull-up resistors so that a missing jumpers gives a logic 1 or high.

Parts:

printed circuit board with individual contacts
10 4.7k resistors
14 wire ribbon cable
any wire to use for wire jumpers
10k potentiometer
pushbutton momentary switch
2x8 jumper assembly (an eight switch DIP switch would be better. I recommend that actually)
8 jumpers
SPST switch
1 wire for power and 1 for ground to your LCD
LM7805 5v DC regulator (or other 5v regulator)
2 small alligator clips
9V battery clip
9V battery

Optional if you have an LCD wired to a male parallel port:

female parallel port

Tools:

Soldering iron
Solder
Electrical tape
Nippers
Wire strippers
Helping hand (optional but very useful)

STEP 3: Wire the Jumpers

Solder your jumper assembly to the board leaving a little bit of room for other components. Solder together the first line. This will be you ground line.

STEP 4: Add the Switches

There are 2 switches in this testing circuit. The first is a SPST switch connected to the Register Select line of the LCD. This switch is used to tell the LCD whether you are sending a command or a character signal. The second is a momentary switch connected to the Enable line. This switch is used tell the LCD to accept the command. Both switches will have pull-up resistors.

STEP 5: Resistors

Each jumper and each switch has a 4.7k pull-up resistor. This is so that any closed circuit through a jumper or switch generates a logic 0 (or low). leave a space between each switch/jumper and its resistor. This space is where you will put your ribbon cable connecting the LCD. One side of the line of resistors should be connected together. This will be the positive rail.

STEP 6: Contrast and R/W

On my LCD I have already wired it up for parallel connection, so the contrast adjustment is on the screen. If your LCD is not hooked up to anything, this potentiometer is here to adjust the contrast. I have no completely wired it as I have no use for it as of yet, but here is how it goes together. The slider pin should be connected to the wire that will go to pin 3 of the LCD. The other two ends should be connected to 5V+ and Ground. OH yeah, the potentiometer is 10k. The only reason I used a slide potentiometer is because I liked it. You can use a rotational one. Lastly, the R/W connection will be connected to ground, so ad a jumper wire from the ground rail for the pin 5 R/W line on the LCD.

STEP 7: Power

Now for the power. LCDs of almost every kind run off five volts DC. for convenience, we will use a 9 volt battery. Solder the ground wire of the 9V battery clip to the ground rail by the jumpers, solder the positive wire a little distance away. Solder the left pin of the 5V regulator (input pin) to the positive wire from the battery clip. This should be the only connection to the positive battery clip wire. Solder a jumper wire from the middle pin of the regulator (ground) to the ground rail. Next solder a jumper wire from the right pin of the regulator (output) to the positive rail. Now it is time to build the alligator clips. solder one clip to the wire for positive and the other to the wire for ground. I mentioned these wires in the parts list. They have nothing to do with the battery clip. solder the positive wire to the positive rail and the ground wire to the ground rail. You will use these alligator clips to power the LCD screen. If you like you could send the power over the ribbon cable to the LCD. Pin 1 on the LCD is ground and pin 2 is Positive. Some LCDs have a 2x7 or 2x8 connection (depending on whether you have a 14 or 16 pin model). You can identify pin one simply since it its ground. It will generally have a thicker PCB trace and connect to the metalwork at some point.

STEP 8: The Connector

Since my LCD is wired to a male parallel port connector, I had to connect my ribbon cable to a female parallel port connector. If you are wiring directly to the LCD, pin 14 will be connected to the first jumper and pin 3 to the contrast. Pin 1&2 will be connected to power. look at the schematic for details. The reason we made the whole thing backwards (if you look at the location of pin on on you LCD which is generally the left pin) was so that when we send signals, we are making them the right way around. Pin 7-14 on the LCD are actually what is backwards. If you want to connect your LCD to a parallel port, you will have to follow the below schematic for this. The schematic is a back view of a male parallel port connector. The connections from the tester to the female parallel port is a mirror image. Either way you connect your LCD, this part is necessary. That space between the resistors and the jumpers/switches is where you will connect the ribbon cable. Pin 14-7 connects to the jumper spaces, Pin 6 to the momentary switch space, and pin 4 to the SPST switch space. Pin 5 is connected to ground, and pin 3 is connected to the slider pin of the potentiometer. IMPORTANT: Those space must be filled in! the jumpers/switches and according ribbon cable wires and resistors should all be connected as one.

STEP 9: Finished Test Rig

That's it! You got it built. Go on to the next step to learn how to use it.

Update 06/13/2008: I added some pictures of a miniature LCD tester that fits in an Altoids tin. This tester has no contrast control. I will simply solder contrast to ground during tests.

STEP 10: Using the Test Rig

As I mentioned in step one, LCDs use a 8-bit ASCII code. To use this tester, first connect the LCD and then the power. Oh no it's broken! There's a bunch of black squares! Don't panic. Those square are supposed to be there, that means it's on. Those squares (technically rectangles but oh well) mean the LCD is on but not yet activated. To activate it we must send a signal that tells the LCD to turn on, give a cursor, and blink for good measure. How do we do that? Easy. First set the Register Select switch to Command mode (the switch is on/logic 1). This is so the LCD knows we are sending a command and not a letter(character mode). Now on the line of jumpers, any removed jumper represents a 1, and any connected jumper represents a 0. The code for what I described earlier is 00001111 (A full list of commands is below). So the first 4 jumpers should be connected. and the last 4 removed. Nothing happened. Nothing should have happened. You should still have black squares. Now you have to tell the LCD to accept the command. Sooo.... HIT THE BIG RED BUTTON!!! Okay, not really, but you can imagine. push the momentary switch. Hey, there's a cursor, now I want some letters. Alright, that's easy. switch the Register Select switch to character mode (the switch is off). Now will send the letter A in capital. The code for capital a (A) is 01000001. Move the jumpers accordingly and hit the button. Hey, Now there's a letter a. A full chart of letters and symbols is below. Play around a bit. The Upper bits are the left 4 jumpers and the lower bits are the right 4. When you fill up you screen, you will need to clear it. To do this, switch the tester to command mode and enter 00000001. This is the clear command. don't forget to hit the button! So now you have a simple controller for LCDs and abroader knowledge of LCDs. In the future, I may ad an update on making custom characters, but that's all for now. Hope this helped!
Attached are some videos of initializing, entering text, and clearing.

UPDATE 06/15/2008:
You might notice that several characters will pop up instead of one when the switch is pressed, to fix this, you need a Debounce circuit. This prevents this from happening by use of 2 NAND gates in a 74LS00 quad NAND gate and a SPDT switch. Below is the schematic.

As for the parallel port, try LCD Smartie. It is a great open source program with a lot of support and great forums. There is an attached video of me using it. The video opens with windows media player.




80 Comments

Good day Folks

Any idea on how to read data from a 2x16 LCD screen and display it on another screen.

I have a problem where I have a device that displays the room temperature, but it does not log the data, so now I want to read the data from that screen if possible (Cant see why not) Naturally if I can read it I can do with it what ever I want. I have tried to look for links etc, but had no luck.

Regards

No need for a debounce circuit. A transistor and 100 ohm resistor did the trick for me. I connected the output pin of a microcontroller to the base, wired one gate to the LCD's enable pin, and put a 100 ohm resistor between the last pin and ground.
Oh, and by the way, nice instructable. You really helped me figure out my LCD
Hi could you please advise using the following on how to connect the lcd as per pics.?
thanks
this is a v5 shield which is supposed to handle this.

http://cgi.ebay.com/ws/eBayISAPI.dll?ViewItem&item=150632164582&ssPageName=ADME:L:OC:US:1123

just not 100 percent sure on how to proceed!
Are you able to advise
thanks

There's an example picture of the hookup on that ebay page you posted,and example code on the manufacturer's website. The manufacturer's website says it uses I2C protocol (that's actually pronounced I squared C), which means addressing it should be pretty simple. There are plenty of tutorials across the internet in regards to I2C on the arduino.  Try starting off on adafruit's forum.
Thanks for your prompt input!

I had already tried the sketch from the mnfrs. site but get errors. The unit is connected correctly onto the board and I get a "blue lit' screen so that works. when you mention "addressing" should the original code registers ? this is the original code error.

I am fighting with this and have checked out all the I2C tuts...
much appreciated in advance any further input will be appreciated !
Did that come out of a PSP? If it did, you can find some information about those at Sparkfun.com. PSP screens are odd, they have a 24-bit interface.
how can i add bigger lcd to a mp3 modulators used in cars lighter socket? anybody has some idea?
My LCD has a backlight, but only 14 pins.  The model number isRT0802B, its got 8 characters per line, and 2 lines.
This is what the unit looks like on the bottom.  I'm not quite surehow the wiring is different on this one?  Can you help me out?

I have something similar.IF YOU ARE SURE that there is a backlight, try to find the power pins. I have some LCDs with seperate wires for the baclight. You will need a driver if it is the flourescent kind.
i <3 u!!!!!!!!!!!!!!i <3 u!!!!!!!!!!!!!!i <3 u!!!!!!!!!!!!!!i<3 u!!!!!!!!!!!!!!
That is so complicated O.o
Wait until I publish my followup with graphic LCDs. Then eventually, color serial graphic LCDs. LCDs are a fundamental part of any electronic hobby.
How can i use a computer keyboard to type on an LCD display?
Yes, but how? what code, serial inputs...?
that i'm not sure ask
klee27x, he is an experienced PIC programmer
mine is off a couculater and hase 28
Then it is just the LCD w/ no driver. Calculators have the LCD driver built into the main MCU.
Anyone know how to connect the LCD that's in a kodak easyshare c330? I've had this piece of crap camera for years, and it's been sitting in a drawer for half that (new camera!) It's a color AU a015an03 screen. I was trying to convert the camera to only see near IR/ IR. I put in the wrong filter (don't use floppies, they turn out very red, and it's quality isn't great.). I went in again, to take it out/wait for later, and broke a ribbon cable -.- so i salvaged parts (capacitors, etc) and the screen was one of the parts i took. :D
More Comments