December 5th, 2011
1 comment
Pendahuluan
Dalam dunia elektronika maupun robotika, penggunaan LCD ( Liquid Crystal Display ) adalah sudah umum. Walaupun masih banyak yang menganggap bahwa menggunakan LCD adalah sudah. Memang bagi yang belum pernah menggunakan LCD, akan merasakan sendiri betapa susahnya memprogram mikrokontroler untuk mengontrol LCD.Namun kini sudah semakin banyak literatur-literatur cara menghubungkan suatu jenis mikrokontroler dengan LCD, sehingga penggunaan LCD sekarang sudah semakin biasa bagi kalangan mahasiswa ataupun hobbys elektronika. Ketersediaan LCD yang bersifat umum ( kompatibel satu sama lain ) tentu sangat menguntungkan. Hal ini menjadikan pemrogram,an ke LCD tidak tergantung kepada merk LCD itu sendiri.
Sekilas LCD
Sebelum menjelaskan tentang apa itu LCD Back Pack, penulis ingin membahas sedikit tentang dasar-dasar pemrograman LCD. Hal ini mungkin diperlukan bagi adik-adik kita yang baru saja mengenal / belajar dunia mikrokontroler.
LCD merupakan alat untuk menampilkan angka atau tulisan sehingga alat yang menggunakan LCD ini akan terlihat professional. Penggunaan LCD ini tentu berbeda dengan penggunaan Seven Segment ( Peraga 7 ruas ). Jika pada peraga 7 ruas adalah merupakan alat pasif, maka LCD dapat dianggap sebagai alat aktif. Hal ini dikarenakan pada LCD telah dipasang sebuah prosesor Hitachi HD44780.
Oleh karena adanya prosesor tersebutlah, maka untuk menggunakan LCD harus menggunakan sistim mikrokontroler ataupun dapat menggunakan parallel port pada komputer. Hal ini tidak lain karena kita harus memberikan proses inisialisasi terlebih dahulu sebelum menggunakan LCD.
Pin Diagram LCD
Walaupun manufacture LCD sangat banyak ( Data Image, Densitron, Optrex,Hitachidll ) namun karena menggunakan prosesor yang sama, maka hal ini menjadikan masing-masing LCD saling kompatibel. Jumlah pin LCD secara umum adalah 16 buah. Ini khusus untuk LCD standard ( bukan LCD Graphic atau serial LCD ). Adapun ke 16 pin LCD adalah sebagai berikut.
Tabel 1 Pin LCD
Pin LCD Kegunaan
1 Ground
2 Vdd ( +5Volt )
3 V contrast4 RS
5 R/W ( Read / Write )
6 E ( Enable )
7 D0 ( Data bit 0 )
8 D1 ( Data bit 1 )
9 D2 ( Data bit 2 )
10 D3 ( Data bit 3 )
11 D4 ( Data bit 4 )
12 D5 ( Data bit 5 )
13 D6 ( Data bit 6 )
14 D7 ( Data bit 7 )
15 Anoda ( + BackLight )
16 Katoda ( - BackLight )
Adapun diagram blok LCD adalah seperti pada gambar berikut.

