Pada proyek kali ini, kita akan mencoba menghubungkan PIC ke LCD grafik 128x64 pixel untuk menampilkan informasi berupa gambar ataupun tulisan. LCD grafik menggunakan controller KS108 buatan Samsung. Karena display ini bertipe grafik dan bukan bertipe karakter, maka untuk menampilkan teks, karakter harus dikonversikan terlebih dahulu menjadi format data gambar. Display ini dibagi menjadi dua kontroler, masing - masing mengendalikan 64x64 pixel. Setiap kontroler dibagi lagi menjadi 8 halaman (page), dan masing-masing halaman terdapat 64 byte.
Instruksi LCD 128x64 pixel
Urutan pengaktifan display dilaksanakan dengan prosedur :
- aktifkan pin Reset
- aktifkan pin Chip Select (1 atau 2)
- nonaktifkan pin DI (berarti kita akan memasukkan perintah/instruksi)
- tunda waktu >1ms
- beri nilai data (D0cD7) dengan nilai $3F atau %0011 1111 (display ON)
- beri pulsa pada Clock >1ms
- beri nilai data (D0...D7) dengan nilai $40 atau %0100 0000 (koordinat arah horizontal kembali ke 0)
- beri pulsa pada Clock >1ms
- beri nilai data (D0...D7) dengan nilai $B8 atau %10111000(mengeset Page 0)
- beri pulsa pada Clock >1 ms
Urutan menggambaran display:
- aktifkan pin DI (kita akan memasukkan data)
- pilih controller yang akan diberi data dengan mengaktifkan pin CS
- beri nilai data(D0...D7) sesuai dengan gambar yang akan ditampilkan. Karena data berkapasitas 8 bit, maka gambar yang akan ditampilkan sebanyak 8 titik (pixel) yang masing-masing menyala sesuai dengan nilai data binernya.
- beri pulsa masukan Clock KS108
Pengendalian LCD grafik 128x64 pixel menggunakan PIC 16F877
No.Pin |
Simbol |
Fungsi |
PIC 16F877 |
1c8 |
D0cD7 |
sebagai masukan/keluaran data 8 bit |
Port B |
9 |
En |
Enable, sebagai masukan Clock |
Port D.4 |
10 |
R/W |
Read/Write à 1=Read, 0 = Write |
Port D.3 |
11 |
D/I |
Data/Instruction à 1 =Data, 0 = Instruction |
Port D.2 |
12 |
Vo |
Pengatur kontras |
|
13 |
Vdd |
Power Supply + 5v |
|
14 |
Vss |
Power Supply GND |
|
15 |
K |
Kutub - |
|
16 |
A |
Kutub + |
|
17 |
CS1 |
Chip Selector 1 |
Port D.1 |
18 |
CS2 |
Chip Selector 2 |
Port D.0 |
‘pendefinisian variable
DATADISPLAY VAR PORTB
CS2 VAR PORTD.0 'Controller 2
CS1 VAR PORTD.1 'Controller 1
DI VAR PORTD.2 'Data/Instruction (On/Off)
RW VAR PORTD.3 'Read/Write (On/Off)
EN VAR PORTD.4 'Enable, untuk Clock
RST VAR PORTD.5 'Reset
DATADISPLAY VAR PORTB
‘urutan pengaktifan display
datadisplay = $3F ' display on
call Clock
datadisplay = $40 ' set y address to 0
call Clock
datadisplay = $B8 ' set page 0
call Clock
datadisplay = $C0 ' set display start line 0
call Clock
'Sub program untuk memberi sinyal Clock yaitu dengan mengaktifkan
'pin Enable (EN) selama 1 ms
clock:
pulsout EN,1
return
'subrutin untuk mengaktifkan kontroler dan inisialisasi instruksi
'atau inisialisasi data
controller1:
low cs2
high cs1
return
controller2:
low cs1
high cs2
return
bothcontroller:
high cs1
high cs2
return
clock:
pulsout en,1
return
init_instruction:
low di
return
init_data:
high di
return
Satu unit display dikendalikan oleh dua kontroller, masing-masing mengatur 64x64 pixel. Alokasi memori masing-masing kontroller dibagi menjadi 8 page dari page 0 sampai page 7. Masing-masing page memuat 64 byte (64 x 8 bit).
Ada dua macam ukuran karakter yang digunakan, yaitu ukuran 8x8 pixel dan 8x5 pixel. Setiap karakter dibentuk dengan memberi angka biner 8 bit pada jalan masuk D0 ... D7 dan di kunci (latched) dengan memberi pulsa sesaat pada pena enable. Pada gambar 9 dijelaskan cara membentuk huruf "A". Setiap kolom berisi 8 bit dengan nilai sesuai dengan titik yang menyala. Untuk karakter 8x8 pixel diperlukan sebanyak 8 byte dan karakter 8x5 pixel diperlukan 5 byte (1 byte = 8 bit). Byte pertama bernilai 124, karena titik yang menyala terletak pada D2, D3, D4, D5, dan D6.
0x20 + 0x21 + 1x22 + 1x23 + 1x24 + 1x25 + 1x26 + 0x27 = 124
Gambar 10 menunjukkan kumpulan karakter yang dibuat dalam format bitmap (bmp), yang selanjutnya dikonversikan ke dalam format data sesuai dengan perhitungan yang sudah dijelaskan sebelumnya. Untuk memudahkan perhitungan kami menggunakan bantuan program Visual Basic untuk mengkonversi image menjadi kode assembly.
Setelah dikonversikan, data tersebut disimpan ke dalam PIC. Prosedur menampilkan karakter 8x8 pixel adalah sebagai berikut:
Call controller1 'yang diaktifkan hanya kontroler 1
Call init_instruksi 'inisialisasi instruksi
Call gohome 'kembali ke posisi awal x=0 y=0
Call init_data 'nisialisasi data
Ascii = "B" 'kode ASCII yang akan ditampilkan
Addr = $1200 'alamat image Ascii
For b0=0 to 7
Readcode Addr + ascii * 8 + b0, datadisplay
Call clock
Next b0
Seperti halnya teks, gambar pun dapat ditampilkan dengan cara yang hampir sama, namun perlu diperhatikan ukuran image dan kapasitas LCD.