ERMSYG-2 is lcd module 20×4 display datasheet character,wide temp, yellow green led backlight,stn lcd,3v/5v power,parallel interface,hd or. · Fax · · [email protected] LCD MODULE 4×20 – mm WITH LED BACKLIGHT Y/G. This is a basic 20 character by 4 line display. Utilizes the extremely common HD parallel interface chipset (datasheet). Interface code is freely available.
|Published (Last):||12 October 2009|
|PDF File Size:||3.29 Mb|
|ePub File Size:||9.17 Mb|
|Price:||Free* [*Free Regsitration Required]|
Out of boredom I figured out I’ll write a library from scratch to interface the character LCD display which I got from ebay, quite cheap. Less than 7 pounds. So I have some experience and understanding how the character LCD works.
The difference now will be, I’ ll be using 4 bits, instead of 8 bits to communicate and read the busy flag. Essentially improving the previous code. I chose to write it for Arduino this time, because I have Sanguinololu bought for my 3D printer, and at some point I want to write a LCD user interface for it, from scratch. There won’t be anything spectacular about this tutorial, there are already good articles about this stuff for all kinds of devices.
Moreover, arduino has bunch datqsheet LCD libraries dataeheet for download for free. If you are a careful reader you would notice, that the LCD in the circuit diagram is 16×2 instead 20×4 like in title. That’s because in eagle by default I couldn’t find one with 20×4. However, most of the displays will use HD as LCD controller, so if you understand how to use a 16×2 or 20×4 display or darasheet character display with this chipset, you should be able to cope with any sized character LCDs.
20×4 Character LCD Display
Even the pins are the same for these displays. NC pins normally are back-light. The addresses, initializations etc. One thing I want to teach beginners is to read datasheets, in my 02×4 very valuable skill to have.
Even though the HD datasheet is not the best ones I’ve read, I’ll try to fill in the gaps. So first thing we want to do is to understand the functions of the PINS. For original description please refer to page 8 in datasheet.
Instruction register for write Busy flag: Data register for write and read. Four high order bidirectional tristate data vatasheet pins. DB7 can be used dataeheet a busy flag. I will elaborate on the pins as we go on. The main thing is to understand briefly more or less what they are for. Even though when we will be reading the instruction sheet, you’ll see that the datasheet already provides which control pins you have to set HIGH and which LOW.
So don’t worry about it so much. IR – instruction register; DR – data register. As the names already suggest instruction register will be accessed for configuring and writing instructions to the LCD. DR register on the other hand will be used for writing the data you want for the display to show not exactly accurate.
DDRAM is used to temporary store the characters the display will show. DDRAM stores the characters, how they will be drawn, depending on the code page Actually, that would be a good homework. Try to read the datasheet and improve my code to support custom characters.
It’s not that hard believe 200×4. Basically a busy flag is an indicator that the data from DR register is dahasheet written to one of the RAMs.
You don’t want to change your data until it has finished writing it to the LCD. Otherwise the data 02×4 be corrupt and you end up showing Japanese characters maybe. Basically the pin D7 is the busy flag, while it logic HIGH it means the data is ocd written to the LCD, when it’s 0 obviouslly it’s not busy anymore. Address counter is basically a register, which specifies which block of RAM you want to either datashee or write to the LCD.
While configuring the device, we will be able to set AC to be incremented or decremented automatically, so for most cases you won’t need to worry about it. Until we get to assigning coordinates where the text should be written. If you missed it, datasheeg for storing the data which is currently displayed on the LCD. But there is one important thing which I want to elaborate on, I even got confused on this matter. Basically the datasheet will tell you that there it dataxheet two modes 1-line display and 2-line display.
It’s because eatasheet LCD actually acts as 2-line display, to make it more confusing they alternate. See the picture below:. At the end of 3rd line on real display. I don’t want to elaborate more on these confusing lines, just see the picture below with the starting addresses of each line:. So how did I come up with those numbers.
I2C 20×4() LCD Display for Arduno – DFRobot
We know that HD can hold up to 80 characters in DDRAM, also we know that 1st line and 2nd line acts as a single 40 character line. It means that when we write 20th character on line 1 it will be 3rd line on the real device. Then just by adding 20, we can get each of the starting addresses. You should now have an intuition of how the data is passed around and how it is stored.
Believe me it’s not that hard. First thing we want to do is to initialize the display. Please see the Figure 24 on page 46 in datasheet. It has a nice diagram for the initialization. As you can see in the diagram above, after we have initialized 4 bit mode, the following data will be sent in two blocks.
I will elaborate how to do it later on, but for now think of them as a single byte. For example, function set will be NF In function set we basically configure how many line the display has and the size of the character blocks. You will just have to take my word. Please refer to page 28 in datasheet. As you can see it has 3 bits called D, C and B.
Those are for configuring the things I mentioned before. But for initializition, we just turn off the display. Final step you have to take to initialize the display. Basically in entry mode you configure whether the address counter AC will increment or decrement automatically and whether the display will shift instead of the cursor. If you want to know exactly how you can configure them, refer to page 26 in datasheet. Which means, AC will be incremented automatically and the display will not be shifted.
At this point we kind of have initialized the display, however we have to turn on the display. And if you want for debugging or any other reason, you can enable now the cursor and the blinking of the cursor as well. In my case I just enabled the display, I don’t want to see the cursor. Taking account all my preferences I have to send this byte: So now we know exactly what we have to do to initialize the LCD.
I think it’s time to write a simple function to do it. You probably noticed I’m using some new functions. Both of those we have to write on our own. I couldn’t figure out how to merge with 4 bit function, because it is slightly different.
Anyway, remember at the beginning I was describing how the data is sent to the HD Just enable the pins D7-D4 pins accordingly, either wait for busy flag or for couple ms.
Taking into account what I now said, we can construct a simple code for sending a byte. Now we have to construct a function which will allow us to send a byte in two blocks. Important is to remember what is shown in figure 9 on page It has to be twice, since we are sending the upper bits and the lower bits.
Remember, I was writing that you have to wait until the data is written in the RAM, either you substitute the lcdBusy function for something like delay 1 or let’s write a function for checking the busy flag. See page 24 in datasheet, what command we have to send to read the busy flag, and which bit we will have to read.
Another thing, because we are using 4 bits, we have to trigger the enable pin to read the upper 4 bits and then lower 4 bits. Basically those are all the necessary functions to communicate with the LCD. Now just to simplify our life, we can write a function to send string of characters automatically. I like to send a pointer to the string of characters and then just increment it until we reach the end.
Just see my code you’ll understand. Now you should be able to send text in a very user friendly manner. It probably would be a good idea to implement a way to move the cursor around the screen.
Okay, now we have the ability to move the cursor by specifying it’s address. However, it is not very user friendly, it would be easier for a programmer to be able to write XY coordinates rather than CGRAM address. So let’s make a coordinate mapping function. I wrote a simple class like library for the arduino. You can see it below:.