Tuesday, January 22, 2013

EMBEDDED SYSTEMS TUTORIAL 9- INTERFACING 128X64 GRAPHICAL LCD WITH AVR

 Hi friends this time I am here with a very interesting embedded systems tutorial, as in last tutorials we learnt about 16x2 LCD interfacing but some times it seems vey difficult to display a huge amount of data on such a small space provided by 16x2 LCD , so there is the solution a powerful 128x64 GRAPHICAL LCD, with a lot of space and facility to display graphics along with alphanumeric data, in this tutorial we are going to learn how to interface a GRAPHICAL LCD with AVR. We  are going to discuss about a ks0108 based LCD interfacing.






What is required??

I am using a HQM1286404 LCD it’s a pretty old one and please don’t be mistaken with newer versions of LCD, if you are using any other version you have to find its datasheet for wiring connections because wiring connections may be different from version to version. I will provide connections for  HQM1286404 LCD only and its pretty hard to get accurate wiring connection , so better consult your datasheet and internet as well. Except this you will need a AVR MCU, I am using ATMEGA 8 here and of course an LCD library  you can find o many libraries on internet but I am giving a best link to download a very nice library written by Mr. Fabian Maximilian Thiele , thanx to him the link for this library is GLCD_LIBRARY

LCD PIN-OUT CONNECTIONS

Here is the correct pin-out of LCD:
1 Vcc
2 GND
3 VCON
4-11 DB0-DB7
12 CS2
13 CS1
14 RESET
15 R/W
16 D/I
17 EN
18 Vee out
19 LED Anode
20 LED Kathode
     

NOTE:- in some cases you will found that your LCD screen is swapped into two halves in such cases just swap the chip select pins and problem will be corrected...:)

LIBRARY USE

The library , which you have downloaded contains to files ks0108.c and ks0108.h  you have to copy these files and have to paste in the same folder wher .c file of your main program is contained and you have to add corresponding header files in the beginning of the program too like

#include "ks0108.h"
#include "ks0108.c"

the .h files contains the information about pin connection and commands you can easily change the connection pin and ports from there .
Getting familiar with commands is just a learning by doing thig more you do more you learn. Just go through  the library to know more about the command its self explaining.

Along with these library files some font files are also provided these fonts must be added by adding corresponding header file in beginning of the program.except these font you can fetch your windows font with the help of this java program GLCDFontCreator2

SOURCE CODE

here is an interesting source code to start with 

#include <inttypes.h>
#include <avr/io.h>
#include <avr/pgmspace.h>
#include "ks0108.h"
#include "ks0108.c"
#include "arial_bold_14.h"
int main(void) {
                   
                    // Wait a little while the display starts up
                    for(volatile uint16_t i=0; i<15000; i++);
                   
                    // Initialize the LCD
                    ks0108Init(0);
                   
                    // Select a font
                    ks0108SelectFont(Arial_Bold_14, ks0108ReadFontData, BLACK);
                    // Set a position
                    ks0108GotoXY(15,10);
                    // Print some text
                    ks0108Puts_P(PSTR("Tech_strong"));
                    // two little circles
                    ks0108DrawCircle(30, 30, 5, BLACK);
                    ks0108DrawCircle(90, 30, 5, BLACK);
                    // again some text
                    ks0108GotoXY(29,38);
                    ks0108Puts_P(PSTR("Tutorials"));

                    // a loading bar
                    for(int x=0;x<128;x++)
                    {
                                        ks0108GotoXY(x,50);
                                        ks0108DrawRect(x, 50, 80, 10, BLACK);
                    }

                    while(1);
}


CIRCUIT DIAGRAM

now just implement this easy circuit burn your MCU with corresponding .hex file and enjoy your GRAPHICAL lcd.


NOTE:- In my program I have changed data port of LCD from PORTA to PORTD so be careful if you are using this circuit connection you will have to change PORTA to PORTD in ks0108.h file of library be careful ….!!

I think it was a useful article for you all in case of any query, doubt or critical view just leave a comment in next tutorial we will discuss about displaying an image on this LCD,… till then bye…!

THNX..:)

13 comments:

  1. I'm getting this error when i build the program .
    can you help me to solve this problem..i will be very thank ful of you.

    variable 'Arial_Bold_14' must be const in order to be put into read-only section by means of '__attribute__((progmem))

    ReplyDelete
    Replies
    1. you should change it like it :
      static const uint8_t Arial_Bold_14[] PROGMEM = {

      it needs to add const

      Delete
  2. sir,do you know any website or blog that have tutorials for ATtiny 25/45/85....

    i will be very thankful of you if you suggest me any link.

    ReplyDelete
    Replies
    1. just google for i......u will get evrything...:)t

      Delete
  3. I was trying to implement the above circuit using proteus. I made the same connections as shown in the circuit but the glcd is showing nothing. Please help

    ReplyDelete
  4. I was doing the above project using proteus. But I am not getting anything on the Glcd display. It is showing nothing. Please help.

    ReplyDelete
    Replies
    1. hii nikesh
      i hv checked this project on proteus a number of time n its working, may be ur connections are nt right or ur nt using right glcd check evrythng one more time it will work..

      Delete
  5. hi abhilash,
    i want to implement this project and iam the beginner in this area. so, please clarify my doubts
    1) does this lcd suitable to interface on Atmega 16a
    2) can i use AVR studio to run this code.

    ReplyDelete
    Replies
    1. yes abhi, u cn use atmega16a and avr studio for this project..:)

      Delete
  6. hi abhilash,
    iam beginner in this area and i want to do your above stated lcd interfacing project. I want to use the following platform. Does it suitable or not please clarify me
    1) microcontroller Atmega 16a
    2) platform Avrstudio

    ReplyDelete
  7. good job.it is necessary that we have to connect backlight of lcd in hardware.The above circuit working in a proteus very well.

    ReplyDelete