Gambar 1 Diagram Blok Standard LCD
Pena Kontrol LCDSecara umum pena kontrol untuk LCD hanya ada 3 saja yaitu : RS, R/W dan E. Kegunaan masing-masing pena kontrol tersebut adalah sebagai berikut ini.
Pena kontrol RS ( Register Select ) digunakan untuk memberitahukan LCD apakah data yang dikirim merupakan Instruksi atau merupakan data. Oleh karena itu berlaku hal sebagai berikut.
Data sebagai Pena RS
Instruksi 0
Data 1
Pena kontrol R/W digunakan sebagai kontrol untuk proses membaca ( Read ) atau menulis ( Write ). Umumnya prosesnya adalah menulis dari mikrokontroler ke LCD, oleh karena itu pena ini sering dihubungkan langsung dengan ground ( dengan asumsi tidak ada proses baca data dari LCD ke mikrokontroler ).
Sementara pena kontrol E ( Enable ) adalah untuk meng-enable ( memampukan ) proses penulisan register pada LCD jika pena ini berlogika tinggi ( high ).
Kontrol Display
Kata instruksi dikirimkan ke LCD untuk memberitahukan mode operasi apa yang harus dijalankan. Beberapa mode operasi dijelaskan dibawah ini.
Operasi Kata Instruksi Kegunaan
Function set 0×38 Memilih mode 8-bit, 5 x 7
Dipakai saat inisialisasi
Display On / Off 0x0C Display On tanpa Cursor
0x0F Display On,Cursor kedip di kiri
Clear Display 0×01 Hapus Display = blanks
Entry Mode set 0×06 Increment Mode
Kata Instruksi diatas harus dikirimkan ke LCD, sebagai rutin inisialisasi.
Paralel LCD vs Serial LCD
Secara umum LCD yang banyak beredar diIndonesiaadalah parallel LCD, namun sebenarnya masih ada satu jenis LCD yang belum begitu banyak dipakai diIndonesiayaitu Serial LCD. Jikalau menggunakan parallel LCD kita harus menggunakan lebih dari 8 jalur I/O, maka jika menggunakan serial LCD maka jumlah I/O yang dipakai jauh lebih sedikit, karena proses pengiriman data menggunakan teknik serial. Serial LCD banyak dibuat oleh Scott Edward Electronics Amerika.
LCD BackPack
Secara umum penggunaan LCD akan banyak menyita jalur I/O pada suatu sistim mikrokontroler. Apabila mikrokontroler tersebut memiliki jumlah I/O yang banyak, tentu tidak menjadi masalah. Masalah akan timbul jika kita menggunakan sistim mikrokontroler yang pena I/O-nya terbatas. Jika harus menggunakan mikrokontroler kecil ( dengan I/O terbatas ) dan harus menggunakan LCD apa yang harus kita lakukan agar dapat menghemat I/O ?
Jalan keluarnya adalah menggunakan LCD BackPack. LCD BackPack adalah suatu PCB tambahan yang dipasang pada “punggung” LCD dimana pada PCB BackPack tersebut terdapat sebuat mikrokontroler PIC16F84 ( persamaan ) yang dipakai untuk mengontrol LCD tersebut.
Dengan adanya PCB BackPack tersebut, maka seluruh kontrol LCD diambil alih oleh mikrokontroler PIC16F84 yang ada pada BackPack. Adapun komunikasi antara sistim minimum kita dengan LCD BackPack menggunakan 1 jalur saja. Total jalur yang dibutuhkan untuk berhubungan dengan LCD + BackPack adalah 2 jalur. Yaitu 1 jalur I/O dan Ground. Hal ini tentu merupakan penghematan jalur yang sangat berarti.

Gambar 2 Hubungan antara LCD, PCB LCD BackPack
dan Sisitim Minimum Mikrokontroler
Dengan menggunakan LCD+BackPack ini maka sistim mikrokontroler kita hanya membutuhkan satu jalur I/O saja untuk berhubungan dengan LCD. Tentu hal ini menyebabkan jalur I/O masih banyak tersedia untuk keperluan lain.
Rangkaian LCD BackPack
Rangkaian LCD BackPack merupakan rangkaian standard hubungan antara mikrokontroler dengan LCD. Yang lebih berperan disini sebenarnya adalah bagian software-nya. Karena hanya 1 jalur I/O saja yang akan dipakai untuk berhubungan dengan LCD, maka harus menggunakan sistim transfer data secara serial.

