Modul ini membahas praktikum pemrograman LCD menggunakan mikrokontroler AVR ATmega16. Tujuannya adalah memahami pemrograman bahasa C untuk mikrokontroler dan teknik pemrograman perangkat keras berdasarkan timing diagram serta mampu menampilkan output ke LCD 2x16 menggunakan chip set HD44780. Langkah-langkahnya meliputi pendefinisian karakter, pembuatan rutin untuk mengirim instruksi dan data ke LCD, in
1. FST UNRIYO Modul Praktikum Mikroprosesor
PRAKTIKUM MKROPROSESOR
MODUL 1
PEMROGRAMAN LCD
I. Tujuan Praktikum
1. Memahami pola pemrograman bahasa C untuk mikrokontroler.
2. Memahami teknik pemrograman perangkat keras berdasarkan pembacaan
timing-diagram.
3. Dapat mewujudkan program antarmuka output ke LCD 2x16 yang ber-chip set
HD44780.
II. Alat dan Bahan
1. Sistem minimum AVRATmega 16.
III. Pengantar
Perangkat penampil terdapat dalam berbagai bentuk, dua diantaranya
banyak digunakan dalam pengembangan aplikasi peralatan, yaitu 7-segmen dan
dot matrik LCD. Setiap perangkat/komponen elektronik mempunyai aturan
masing-masing untuk “menghadapkannya” dengan komponen lain. Aturan dalam
bentuk perangkat lunak dan atau perangkat keras tersebut dikenal sebagai
antarmuka.
a
f b
g
e d c
dot
Gambar 1.1 Timing diagram pengiriman data ke LCD
Tujuh-segmen merupakan penampil berbentuk angka digital dengan tujuh
segmen pembentuk angka dan satu segmen pembentuk titik. Angka 0 sampai 9
dan beberapa huruf latin dapat divisualisasikan menggunakan 7-segmen. Pola
penyalaan yang perlu dilakukan dengan memberi beda potensial pada masing-
masing segmen, karena segmen-segmen tersebut adalah komponen cahaya yang
akan menyala jika diberi tegangan.
1
2. FST UNRIYO Modul Praktikum Mikroprosesor
Berbeda dengan 7-segmen, dot matrik LCD adalah komponen penampil
yang sudah terbentuk menjadi modul elektronik yang komplek. Visulalisasi
tampilan yang dapat disajikan lebih beragam dibanding 7-segmen. Pada modul
LCD terdapat komponen yang berfungsi untuk melakukan antarmuka dengan
komponen lain dan membangkitkan pola penampakan karakter.
LCD 2x16 HD44780 mengenal mode-mode kerja yang menentukan proses
antarmuka dan tampilan karakter. Proses menentukan mode kerja dikenal sebagai
proses inisialisasi LCD. Mode kerja tersebut ditetapkan dengan pengiriman data
ke LCD (DDRAM dan CGRAM). Data-data yang akan menentukan mode kerja
tersebut sebagai berikut:
Tabel 1.1 Kode instruksi LCD HD44780
Code
Description
RS 7 6 5 4 3 2 1 0
Clears entire display and sets
0 0 0 0 0 0 0 0 1 DDRAM address 0 in address
counter.
Sets DDRAM address 0 in
address counter.
Also returns display from
0 0 0 0 0 0 0 1 -
being shifted to original
position. DDRAM contents
remain unchanged.
Sets cursor move direction and
specifies display shift. These
0 0 0 0 0 0 1 I/D S
operations are performed
during data write and read.
Sets entire display (D)
on/off, cursor on/off (C), and
0 0 0 0 0 1 D C B
blinking of cursor position
character (B).
Moves cursor and shifts
0 0 0 0 1 S/C R/L - - display without changing DDRAM
contents.
Sets interface data length
0 0 0 1 DL N F - - (DL), number of display lines
(N), and character font (F).
Sets CGRAM address. CGRAM data
0 0 1 ACG ACG ACG ACG ACG ACG is sent and received after
this setting.
Sets DDRAM address. DDRAM data
0 1 ADD ADD ADD ADD ADD ADD ADD is sent and received after
this setting.
Writes data into DDRAM or
1 Write data
CGRAM.
Terlihat bahwa untuk proses inisialisasi dilalukan dengan membuat bit RS
berlogika 0, bit-bit awal data inisialisasi sudah tertentu dengan fungsi masing-
masing. Sedangkan untuk proses pengiriman data karakter dilakukan dengan
membuat bit RS berlogika 1.
2
3. FST UNRIYO Modul Praktikum Mikroprosesor
Kedua proses tersebut adalah proses pengiriman data ke LCD yang
dilakukan dengan membuat pin R/W berlogika 0. Sedangkan untuk membaca data
dari LCD dilakukan dengan membuat pin R/W berlogika 1. Bit-bit penentu
selanjutnya ditentukan oleh nilai-nilai berikut:
Tabel 1.2 Kode instruksi LCD HD44780
Bit function value Abbreviation
I/D = 1: Increment
DDRAM: Display data RAM
I/D = 0: Decrement
CGRAM: Character generator RAM
S = 1: Accompanies display shift
S/C = 1: Display shift
ACG: CGRAM address
S/C = 0: Cursor move
ADD: DDRAM address
R/L = 1: Shift to the right
(corresponds to cursor address)
R/L = 0: Shift to the left
DL = 1: 8 bits, DL = 0: 4 bits
AC: Address counter used for both DD
N = 1: 2 lines, N = 0: 1 line
and CGRAM addresses
F = 1: 5´ 10 dots, F = 0: 5´ 8 dots
Proses antarmuka LCD dilakukan melalui kaki-kaki data D0-D7, RS
(Register Select), E (Enable) dan (Read/Write). Proses antarmuka untuk
mengirimkan data ke LCD dapat terjadi dengan memenuhi aturan pewaktuan
seperti pada gambar berikut:
RS
R/W
E
DB0-DB7 Valid data
Gambar 1.2 Timing diagram pengiriman data ke LCD
Data diberikan melalui pin DB0-DB7, keadaan logika pada pin RS akan
menentukan peruntukan data. Ketika pin RS diberi logika 0 maka data akan
diarahkan ke register instruksi. Ketika pin RS diberi logika 1 maka data akan
diarahkan ke register data.
Tampilan karakter LCD 2x16 HD44780 bergantung pada nilai (data) yang
diberikan ke register instruksi dan register data. Data pada Register instruksi akan
menentukan posisi kolom tempat karakter akan dituliskan, sedangkan nilai pada
register data akan menentukan bentuk karakter yang ditampilkan.
3
4. FST UNRIYO Modul Praktikum Mikroprosesor
IV. Langkah Kerja
1. Buat project baru dengan folder pada AVRStudio, beri nama dengan format
[prog1_nomor mahasiswa] tanpa spasi. Catat langkah-langkah membuat
project pada AVR Studio.
2. Tulislah kerangka program berikut, titik-titik dan keterangan program tidak
perlu ditulis.
#include <avr/io.h> //file including
#include <util/delay.h> //file including
…………………………………… //predefine
……………………………………
…………………………………… //routine program
……………………………………
int main(void) //main program
{
…………………………………… //pre loop program
……………………………………
for (;;)
{
…………………………………… //loop program
……………………………………
}
}
Compile program dengan menekan F7 atau tombol built pada AVR Studio.
Amati, catat setiap kejadian. Jika terdapat error, benarkan penulisan program
Anda. Compile kembali, ulangi sampai tidak ada error dan warning.
3. Tulislah potongan program 1, yaitu potongan program untuk menetapkan
karakter yang akan dituliskan ke LCD, proses ini merupakan proses
pentabelan, letakkan potongan program pada bagian predefine.
char chr_01[16] ={"PROGRAM "};
char chr_02[16] ={"TEST LCD "};
Compile program dengan menekan F7 atau tombol built pada AVR Studio.
Amati, catat setiap kejadian. Jika terdapat error, benarkan penulisan program
Anda. Compile kembali, ulangi sampai tidak ada error dan warning.
4
5. FST UNRIYO Modul Praktikum Mikroprosesor
4. Tulislah potongan program 2, yaitu potongan program berupa rutin untuk
mengirimkan instruksi ke LCD, letakkan potongan program pada bagian
rouitne.
void wr_inst(unsigned char cmd) //RS=0
{ unsigned char i;
PORTC=cmd;
PORTD|=0b10000000; //RS[4]=PD6, E[6]=PD7
for (i=0;i<70;i++)
{asm("nop");}
PORTD&=0b00111111;
for (i=0;i<70;i++)
{asm("nop");}}
Compile program dengan menekan F7 atau tombol built pada AVR Studio.
Amati, catat setiap kejadian. Jika terdapat error, benarkan penulisan program
Anda. Compile kembali, ulangi sampai tidak ada error dan warning.
5. Tulislah potongan program 3, yaitu potongan program berupa rutin untuk
mengirimkan data karakter ke LCD, letakkan potongan program pada bagian
rouitne.
void wr_data(unsigned char chr) //RS=1
{ unsigned char i;
PORTC=chr;
PORTD|=0b11000000;
for (i=0;i<70;i++)
{asm("nop");}
PORTD&=0b00111111;
for (i=0;i<70;i++)
{asm("nop");}}
Compile program dengan menekan F7 atau tombol built pada AVR Studio.
Amati, catat setiap kejadian. Jika terdapat error, benarkan penulisan program
Anda. Compile kembali, ulangi sampai tidak ada error dan warning.
6. Tulislah potongan program 4, yaitu potongan program berupa rutin untuk
mengirimkan data inisialisasi LCD, letakkan potongan program pada bagian
rouitne.
void init_LCD()
{ wr_inst(0x38); _delay_ms(50);
wr_inst(0x14); _delay_ms(50);
wr_inst(0x0C); _delay_ms(50);
wr_inst(0x01); _delay_ms(50);}
5
6. FST UNRIYO Modul Praktikum Mikroprosesor
Compile program dengan menekan F7 atau tombol built pada AVR Studio.
Amati, catat setiap kejadian. Jika terdapat error, benarkan penulisan program
Anda. Compile kembali, ulangi sampai tidak ada error dan warning.
7. Tulislah potongan program 5, yaitu potongan program berupa rutin untuk
menuliskan karakter ke LCD, karakter yang akan dituliskan telah ditabelkan
pada potongan program diatas. Letakkan potongan program pada bagian
rouitne.
void wr_LCD(unsigned char line, unsigned char chr, unsigned
char count, unsigned char max)
{unsigned char i;
wr_inst(line);
for (i=0;i<count;i++)
{switch(chr)
{case 0: wr_data(' '); break;
case 1: wr_data(chr_01[i]); break;
case 2: wr_data(chr_02[i]); break;
}
}
for (i=count;i<max;i++)
{wr_data(' ');}
}
Compile program dengan menekan F7 atau tombol built pada AVR Studio.
Amati, catat setiap kejadian. Jika terdapat error, benarkan penulisan program
Anda. Compile kembali, ulangi sampai tidak ada error dan warning.
8. Tulislah potongan program 6, yaitu potongan program berupa rutin untuk
menuliskan karakter ke LCD, karakter yang akan dituliskan telah ditabelkan
pada potongan program diatas. Letakkan potongan program pada bagian
rouitne.
_delay_ms(500);
PORTA=0x00; DDRA=0b00000000;
PORTB=0x00; DDRB=0b11110000;
PORTC=0x00; DDRC=0b11111111;
PORTD=0x00; DDRD=0b11111110;
_delay_ms(100);
init_LCD(); _delay_ms(100);
wr_LCD(0x80,8,3,16); //incoming L1;
wr_LCD(0xC0,16,0,16); //blank L2;
6
7. FST UNRIYO Modul Praktikum Mikroprosesor
Compile program dengan menekan F7 atau tombol built pada AVR Studio.
Amati, catat setiap kejadian. Jika terdapat error, benarkan penulisan program
Anda. Compile kembali, ulangi sampai tidak ada error dan warning.
V. Petunjuk pembuatan laporan
Buatlah laporan dengan analisa setiap langkah pemrograman. Analisa meliputi
penjelasan program yang mengakibatkan kejadian yang berubah.
7
8. FST UNRIYO Modul Praktikum Mikroprosesor
Skema laporan mikroprosesor
JUDUL
Langkah kerja, hasil dan analisa
1. Mengeluarkan data melalui PORTB dengan data yang dinaikkan.
Setelah program dituliskan
8