NewLogo
What is LCD and how to interface with Atmega8A Microcontroller
  • Content :

  • Introduction of  LCD.

  • Pin description of LCD.

  • Introduction to Atmega8A.

  • Interfacing LCD and Atmega8A.

  • Program to display on “hello world” on LCD.

 

Introduction of LCD  :

LCD stands for  Liquid Crystal Displays. Let’s understand the meaning of each term. Liquid Crystal is material that consists of two different states of matter. One is solid and another Liquid. So LCD is made up of Liquid Crystal material that we call it LCD.

A liquid crystal cell consists of a thin layer (about 10 u m) of a liquid crystal sand­wiched between two glass sheets with transparent elec­trodes deposited on their inside faces. With both glass sheets transparent, the cell is known as transmitive type cell. When one glass is transparent and the other has a reflective coating, the cell is called reflective type. The LCD does not produce any illumination of its own. It, in fact, depends entirely on illumination falling on it from an external source for its visual effect.


In the Market 16x2 LCD is very popular. 

Here 16x2 means there are 2 rows in the LCD and in each row 16 characters can be printed. This is also in other different forms like 20x2,40x2 etc.


VSS : Used as Ground

VDD : For 5v

VEE : To Adjust Contrast

RS  :To select Register

RW  : To Read and Write Operation

E  : To Enable LCD

D0 - D7  : Data Pins

LEDA  : Can also used to give 5v

LEDK  : Can also used as GND


Introduction to Atmega8A Microcontroller :


Atmega8A AVR Microcontroller was Developed by intel corporation in 2002. It is very common in making various electronics projects. The Arduino board also uses an Atmega328p that also ranges in its AVR series.

 

We can program it through some software IDEs in which Code vision studio is popular. 

See this video to learn how to program Atmega8A through Code Vision studio.

Interfacing LCD with Atmega328p  :

To interface LCD with Atmega8A follow these instruction : -

  • Open New project in Code vision studio IDE 

  • Select AVR8

  • Then select Alphanumeric LCD and Enable Alphanumeric LCD support

  •  
  •  

 

 

Here in above image Code vision IDE Select the port B pins by default.

So connect LCD with Microcontroller As given by default.And don’t forget to connect VCC and GND with Microcontroller.


  • Now go to Program>Generate, Save and Exit.

  • You will be directed  on Code IDE and You will also get a default code.

  • Here I am giving a code : paste this code there and generate a hex file by going project>Build All and then go to Khazama software and  Upload it through Khazama software as I told in video given below.

  •  

Code :

 

/*******************************************************

This program was created by the CodeWizardAVR V3.43 

Automatic Program Generator

© Copyright 1998-2021 Pavel Haiduc, HP InfoTech S.R.L.

http://www.hpinfotech.ro

 

Project : Displaying text on LCD using Atmega8A.

Version :  1.1

Date    : 18-02-2021

Author  : Pawan Meena

Company : DRMZ pvt ltd.

gmail: pavanmaran19199@gmail.com

 

Chip type               : ATmega8A

Program type            : Application

AVR Core Clock frequency: 1.000000 MHz

Memory model            : Small

External RAM size       : 0

Data Stack size         : 256

*******************************************************/

 

#include <mega8.h>

#include <delay.h>

 

// Alphanumeric LCD functions

#include <alcd.h>

 

// Declare your global variables here

 

void main(void)

{

// Declare your local variables here

 

// Input/Output Ports initialization

// Port B initialization

// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In 

DDRB=(0<<DDB7) | (0<<DDB6) | (0<<DDB5) | (0<<DDB4) | (0<<DDB3) | (0<<DDB2) | (0<<DDB1) | (0<<DDB0);

// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T 

PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0);

 

// Port C initialization

// Function: Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In 

DDRC=(0<<DDC6) | (0<<DDC5) | (0<<DDC4) | (0<<DDC3) | (0<<DDC2) | (0<<DDC1) | (0<<DDC0);

// State: Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T 

PORTC=(0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) | (0<<PORTC3) | (0<<PORTC2) | (0<<PORTC1) | (0<<PORTC0);

 

// Port D initialization

// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In 

DDRD=(0<<DDD7) | (0<<DDD6) | (0<<DDD5) | (0<<DDD4) | (0<<DDD3) | (0<<DDD2) | (0<<DDD1) | (0<<DDD0);

// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T 

