13 Oktober 2008

Epson SED1200 LCD Module

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 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 mau­pun 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 DB0..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 DB0..DB3. Pengambilan data ini tepatnya terjadi pada saat WR berubah dari ‘0’ menjadi ‘1’.

Gambar 1
Proses pengiriman data ke SED1200

Interface ke AT89C51

Sinyal di Gambar 1 setara dengan sinyal-sinyal MCS51 pada saat AT89C51 menger­jakan 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:

· DB0..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 labora­torium, 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.

Gambar 2
Hubungan SED1200 ke AT89C51

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 BA14) dan kaki C (terhubung ke A15) semuanya bernilai ‘1’. Keadaan ini terpenuhi kalau pada saat instruksi MOVX@DPTR,A dilaksanakan nilai DPTR berkisar antara 111 (terhubung ke 0 0000 0000 0000 (E000 heksadesimal) dan 1111 1111 1111 1111 (FFFFalamat dasar$E000 (awalan $ artinya bilangan heksadesimal). heksadesimal). Dalam hal ini dikatakan SED1200 mempunyai

· 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.


Gambar 3
Hubungan SED1200 ke AT89C2051

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 A4..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 SED1200. 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 A0..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 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.

Tabel 1
Daftar Perintah Pengatur SED1200

Jenis Perintah

Input pertama

Input kedua

Keterangan

D3

D2

D1

D0

D3

D2

D1

D0

System Reset

0

0

0

1

0

0

0

0

Line Select

0

0

0

1

0

0

1

0

Tampilan 1 baris

0

0

0

1

0

0

1

1

Tampilan 2 baris

Display On/Off

0

0

0

0

1

1

0

0

Tampilan aktip

0

0

0

0

1

1

0

1

Tampilan padam

Cursor On/Off

0

0

0

0

1

1

1

0

Tidak pakai cursor

0

0

0

0

1

1

1

1

Pakai Cursor

Cursor Font

0

0

0

0

1

0

0

0

Cursor : Garis bawah

0

0

0

0

1

0

0

1

Cursor : semua titik nyala

Cursor Blink

0

0

0

0

1

0

1

0

Cursor berkedip

0

0

0

0

1

0

1

1

Cursor tak berkedip

Cursor Direction

0

0

0

0

0

1

0

0

Cursor bergerak ke kanan

0

0

0

0

0

1

0

1

Cursor bergerak ke kiri

Cursor Address

1

0

0

0

0

0

0

0

Pindah ke baris pertama

1

1

0

0

0

0

0

0

Pindah ke baris kedua

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 010000

02: ;

03: Tampilan1Baris EQU 010010

04: Tampilan2Baris EQU 010011

05: ;

06: DisplayOff EQU 001100

07: DisplayOn EQU 001101

08: ;

09: TanpaCursor EQU 001110

10: PakaiCursor EQU 001111

11: ;

12: GarisBawah EQU 001000

13: Blok EQU 001001

14: ;

15: TidakKedip EQU 001010

16: Berkedip EQU 001011

17: ;

18: CursorKeKanan EQU 000100

19: CursorKeKiri EQU 000101

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



Ikuti Blog ini

Langganan

Mau dapet Update-an Blog ini lewat e-mail? Masukkin aja alamat Email kamu disini:

Dikirim Oleh FeedBurner