Gambar 3 Rangkaian LCD BackPack
Berikut contoh prototype LCD BackpPack yang sudah dibuat. PCB ini dipasang pada punggung LCD.
Gambar 4 Prototipe LCD BackPack
Kode sumber untuk LCD BackPack ini aslinya dibuat oleh Mr.David
Benson dan dimodifikasi sesuai kebutuhan. Pada saat pertama kali
dinyalakan LCD akan menampilkan tulisan ELKOM pada pojok kiri.Kode sumber untuk Sistim Mikrokontroler
Agar dapat berhubungan dengan LCD BackPack, maka pada sistim minimum mikrokontroler PIC16F84 yang akan berhubungan dengan LCD BackPack harus disertakan rutin-rutin sbb.
;————————————————————
sndstf movf instr,w ;get instruction
movwf sendreg ;to be sent
call ser_out ;to serial out subroutine
movf char,w ;get character or hex byte
movwf sendreg ;to be sent
call ser_out ;to serial out subroutine
movf addr,w ;get address
movwf sendreg ;to be sent
call ser_out ;to serial out subroutine
return
;————————————————————
ser_out bcf intcon,5 ;disable tmr0 interrupts
bcf intcon,7 ;disable global interrupts
clrf tmr0 ;clear timer/counter
clrwdt ;clear wdt prep prescaler assign
bsf status,rp0 ;to page 1
movlw b’11011000′ ;set up timer/counter
movwf optreg
bcf status,rp0 ;back to page 0
movlw 0×08 ;init shift counter
movwf count
bcf porta,1 ;start bit
clrf tmr0 ;start timer/counter
bcf intcon,2 ;clear tmr0 overflow flag
time1 btfss intcon,2 ;timer overflow?
goto time1 ;no
bcf intcon,2 ;yes, clear overflow flag
nxtbit rlf sendreg,f ;rotate msb into carry flag
bcf porta,1 ;clear port A, bit 1
btfsc status,c ;test carry flag
bsf porta,1 ;bit is set
time2 btfss intcon,2 ;timer overflow?
goto time2 ;no
bcf intcon,2 ;clear overflow flag
decfsz count,f ;shifted 8?
goto nxtbit ;no
bsf porta,1 ;yes, output mark
time3 btfss intcon,2 ;timer overflow?
goto time3 ;no
return ;done
;————————————————————
del_125 movlw 0x2a ;approx 42×3 cycles (decimal)
movwf count1 ;load counter
repeat decfsz count1,f ;decrement counter
goto repeat ;not 0
return ;counter 0, ends delay
;————————————————————
Rutin-Rutin Penting
Untuk dapat mengirimkan tulisan atau perintah ke LCD BackPack maka harus diingat beberapa hal berikut ini.
a. Menghapus layar LCD
Dilakukan dengan mengisi display RAM dengan blank ( kosong ) dan mengirimkan ke LCD.
movlw 0×00 ; mengisi blank ke display RAM
movwf instr
call sndstf
call del_125
movlw 0×01 ; kirim 16 karakter ke display
movwf instr
call sndstf
b. Menuliskan kata “TEST LCD”
movlw 0×02 ; tampilkan TEST LCD
movwf instr
call sndstf
c. Menuliskan huruf
movlw 0×00
movwf instr
call sndstf
call del_125
movlw 0×03 ; diikuti karakter ascii
movwf instr
movlw “A” ; huruf A akan ditampilkan
movwf char
movlw 0×20 ; pada alamat 20 address RAM
movwf addr
call sndstf
movlw 0×01 ; kirim 16 karakter ke display
movwf instr
call sndstf
Contoh Progam Pada Sistim Minimum
Berikut diberikan contoh penggunaan dan pemrograman menggunakan LCD BackPack. Misalkan rangkaian berikut adalah sebuah mobile robot yang dikontrol menggunakan mikrokontroler PIC16F84. Adadua buah saklar ( yang dimisalkan sebagai sensor ) yang terhubung dengan RA2 ( saklar maju ) dan RA3 ( saklar mundur ).
Jika saklar maju ditekan maka pada LCD harus tertampil tulisan :
Posisi :
MAJU
Jika saklar mundur ditekan maka pada LCD harus tertampil tulisan :
Posisi :
MUNDUR

