LCD Epson SED1200
Modul LCD Epson SED1200
Tampilan LCD dalam dunia elektronika digital termasuk barang mewah, karena harga tampilan ini cukup mahal tapi karena bisa dipakai untuk menampilkan kalimat, tampilan LCD tetap menjadi idaman. Berikut ini akan dibahas teknik interface mikrokontroler dengan tampilan LCD murah.
Jenis tampilan LCD yang beredar di pasar tidaklah banyak, mula-mula beredar ‘LCD Display Module M1632’ buatan Seiko Instrument Inc., harganya cukup mahal lebih dari seratus ribu rupiah. Belakangan ini ada jenis yang lain, buatan Epson Corporation dengan type SED1200, harganya hanya sekitar 20% dari jenis pertama, jadi memang sangat menarik untuk dipelajari lebih lanjut.
Tampilan LCD murah ini bisa dipakai untuk menampilkan 20 huruf/angka sekali gus, cukup memadai untuk menampilkan nomor telpon dan pesan pesan pendek lainnya.
Seperti tampilan LCD pada umumnya, SED1200 terdiri dari dua bagian, yakni bagian panel LCD yang terdiri dari banyak ‘titik-titik’ LCD dan sebuah mikrokontroler yang menempel di panel dan berfungsi mengatur ‘titik-titik’ LCD tadi menjadi huruf/angka yang terbaca, serta berfungsi pula untuk komunikasi antara tampilan LCD dengan mikrokontroler lainnya yang memakai tampilan LCD itu.
Huruf/angka yang akan ditampilkan dikirim ke SED1200 dalam bentuk kode ASCII, kode ASCII ini diterima dan diolah oleh mikrokontroler di dalam SED1200 menjadi ‘titik-titik’ LCD yang terbaca sebagai huruf/angka. Dengan demikian tugas mikrokontroler pemakai tampilan LCD hanyalah mengirimkan kode-kode ASCII untuk ditampilkan.
Sinyal Interface LCD SED1200
Dalam lembaran data (data sheet) SED1200 dikatakan tampilan LCD ini kompatible dengan mikroprosesor 4 bit maupun 8 bit, hal ini disebabkan SED1200 hanya dilengkapi dengan 4 jalur data (DB0 .. DB3) yang dipakai untuk menyalurkan kode ASCII maupun perintah untuk mengatur kerjanya SED1200. Pada hal kode ASCII maupun perintah tersebut semuanya merupakan kode 8 bit, maka kode-kode itu dikirimkan dua kali, yang pertama dikirimkan adalah 4 bit yang berbobot lebih besar (most significant bit – D4..D7) baru kemudian 4 bit sisanya (D0..D3). Selain DB0..DB3, SED1200 dilengkapi pula dengan CS, WR dan A0 seperti layaknya komponen yang kompatibel dengan mikroprosesor, yang agak menyimpang adalah sinyal CLK yang akan dibicarakan lebih lajut di bawah.
A0 dipakai untuk membedakan data yang dikirimkan ke SED1200, kalau A0=0 data yang dikirim adalah perintah untuk mengatur kerja SED1200 dan sebaliknya kalau A0=1 data yang dikirim adalah kode ASCII yang ingin ditampilkan.
Proses pengiriman data ke SED1200 digambarkan dalam Gambar 1 bisa dijabarkan sebagai berikut :
- sinyal CS dipakai untuk mengaktipkan proses pengiriman data ini, selama proses ini berlangsung CS diaktipkan dengan level tegangan ‘0’.
- Data yang akan dikirimkan ke SED1200 disiapkan di .DB3, seperti dibicarakan di atas kode-kode yang dikirimkan ke SED1200 dipecah menjadi 2 kali pengiriman, hal ini terlihat jelas di gambar 1 yang menggambarkan pengiriman D4..D7 dan selanjutnya pengiriman D0..D3.
- Setelah data siap, sinyal WR dipakai sebagai sinyal ‘komando’ bagi SED1200 agar mengambil data di .DB3. Pengambilan data ini tepatnya terjadi pada saat WR berubah dari ‘0’ menjadi ‘1’.
Interface LCD SED1200 ke AT89C51
Sinyal di Gambar 1 setara dengan sinyal-sinyal MCS51 pada saat AT89C51 mengerjakan instruksi MOVX @DPTR,A.
Instruksi MOVX hanya bisa dilaksanakan di AT89C51 yang dirangkai dengan memori eksternal, jadi pada sistem berbasis AT89C51 yang sudah dilengkapi 74HC573 (U2) sebagai pemisah jalur-alamat (address bus demultiplexer) untuk keperluan pemakaian memori eksternal, seperti terlihat di Gambar 2 dengan mudah bisa ditambah SED1200.
Seperti layaknya menambah IC memori pada AT89C51, hubungan SED1200 ke ke AT89C51 dilakukan dengan cara sebagai berikut:
- .DB3 SED1200 dihubungkan ke DB0..DB3 AT89C51,
- WR kedua komponen dihubungkan jadi satu,
- A0 SED1200 didapatkan dari output 74HC573 yang berfungsi sebagai address bus multiplexer
- CS SED1200 dikendalikan lewat output 74LS138 yang berfungsi sebagai address decoder
Dalam lembar data SED1200 tidak banyak dibicarakan tentang sinyal CLK, tidak ada ketentuan berapa frekuensi clock dan tidak ada keterangan bilamana clock tersebut diperlukan. Setelah dianalisa secara mendalam dan uji coba di laboratorium, ternyata sinyal CLK hanya diperlukan setelah sinyal WR yang kedua dan cukup 16 pulsa saja (lihat Gambar 1), meskipun demikian boleh juga clock itu diumpankan secara terus menerus.
Kaki ALE AT89C51 selalu mengeluarkan clock dengan frekuensi sama dengan seper-enam frekuensi kristal, clock pada ALE ini bisa dipakai untuk sinyal CLK SED1200, jadi clock ini tidak perlu dibangkitkan secara khusus.
Selama 16 pulsa clock tersebut di atas, SED1200 melakukan proses internal dalam chip, dan selama itu pula SED1200 tidak bisa menerima kiriman data. Keadaan ini bisa dipantau lewat Register Status yang ada di dalam SED1200, untuk keperluan ini SED1200 dilengkapi kaki RD yang dipakai untuk membaca isi Register Status.
Karena satu-satunya kegunaan kaki RD hanya untuk keperluan di atas, padahal waktu sibuk SED1200 bisa diperkirakan dengan pasti, yakni 16 pulsa clock setelah sinyal WR yang kedua, maka kaki RD tapi tidak perlu dipakai cukup dihubungkan ke Vcc.
Program interface SED1200 terdiri dari sub-rutin KirimPerintah dan sub-rutin KirimASCII, KirimPerintah dilakukan dengan A0=0 dan KirimASCII dilakukan dengan A0=1. Sebelum memakai kedua sub-rutin ini, data yang akan dikirim ke SED1200 sudah harus disiapkan di Akumulator A.
Pada saat melaksanakan instruksi MOVX @DPTR,A di baris 22, AT89C51 akan membangkitkan sinyal yang diperlukan SED1200 seperti terlihat di Gambar 1.
CS dari SED1200 dihubungkan ke kaki Y7 dari 74LS138 (Gambar 2), kaki ini akan menjadi ‘0’ jika kaki A (tehubung ke A13 AT89C51), kaki B (terhubung ke A14) dan kaki C (terhubung ke A15) semuanya bernilai ‘1’. Keadaan ini terpenuhi kalau pada saat instruksi MOVX @DPTR,A dilaksanakan nilai DPTR berkisar antara 1110 0000 0000 0000 (E000 heksadesimal) dan 1111 1111 1111 1111 (FFFF heksadesimal). Dalam hal ini dikatakan SED1200 mempunyai alamat dasar $E000 (awalan $ artinya bilangan heksadesimal).
- Nilai $E000 di baris 2 akan mengakibatkan A12, A13 dan A14 dirangkaian Gambar 2 bernilai ‘1’ sehingga CS akan bernilai ‘0’, dan A0 (kaki Q1 dari 74HC573) menjadi ‘0’, data yang dikirim AT89C51 diterima SED1200 sebagai perintah untuk mengatur kerja SED1200
- Sedangkan nilai $E001 di baris 6 akan mengakibatkan CS akan bernilai ‘0’, dan A0 (kaki Q1 dari 74HC573) menjadi ‘1’, data yang dikirim AT89C51 diterima SED1200 sebagai kode ASCII yang akan ditampilkan.
SED1200 hanya mempunyai 4 jalur data, sehingga data 8 bit yang sudah disimpan di Acc dikirim dua kali, pertama dikirim 4 bit yang berbobot lebih besar (A4..A7, baris 10) setelah itu dikirim 4 bit berikutnya (A0..A3, baris 11)
Setelah pengiriman data yang kedua (baris 12), SED1200 memerlukan paling sedikit 16 pulsa clock untuk memproses data yang baru saja diterima. Selama AT89C51 mengerjakan instruksi di baris 15..17, ALE yang menjadi sumber clock bagi SED1200 sudah mengeluarkan lebih dari 16 pulsa, sehingga saat keluar dari sub-rutin SED1200 sudah siap menerima data lagi. (1 instruksi DJNZ = 4 pulsa ALE)
Potongan Program 1 Sub-rutin dasar untuk mengirim data ke SED1200
01: KirimPerintah:
02: MOV DPTR,#$E000 ; A0=0 : Command mode
03: SJMP OutByte
04: ;
05: KirimASCII:
06: MOV DPTR,#$E001 ; A0=1 : Character mode
07: OutByte:
08: PUSH A ; simpan dulu
09: SWAP A ; A0..A3 dan A4..A7 tukar tempat
10: ACALL OutNibble ; outputkan A4..A7
11: POP A ; ambil kembali simpanan
12: ACALL OutNibble ; outputkan A0..A3
13:
14: ***** Tunggu selama minimal 16 pulsa ALE
15: MOV R6,#4
16: Tunggu16ALE:
17: DJNZ R6,Tunggu16ALE ; 4 ALE setiap instruksi DJNZ
18: RET
19: ; Nibble adalah setengah Byte
20: OutNibble:
21: MOVX @DPTR,A ; kirim ke SED1200
22: RET
Interface ke AT89C2051
AT89C2051 adalah AT89C51 yang disederhanakan menjadi mikrokontroler yang hanya berkaki 20, penyederhanaan itu mengakibatkan AT89C2051 tidak punya kaki-kaki DB0..DB7, P2.0..P27, WR, RD dan ALE dan berapa kaki lainnya, selain itu instruksi MOVX @DPTR,A tidak bisa dipakai, dengan demikian rangkaian Gambar 2 sama sekali tidak bisa dipakai untuk AT89C2051, sebagai gantinya dibuat rangkaian Gambar 3, dalam rangkaian ini DB0..DB3 dan WR digantikan dengan Port 1 dan fungsi kerjanya disimulasikan lewat program.
Kaki CLK SED1200 dihubungkan dengan kaki P1.7 AT89C2051, pulsa yang diperlukan SED1200 untuk memproses data yang diterima dibangkitkan dengan program, tidak perlu disediakan rangkaian khusus untuk membangkitkan clock.
Potongan Program 2 merupakan sub-rutin untuk mengendalikan SED1200 yang dihubungkan ke AT89C2051 seperti terlihat di Gambar 3, sebelum memakai kedua sub-rutin ini, data yang akan dikirim ke SED1200 sudah harus disiapkan di Akumulator A.
- Perbedaan sub-rutin KirimPerintah dan KirimASCII terletak pada nilai A0 pada saat sub-rutin itu bekerja. Sub-rutin KirimPerintah bekerja dengan A0=‘0’ (baris 7), data yang dikirim AT89C2051 diterima SED1200 sebagai perintah untuk mengatur kerja SED1200. Sub-rutin KirimASCII bekerja dengan A0=‘1’ (baris 11), data yang dikirim AT89C2051 diterima SED1200 sebagai kode ASCII yang akan ditampilkan
- Sepanjang proses pengiriman data CS diaktipkan dengan level tegangan ‘0’ yang dilakukan di baris 13 dan di-nonaktip-kan kembali di baris 19.
- Data di Akumulator A dikirimkan setengah byte demi setengah byte sebanyak dua kali, pertama dikirim .A7 (baris 15 dan 16) kemudian dikirim A0..A3 (baris 17 dan 18).
- Mengingat AT89C2051 tidak punya sinyal ALE, sebagai gantinya dibaris 22 sampai dengan 25 dibangkitkan 16 pulsa clock yang dibutuhkan oleh CLK 16 pulsa ini dibangkitkan setelah A.0..A.3 dikirimkan ke SED1200, keluar dari sub-rutin ini SED1200 sudah siap menerima data lagi.
- Baris 29 sampai 36 Potongan Program 2 mensimulasikan baris 21 Potongan Program 1, di baris 29 kaki WR SED1200 di-nol-kan, baris 30 sampai 35 mengirimkan .A3 ke DB0..DB3 (P1.0..P1.3) tanpa merubah sinyal-sinyal lain yang sudah berada di Port 1. Di baris 36 WR dikembalikan ke ‘1’, saat itulah informasi di DB0..DB3 diambil oleh SED1200.
Potongan Program 2 AT89C2051 dengan SED1200
01: Write bit P1.4
02: A0 bit P1.5
03: CS bit P1.6
04: CLK bit P1.7
05:
06: KirimPerintah:
07: CLR A0 ; A0=0 : Command mode
08: SJMP OutByte
09: ;
10: KirimASCII:
11: SETB A0 ; A0=1 : Character mode
12: OutByte:
13: CLR CS ; selama proses ini CS=’0’
14: PUSH A ; simpan dulu
15: SWAP A ; A0..A3 dan A4..A7 tukar tempat
16: ACALL OutNibble ; outputkan A4..A7
17: POP A ; ambil kembali simpanan
18: ACALL OutNibble ; outputkan A0..A3
19: SETB CS ; proses selesai, CS kembali = ‘1’
20:
21: ***** Membuat 16 pulsa CLK
22: MOV R6,#32
23: Buat16CLK:
24: CPL CLK ; CLK dibalik, ‘0’->’1’ dan ‘1’->’0’
25: DJNZ R6,Buat16CLK ;sebanyak 32 kali
26: RET
27: ;
28: OutNibble:
29: CLR Write ; ‘0’-kan dulu kaki WR SEED1200
30: ANL A,#$0F ; hanya A.0..A3 yang dipakai
31: MOV R6,A ; simpan dulu
32: MOV A,P1 ; ambil nilai yang sudah ada di P1
33: ANL A,#$F0 ; pertahankan nilai A.4..A.7
34: ORL A,R6 ; gabungkan dengan simpanan A.0..A.3
35: MOV P1,A ; siapkan ke SED1200
36: SETB Write ; data diambil SED1200
37: RET
Mengatur Tampilan LCD SED1200
SED1200 mempunyai seperangkat perintah untuk mengatur tata kerjanya, perangkat perintah tersebut terlihat dalam Tabel 1.
SED1200 merupakan tampilan LCD 1 baris yang bisa menampilkan 20 huruf, meskipun demikian dalam chip SED1200 tampilan ini disusun sebagai tampilan LCD 2 baris dan masing-masing baris terdiri dari 10 huruf. Tampilan ini bisa di-nyala/padamkan dengan kelompok perintah Display On/Off.
Kelompok perintah Line Select dipakai untuk menentukan banyaknya baris yang akan dipakai. Sedangkan kelompok perintah Cursor Address dipakai untuk memilih baris tampilan yang dipakai.
Perintah-perintah pengaturan cursor terdiri atas Cursor On/Off, Cursor Font yang dipakai untuk menentukan bentuk cursor, bisa berupa garis bawah atau satu blok titik. Cursor Blink dipakai untuk menentukan apakah cursor ber-kedip sedangkan Cursor Direction dipakai untuk menentukan arah gerak cursor, ke kanan atau ke kiri.
Untuk memudahkan pembuatan program, Tabel 1 ditulis dalam format assembler seperti terlihat dalam Potongan Program 3. Dengan adanya tabel dalam Potongan Program 3 tersebut, selanjutnya untuk mengatur SED1200 tidak perlu lagi menulis kombinasi 0 dan 1 seperti terlihat di Tabel 1, tapi cukup menulis sebagai berikut:
MOV A,#ResetSED1200
LCALL KirimPerintah
.. .. ..
Potongan Program dibentuk dengan Assembler Directive EQU, artinya hanya sekedar ‘pemberitahuan’ pada assembler bahwa selanjutnya kalau menjumpai kata SystemRest anggaplah sebagai bilangan biner 00010000 dan lain sebagainya. Susunan program seperti ini, sama sekali tidak menempati memori microcontroller.
Potongan Program 3 Daftar Perintah Pengatur SED1200
01: ResetSED1200 EQU %00010000
02: ;
03: Tampilan1Baris EQU %00010010
04: Tampilan2Baris EQU %00010011
05: ;
06: DisplayOff EQU %00001100
07: DisplayOn EQU %00001101
08: ;
09: TanpaCursor EQU %00001110
10: PakaiCursor EQU %00001111
11: ;
12: GarisBawah EQU %00001000
13: Blok EQU %00001001
14: ;
15: TidakKedip EQU %00001010
16: Berkedip EQU %00001011
17: ;
18: CursorKeKanan EQU %00000100
19: CursorKeKiri EQU %00000101
20: ;
21: KeBarisSatu EQU %10000000
22: KeBarisDua EQU %11000000
Tata kerja SED1200 harus ditentukan terlebih dulu sebelum tampilan itu dipakai, Potongan Program 4 merupakan contoh persiapan pemakaian SED1200.
Baris 3 dan 4 adalah baris yang harus ditambahkan jika SED1200 dirangkai dengan AT89C2051 seperti Gambar 2 dan dikendalikan dengan Potongan Program 2. Kedua baris ini menentukan keadaan awal sinyal Write dan CS, harus =’1’.
Perintah pertama yang harus diberikan adalah ResetSED1200 (baris 6 dan 7), perintah-perintah lain diberikan sesuai dengan kebutuhan, tapi perintah DisplayOn pada baris 19 dan 20 harus ada.
Potongan Program 4 Mempersiapkan tata kerja SED1200
01: ; ***** Initialize EPSON SED1200 LCD Module
02: SiapkanSED1200:
03: SETB Write ; level tegangan baku
04: SETB CS
05:
06: MOV A,#ResetSED1200
07: ACALL KirimPerintah
08: MOV A,#Tampilan2Baris
09: ACALL KirimPerintah
10:
11: MOV A,#KeBarisSatu
12: ACALL KirimPerintah
13: MOV A,#GarisBawah
14: ACALL KirimPerintah
15: MOV A,#PakaiCursor
16: ACALL KirimPerintah
17: MOV A,#Berkedip
18: ACALL KirimPerintah
19: MOV A,#DisplayOn
20: ACALL KirimPerintah
21: RET
Potongan-potongan Program di atas berisi perangkat program untuk mengendalikan LCD SED1200 dengan AT89C51 sesuai dengan Gambar.