PORTD=(0<<PORTD7) | (0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) | (0<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (0<<PORTD0);

 

// Timer/Counter 0 initialization

// Clock source: System Clock

// Clock value: Timer 0 Stopped

TCCR0=(0<<CS02) | (0<<CS01) | (0<<CS00);

TCNT0=0x00;

 

// Timer/Counter 1 initialization

// Clock source: System Clock

// Clock value: Timer1 Stopped

// Mode: Normal top=0xFFFF

// OC1A output: Disconnected

// OC1B output: Disconnected

// Noise Canceler: Off

// Input Capture on Falling Edge

// Timer1 Overflow Interrupt: Off

// Input Capture Interrupt: Off

// Compare A Match Interrupt: Off

// Compare B Match Interrupt: Off

TCCR1A=(0<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<WGM11) | (0<<WGM10);

TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (0<<WGM12) | (0<<CS12) | (0<<CS11) | (0<<CS10);

TCNT1H=0x00;

TCNT1L=0x00;

ICR1H=0x00;

ICR1L=0x00;

OCR1AH=0x00;

OCR1AL=0x00;

OCR1BH=0x00;

OCR1BL=0x00;

 

// Timer/Counter 2 initialization

// Clock source: System Clock

// Clock value: Timer2 Stopped

// Mode: Normal top=0xFF

// OC2 output: Disconnected

ASSR=0<<AS2;

TCCR2=(0<<PWM2) | (0<<COM21) | (0<<COM20) | (0<<CTC2) | (0<<CS22) | (0<<CS21) | (0<<CS20);

TCNT2=0x00;

OCR2=0x00;

 

// Timer(s)/Counter(s) Interrupt(s) initialization

TIMSK=(0<<OCIE2) | (0<<TOIE2) | (0<<TICIE1) | (0<<OCIE1A) | (0<<OCIE1B) | (0<<TOIE1) | (0<<TOIE0);

 

// External Interrupt(s) initialization

// INT0: Off

// INT1: Off

MCUCR=(0<<ISC11) | (0<<ISC10) | (0<<ISC01) | (0<<ISC00);

 

// USART initialization

// USART disabled

UCSRB=(0<<RXCIE) | (0<<TXCIE) | (0<<UDRIE) | (0<<RXEN) | (0<<TXEN) | (0<<UCSZ2) | (0<<RXB8) | (0<<TXB8);

 

// Analog Comparator initialization

// Analog Comparator: Off

// The Analog Comparator's positive input is

// connected to the AIN0 pin

// The Analog Comparator's negative input is

// connected to the AIN1 pin

ACSR=(1<<ACD) | (0<<ACBG) | (0<<ACO) | (0<<ACI) | (0<<ACIE) | (0<<ACIC) | (0<<ACIS1) | (0<<ACIS0);

SFIOR=(0<<ACME);

 

// ADC initialization

// ADC disabled

ADCSRA=(0<<ADEN) | (0<<ADSC) | (0<<ADFR) | (0<<ADIF) | (0<<ADIE) | (0<<ADPS2) | (0<<ADPS1) | (0<<ADPS0);

 

// SPI initialization

// SPI disabled

SPCR=(0<<SPIE) | (0<<SPE) | (0<<DORD) | (0<<MSTR) | (0<<CPOL) | (0<<CPHA) | (0<<SPR1) | (0<<SPR0);

 

// TWI initialization

// TWI disabled

TWCR=(0<<TWEA) | (0<<TWSTA) | (0<<TWSTO) | (0<<TWEN) | (0<<TWIE);

 

// Alphanumeric LCD initialization

// Connections are specified in the

// Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:

// RS: PORTB Bit 0

// RD: PORTB Bit 1

// EN: PORTB Bit 2

// D4: PORTB Bit 4

// D5: PORTB Bit 5

// D6: PORTB Bit 6

// D7: PORTB Bit 7

// Characters/line: 16

lcd_init(16); 

 

while (1)

      {

      lcd_clear();  

     // delay_ms(2000);

      lcd_gotoxy(0,0);

      lcd_putsf("Hello DRMZ"); 

      delay_ms(5000);

      }

}

 

Output  :

 
 
 

Everything should work fine if you follow instructions as given in this tutorial. If you find any difficulties in this project you ask me by commenting and mail me.

 

Thanks.

 

Leave a Reply

Your email address will not be published. Required fields are marked *