Senin, 15 Juli 2013

Pemrograman LCD seri 16x2

Tutorial ini bertujuan agar kita dapat menampilkan karakter di display. Di pasaran kebanyakan LCD yang ada berbasis HD44780, misalnya seri QC1602A dan LMB162AFC.

1. PIN DESCRIPTION
Berikut keterangan Pin-pinnya.

Pin 1 -> VSS     -> GND
Pin 2 -> VCC    -> +5V
Pin 3 -> VEE     -> Untuk Seting Kontras
Pin 4 -> RS       -> 0 = Intruksi Input, 1 = Data Input
Pin 5 -> R/W     -> 0 = Write ke LCD, 1 = Read dari LCD
Pin 6 -> EN       -> 0 = enabel signal, signal dieksekusi ketika dari "1" ke "0" (edge)
Pin 7 - 14 -> D0 - D7 -> Data bus LINE
Pin 15 -> LED A -> +5V
Pin 16 -> LED K -> GND

B. MEMORY DI DALAM LCD
Dalam seri ini, dalam LCD terdapat DDRAM dan CGROM.
DDRAM (Display Data RAM), ram ini adalah ram yang menyimpan data yang ditampilkan di display. LMB162A mempunyai dua line LCD. Berikut maping dari display LCD terhadap DDRAM :
DDRAM - Display
00              00
01              01
dst             dst

DDRAM memiliki 80 x bits, atau 80 karakter mulai dari 00H - 67H. Display LCD line 1, hanya menampilkan 16 baris, maka yang ditampilkan dari DDRAM, adalah alamat 00H - 0FH. Sedangkan line kedua display LCD akan menampilkan mulai dari alamat 40H - 4FH. Data yang tersimpan didalam DDRAM yang tidak ditampilkan tetap ada, tetapi hanya saja tidak kelihatan.  
CGROM (Chararcter Generator ROM), adalah data yang berada di dalam LCD, yang berfungsi dengan kode tertentu (ascii) akan menampilkan data tertentu. Misalnya perintah menampilkan huruf "A", maka kita perlu memberi perintah tertentu. Dimana perintah tersebut berpatokan pada data di dalam CGROM ini.

C. CARA BERKOMUNIKASI DENGAN LCD
Untuk mengatur cara berkomunikasi dengan LCD maka ada 3 pin penting yang dipakai yaitu RS, R/W, dan EN. Pin RS dipakai untuk menentukan apakah perintah yang datang bertipe seting atau menampilkan data ke display. Pin R/W menentukan apakah kita membaca atau menulis kepada LCD. Dan pin E (enable) dipakai untuk mengeksukusi perintah. Dalam mengeksekusi perintah maka perintah dieksekusi saat dari high ke low (edge). Karena bertujuan hanya untuk dapat menampilkan data ke display maka pin R/W (pin no 5) di hubungkan ke ground. Berikut perintah dasar dalam penulisan data ke LCD
- berikan data ke Data Bus
- berikan signal (0 = Intruksi Input, 1 = Data Input) ke RS
- buat E bernilai high kemudian buat E bernilai low

D. Sistem 8 bit vs 4 bit
dalam tutorial ini akan memakai sistem 8 bit sebagai dasar. Delapan bit maksudnya adalah dalam memberi perintah akan memakai akses secara 8 bit, artinya data akan dikiri secara 8 bit. sedangkan sistem 4 bit dimaksudkan untuk menghemat pin dari microcontroller yang dipakai. Dimana data 8 bit akan dikirim secara 4 bit secara 2 kali jalan. Sistem 4 bit akan diterangkan lain kali (males kalo kepanjangan).

E. PERINTAH-PERINTAH YANG PERLU DIKUASAI
Pada dasarnya pemrograman LCD seri ini, mempunyai dua perintah.

1. Perintah Seting LCD (RS bernilai 0)
Perintah Seting LCD, dipakai untuk menentukan cara LCD bekerja. Beberapa perintah yang sering dipakai
dalam tutorial ini
- 38H - 8 bit, 2 line, 5x7
- 06H - Entry mode Increment, maksudnya data yang dimaksukan kedalam DDRAM akan terisi dari 00H kemudian 01H, 02H, dst.
- 01H - Clear data dalam DDRAM dan Display dan posisi penulisan akan dimulai dari 00H (DDRAM).

2. Perintah untuk mengisi RAM display (RS bernilai 1)
Perintah ini dipakai untuk menampilkan data pada Display LCD. Untuk keterangan lebih lanjut dapat dilihat di Google. Coba search pakai kode HD44780. Cari tabel tentang CGROM. Salah satunya adalah jika kita memberi kode 0100 0001 biner, akan tertampil huruf "A".

F. Inisialisasi
Berikut merupakan sample program inisialisasi yang dapat dipakai. Saya memakai micro seri Atmel 89s51, dengan bahasa Assembler. Yang perlu diperhatikan adalah waktu mengeksekusi program,  D7 akan menampilkan signal sibuk (busy). Selama waktu sibuk tersebut kita tidak dapat menuliskan perintah. Solusi yang dapat dipakai adalah menunggu waktu sibuk itu dengan delay atau perintah menunggu di D7 (pin 14). Saat sibuk D7 akan bernilai high. Saya akan memakai delay selama 20milidetik sebagai penunggu eksekusi selesai.

;---------------------------------------;
; P0 LCD Out ;
; p2.6 -> 4 -> RS, register Selection ;
; p2.7 -> 6 -> E, H read, H->L Write ;
;---------------------------------------;
org 0h ; program mulai ditulis di memory 00h 
ajmp mulai ; loncat ke label cek

org 100h ; program mulai ditulis di memory 100h


t_20      CLR TF0         ; NOLKAN TIMER 0 OVERFLOW
     MOV TH0,#B1H ; TUNDA 20 MILIDETIK
       MOV TL0,#E0H ; TUNDA 20 MILIDETIK
     SETB TR0         ; MULAI MENGHITUNG 20 MILIDETIK
     JNB TF0,$ ; TUNGGU DISINI SAMPAI TIMER 0 OVERFLOW
     CLR TR0         ; HENTIKAN TIMER
     RET



;--------------INISIALISASI TIMER------------------------
mulai     MOV TMOD,#01H ; GUNAKAN TIMER 0 MODE 16

;--------------INISIALISASI LCD------------------------
; disini diinginkan setingan :
; - 8 bit data / 2 line / 5x7
; - entry mode increment
; - ---------------------------------------------------
mov p0,#038h ;2 line
clr      p2.6
        setb    p2.7
        clr      p2.7
        acall   t_20

mov a,#0fh
clr       p2.6
        setb    p2.7
        clr      p2.7
        acall   t_20


mov a,#01h
clr       p2.6
        setb    p2.7
        clr      p2.7
        acall   t_20

mov a,#06h
clr       p2.6
        setb    p2.7
        clr      p2.7
        acall   t_20

; menulis ke DDRAM 

tt mov   p0,#01000001B ; menulis  angka A ke DDRAM
clr      p2.6
        setb    p2.7
        clr      p2.7
        acall   t_20
        sjmp  tt                                      ; kembali ke "tt", sehingga akan menulis huruf "A", secara terus 
                                                          ; menerus


end.

Tidak ada komentar:

Posting Komentar