Gambar 5 Contoh penggunaan LCD BackPack
Program secara utuh adalah sebagai berikut.
;=======test back pack =========================================
list p=16c84
radix hex
;————————————————————
tmr0 equ 0×01
status equ 0×03
porta equ 0×05
intcon equ 0x0b
sendreg equ 0x0c
count equ 0x0d
instr equ 0x0e
char equ 0x0f
addr equ 0×10
count1 equ 0×11
optreg equ 0×81
trisa equ 0×85
;————————————————————
c equ 0
rp0 equ 5
;————————————————————
org 0×000
;
start
bsf status,rp0 ; ke bank 1
movlw b’00001100′ ; RA2,RA3 sebagai input
movwf trisa
bcf status,rp0 ; kembali ke bank 0
bsf porta,1 ; RA1 dibuat tinggi ( = mark )
saklar_maju
btfsc porta,2 ; saklar maju ditekan?
goto saklar_maju ; belum tuh..kembali ke saklar_maju
;—————————————————–
;rutin saklar_maju ditekan ; ya,saklar_maju ditekan.
;—————————————————–
menulis_ke_lcd_maju ; rutin menulis ke LCD ( MAJU )
call hapus_layar_lcd
movlw 0×03
movwf instr;
;tulisan posisi
movlw “P”
movwf char
movlw 0×20
movwf addr
call sndstf
movlw “o”
movwf char
movlw 0×21
movwf addr
call sndstf
movlw “s”
movwf char
movlw 0×22
movwf addr
call sndstf
movlw “i”
movwf char
movlw 0×23
movwf addr
call sndstf
movlw “s”
movwf char
movlw 0×24
movwf addr
call sndstf
movlw “i”
movwf char
movlw 0×25
movwf addr
call sndstf
movlw “:”
movwf char
movlw 0×26
movwf addr
call sndstf
;tulisan maju
movlw “M”
movwf char
movlw 0×28
movwf addr
call sndstf
movlw “A”
movwf char
movlw 0×29
movwf addr
call sndstf
movlw “J”
movwf char
movlw 0x2A
movwf addr
call sndstf
movlw “U”
movwf char
movlw 0x2B
movwf addr
call sndstf
movlw 0×01
movwf instr
call sndstf
saklar_mundur
btfsc porta,3
goto saklar_mundur
;—————————
;rutin saklar_mundur ditekan
;—————————
menulis_ke_lcd_mundur
call hapus_layar_lcd
movlw 0×03
movwf instr;
;tulisan Posisi:
movlw “P”
movwf char
movlw 0×20
movwf addr
call sndstf
movlw “o”
movwf char
movlw 0×21
movwf addr
call sndstf
movlw “s”
movwf char
movlw 0×22
movwf addr
call sndstf
movlw “i”
movwf char
movlw 0×23
movwf addr
call sndstf
movlw “s”
movwf char
movlw 0×24
movwf addr
call sndstf
movlw “i”
movwf char
movlw 0×25
movwf addr
call sndstf
movlw “:”
movwf char
movlw 0×26
movwf addr
call sndstf
;tulisan MUNDUR
movlw “M”
movwf char
movlw 0×28
movwf addr
call sndstf
movlw “U”
movwf char
movlw 0×29
movwf addr
call sndstf
movlw “N”
movwf char
movlw 0x2A
movwf addr
call sndstf
movlw “D”
movwf char
movlw 0x2B
movwf addr
call sndstf
movlw “U”
movwf char
movlw 0x2C
movwf addr
call sndstf
movlw “R”
movwf char
movlw 0x2D
movwf addr
call sndstf
movlw 0×01
movwf instr
call sndstf
goto saklar_maju
;—————
hapus_layar_lcd ; rutin untuk menghapus lcd
;—————-
movlw 0×00 ; rutin ini untuk menghapus LCD
movwf instr ;
call sndstf ;
call del_125 ;
call del_125 ;
return
;————————————————————
display_test_lcd ;rutin untuk menampilkan tulisan TEST LCD
;————————————————————
movlw 0×00 ; blank ke display RAM
movwf instr
call sndstf
call del_125
movlw 0×02 ;display “TEST LCD”
movwf instr
call sndstf ;call send stuff
call del_125
call del_125
return
;——————————————–
;————————————————————
sndstf movf instr,w ; ambil instruksi
movwf sendreg ; yang akan dikirim
call ser_out ; ke rutin serial out
movf char,w ; dapatkan karakter atau hex byte
movwf sendreg ; yang akan dikirim
call ser_out ; ke rutin serial out
movf addr,w ; dapatkan alamat
movwf sendreg ; yang akan dikirim
call ser_out ; ke rutin serial out
return
;————————————————————
ser_out
bcf intcon,5 ; lumpuhkan sela tmr0
bcf intcon,7 ; lumpuhkan sela global
clrf tmr0 ; hapus timer/counter
clrwdt ; hapus wdt prep prescaler assign
bsf status,rp0 ; ke hal 1
movlw b’11011000′; set up timer/counter
movwf optreg
bcf status,rp0 ; kembali ke hal 0
movlw 0×08 ; inisialisasi shift counter
movwf count
bcf porta,1 ; start bit
clrf tmr0 ; start timer/counter
bcf intcon,2 ; clear tmr0 overflow flag
time1 btfss intcon,2 ; timer melimpah ?
goto time1 ; tidak
bcf intcon,2 ; ya, clear overflow flag
nxtbit rlf sendreg,f ; rotate msb into carry flag
bcf porta,1 ; clear port A, bit 1
btfsc status,c ; test carry flag
bsf porta,1 ; bit is set
time2 btfss intcon,2 ; timer overflow?
goto time2 ; no
bcf intcon,2 ; clear overflow flag
decfsz count,f ; shifted 8?
goto nxtbit ; no
bsf porta,1 ; yes, output mark
time3 btfss intcon,2 ; timer overflow?
goto time3 ; no
return ; done
;————————————————————
del_125
movlw 0x2a ; approx 42×3 cycles (decimal)
movwf count1 ; load counter
repeat
decfsz count1,f ; decrement counter
goto repeat ; not 0
return ; counter 0, ends delay
;————————————————————
end
Note : kode sumber untuk LCD BackPack dapat diminta via email ke penulis.
Gambar 6 Contoh Tampilan pada LCD
PenulisMoh.Ibnu Malik,ST
Email : moh_ibnumalik@yahoo.com
HP : 081 293 295 12
.png)
.png)
.png)
.png)

0 comments:
Posting Komentar