ATMEGA16 and LCD example

This example is the hello world of LCD examples, we display that text on the LCD in question. Connection is straightforward and you can see it at the top of the code, we use Port B

LCD_RS -> PORT B4
LCD_EN -> PORT B5
LCD_D4 -> PORT B0
LCD_D5 -> PORT B1
LCD_D6 -> PORT B2
LCD_D7 -> PORT B3

The LCD we used is similar to the one in the picture below, we connect this up and use it in 4 Bit mode, this saves on I/O pins.


LCD Pin Description

Pin No Symbol I/O Description
1 Vss Ground
2 Vcc +5V
3 Vee Contrast Control
4 RS Input Command/Data Register
5 R/W Input Read/Write Register
6 E Input/Output Enable
7 DB0 Input/Output Not Used in 4-Bit Mode
8 DB1 Input/Output Not Used in 4-Bit Mode
9 DB2 Input/Output Not Used in 4-Bit Mode
10 DB3 Input/Output Not Used in 4-Bit Mode
11 DB4 Input/Output Data Bus in 4-Bit Mode
12 DB5 Input/Output Data Bus in 4-Bit Mode
13 DB6 Input/Output Data Bus in 4-Bit Mode
14 DB7 Input/Output Data Bus in 4-Bit Mode
15 Vcc For LCD Back Light
16 Vss For LCD Back Light

Schematic

Basic schematic showing LCD connections, assumption is you will already have power, reset and possible external clock circuitry as well

atmega16 and lcd

Code

Written in mikroC pro for AVR, this example uses the built in LCD libraries.

[c]

sbit LCD_RS at PORTB4_bit;
sbit LCD_EN at PORTB5_bit;
sbit LCD_D4 at PORTB0_bit;
sbit LCD_D5 at PORTB1_bit;
sbit LCD_D6 at PORTB2_bit;
sbit LCD_D7 at PORTB3_bit;

sbit LCD_RS_Direction at DDB4_bit;
sbit LCD_EN_Direction at DDB5_bit;
sbit LCD_D4_Direction at DDB0_bit;
sbit LCD_D5_Direction at DDB1_bit;
sbit LCD_D6_Direction at DDB2_bit;
sbit LCD_D7_Direction at DDB3_bit;

void main()
{

PORTB = 0;
Lcd_Init(); // Initialize LCD
Lcd_Cmd(_LCD_CLEAR); // Clear display
Lcd_Cmd(_LCD_CURSOR_OFF); // Cursor off
Lcd_Out(1,1,”Hello world”); //Write the word mikroC on the LCD
Delay_ms(300);
} // end main

[/c]

 

Links
ATMEGA16/ATmega32 AVR Minimum System Board + USB ISP USBasp Programmer

ATMEGA16 AVR microcontroller

ATMEGA16 Minimum System Board

Related posts

ATmega128 and MAX7219 8 x 8 matrix

Atmega128 and a 7 segment display

Atmega16 and MAX7219 seven segment display