Setelah anda menamatkan bab ini , diharapkan anda dapat :
ð Memaparkan alasan bahwa LCD dapat menggantikan peran LED secara luas
ð Menjelaskan fungsi-fungsi pin-pin LCD yang umum
ð Memaparkan kode-kode perintah untuk memprogram LCD
ð Menghubungkan LCD dengan 8051
ð Memprogram 8051 untuk mengirim Data atau Command pada LCD
ð Menghubungkan Chip ADC pada 8051
ð Menghubungkan sensor suhu pada 8051
ð Menjelaskan proses pencuplikan data menggunakan chip ADC
ð Menjelaskan fungsi pin-pin pada chip ADC yang umum
ð Menjelaskan fungsi dari IC sensor suhu presisi
ð Menjelaskan kondisi sinyal dan pengaruhnya pada pencuplikan data
Bab ini akan menggali beberapa aplikasi dunia nyata pada 8051. Kita akan menjelaskan bagaimana menghubungkan 8051 dengan peralatan seperti LCD, ADC, dan sensor-sensor. Pada SubBAB 12.1, kita akan ditunjukkan cara menghubungkan LCD dengan 8051. Pada SubBAB 12.2, kita akan dipaparkan hubungan ADC dengan sensor-sensor dan juga hubungannya dengan 8051.
SubBAB 12.1 Menguhubungkan LCD pada 8051
Pada bagian ini kita akan menjelaskan mode operasi dari LCD, dan kemudian menjelaskan bagaimana pemprogram dan menguhubungkan LCD pada 8051.
di tahun-tahun belakangan ini LCD terbukti telah mengambil alih peranan LED (LED 7-segmen atau LED multi-segmen lainnya). Hal ini karena beberapa sebab:
- Harga LCD yang terus semakin murah.
- Kemampuan untuk menampilkan angka, karakter, dan gambar. Hal ini berbeda dengan dengan LED yang terbatas dalam angka-angka, dan hanya menampilkan beberapa karakter saja.
- Dilain pihak LCD memiliki pengontrol refresh tersendiri, hal ini membebaskan CPU dari tugas mr-refresh LCD. Berbeda dengan LED yang harus di-refresh oleh CPU atau oleh peralatan lain agar LED dapat terus menamplkan datanya.
- Sangat mudah memprogram untuk karakter dan grafis.
LCD yang dibahas pada bagian bab ini adalah yang memilki 14 pin ditambah 2 pin untuk backligth. Adapun fungsi setiap pin diperlihatkan pada Table 12-1. Dan Gambar 12-1 menunjukkan posisi pin tersebut pada beberapa LCD.
Tabel 12.1: Penjelasan Pin pad LCD
Pin | Simbol | I/O | Keterangan |
1 | Vss | – | Ground |
2 | Vcc | – | Catu daya +5 Volts |
3 | Vee | – | Pengatur Kontras Layar |
4 | RS | I | RS = 0 untuk reg. Command RS = 1 untuk reg. Data |
5 | R/W | I | R/W = 0 untuk Write R/W = 1 untuk Read |
6 | E | I/O | Enable (Strobe) |
7 | DB0 | I/O | Bus Data 8-bit |
8 | DB1 | I/O | Bus Data 8-bit |
9 | DB2 | I/O | Bus Data 8-bit |
10 | DB3 | I/O | Bus Data 8-bit |
11 | DB4 | I/O | Bus Data 8-bit |
12 | DB5 | I/O | Bus Data 8-bit |
13 | DB6 | I/O | Bus Data 8-bit |
14 | DB7 | I/O | Bus Data 8-bit |
Vcc, Vss, dan Vee
Jika Vss dan Vss masing-masing berfungsi sebagai jalur arus catu daya +5V dan Ground-nya. Vee digunakan untuk mengontrol kontras dari tampilan LCD. Yakni dilakukan dengan menghubungkan pin ini dengan resistor 1 kohms atau lebih rendah lagi, pada ground.
Ada 2 buah register yang penting pad LCD. pin RS inilah yang digunakan untuk memilih register tersebut. Jika RS = 0, maka register kode "Instruction Command" yang sedang kita pilih, yang dapat digunakan misalnya untuk membersihkan display, memindahkan kursor, dll. Jika RS = 1 maka register "Data" yang sedang kita pilih, yang akan membuat setiap data yang kita kirimkan akan langsng ditampilkan pada LCD sesuai dengan daftar karakter yag dipunyainya.
R/W,read/write
Input R/W membuat kita bisa menulis/mengirimkan data pada LCD atau membaca data dari LCD. RW = 0 untuk menulis, dan R/W = 1 untuk membaca. Dalam praktek sangat jarang data dari LCD dibaca, sehingga dalam beberapa rancangan, pin R/W ini langsung dihubungkan pada ground, demi menghemat port mikrokontroller.
E, enable
Fungsinya mirip dengan strobe. Setiap proses yang hendak kita lakukan akan menjadi "sah" setelah ada pulsa Tinggi-ke-Rendah pada pin ini. Setiap data yang dikirimkan melalui pin data, akan segera di latch di dalam LCD. Dan LCD dapat mengerjakan tugasnya menurut data yang baru saja dia terima.
D0-D7
Pin data 8-bit, D0-D7 digunakan untuk mengirimkan inforamsi ke LCD ataupun utuk membaca isi dari register internal dari LCD.
Untuk menampilkan abjad dan angka, kita harus mengirimkannya dalam kode ASCII, untuk abjad A-Z, dan a-z, termasuk angka 0-9 pada ke-8-pin tersebut dengan mengatur pin RS = 1.
Ada pula beberapa kode perintah yang digunakan untuk membuat LCD membersihkan layarnya atau memindahkan kursor ke kiri, kanan , atau ke posisi home, atau membuat kursor yang berkedip. Tabel 12.2 mendaftar beberapa kode "Intruction Command".
Kita dapat membuat RS = 0 untuk memeriksa bit bendera busy, demi melihat apakah LCD sudah siap untuk menerima data selanjutnya. Bit bendera busy menggunakan pin D7 dan bisa dilihat saat R/W = 1 dan RS = 0. Jika kemudian saat R/W = 1 dan RS = 0, dan ternyata pin D7 = 1 maka berarti bendera busy = 1. Artinya LCD masih sibuk dalam melaksanakan operasi internalnya. Segera setelah busy = 0, maka kita dapat mengirimkan data berikutnya pada LCD. Catatan: ada 2 metode dalam penulisan LCD ini. (1) adalah dengan memeriksa busy flag, untuk kemudian mengirimkan data berikutnya. dan (2) dengan membuat tundaan. Sedapat mungkin waktu tundaan adalah cukup dari waktu yang dibutuhkan oleh LCD dalam mengerjakan setiap instruksinya. (Bisa dibaca pada data sheet). Cara yang ke 2 inilah yang adalah cara yang paling sederhana, namun mampu memberikan hasil yang sama atau lebih baik.
Tabel 12.2: Kode-kode Command LCD
Hex | Instruksi | Keterangan |
1 | Clear Display Screen | Bersihkan Layar dan kembali semula |
2 | Return Home | Kursor kembali semula |
4 | Decrement cursor | Geser kursor ke kiri |
6 | Increment cursor | Geser kursor ke kanan |
5 | Shift Display rigth | Geser Layar dan isi ke kanan 1 kali |
7 | Shift Display left | Geser Layar dan isi ke kiri 1 kali |
8 | Display Off,Cursor Off | – |
A | Display Off,Cursor On | – |
C | Display On, Cursor Off | – |
E | Display On,Cursor Blinking | – |
F | Display On,Cursor Blinking | – |
10 | Shift cursor left | Geser kursor ke kiri |
14 | Shift cursor rigth | Geser kursor ke kanan |
18 | Shift entire display Left | Geser Layar dan isi ke kiri 1 kali |
1C | Shift entire display rigth | Geser Layar dan isi ke kanan 1 kali |
80 | force cursor to beginning of 1st line | pindahkan kursor ke kiri atas |
C0 | force cursor to beginning of 2nd line | pindahkan kursor ke kiri bawah |
38 | Setup LCD 2lines, 5×7 matrix | kode inisialisasi LCD |
Gambar 12-1 Posisi Pin untuk beberapa jenis LCD dari Optrex
Mengirimkan perintah dan Data pada LCD dengan tundaan
;memanggil tundaan waktu sebelum mengirimkan Data/Command
; P1.9-P1,.7 terhubung dengan pin data D0-D7 di LCD
; P2.0 terhubung pada pin RS
; P2.1 terhubung pada pin R/W
; P2.2 terhubung pada pin E
ORG 0000h
MOV A,#38h ;init LCD 2 baris / matrix 5×7
ACALL COMNWRT ;panggil subrutin Command
ACALL DELAY ;beri waktu sedikit bagi LCD
MOV A,#0Eh ;Display On , kursor On
ACALL COMNWRT ;subrutin Command
ACALL DELAY ;Tunda
MOV A,#01h ;Clear LCD
ACALL COMNWRT ;subrutin Command
ACALL DELAY ;Tunda
MOV A,#06h ;pindahkan kursor ke kanan
ACALL COMNWRT ;subrutin Command
ACALL DELAY ;Tunda
MOV A,#084h ;pindahkan kursor ke baris 1 pos. 4
ACALL COMNWRT ;subrutin Command
ACALL DELAY ;Tunda
MOV A,#’N' ;tampilkan abjad "N"
ACALL DATAWRT ;panggil subrutin Display
ACALL DELAY ;Tunda
MOV A,#’O' ;tampilkan abjad "O"
ACALL DATAWRT ;panggil subrutin Display
ACALL DELAY ;Tunda
ULANG: SJMP ULANG ;tunggu di sini
COMNWRT:
MOV P1,A ;salin isi A ke P1
CLR P2.0 ;RS=0 utk Command
CLR P2.1 ;R/W=0 utk Write
SETB P2.2 ;E=1 untuk ..
CLR P2.2 ;E=0 .. pulsa H-ke-L
RET
DATAWRT:
MOV P1,A ;salin isi A ke P1
SETB P2.0 ;RS=1 utk Data
CLR P2.1 ;R/W=0 utk Write
SETB P2.2 ;E=1 untuk ..
CLR P2.2 ;E=0 .. pulsa H-ke-L
RET
DELAY:
MOV R3,#50 ;50 lebih untuk fosc yg tinggi
DELAY2: MOV R4,#255
DELAY1: DJNZ R4,DELAY1 ;tunggu sampai R4 = 0
DJNZ R3,DELAY2
RET
END
Mengirim Code atau Data pada LCD dengan memeriksa bendera Busy
Contoh kode sebelumnya ditunjukkan bagaimana menggunakan LCD tanpa perlu memeriksa busy flag. Perhatikan kita harus menunggu beberapa lama di antara masing-masing pengiriman data atau command. Namun ada cara yang lebih efisien dan cepat, yakni dengan memonitor busy flag sebelum memberikan data atau command yang baru pada LCD. Hal ini ditunjukkan seperti di bawah ini.
;memeriksa busy flag sebelum mengirimkan Data/Command
; P1.9-P1,.7 terhubung dengan pin data D0-D7 di LCD
; P2.0 terhubung pada pin RS
; P2.1 terhubung pada pin R/W
; P2.2 terhubung pada pin E
ORG 0000h
MOV A,#38h ;init LCD 2 baris / matrix 5×7
ACALL COMMAND ;panggil subrutin Command
MOV A,#0Eh ;Display On , kursor On
ACALL COMMAND ;subrutin Command
MOV A,#01h ;Clear LCD
ACALL COMMAND ;subrutin Command
MOV A,#06h ;pindahkan kursor ke kanan
ACALL COMMAND ;subrutin Command
MOV A,#084h ;pindahkan kursor ke baris 1 pos. 4
ACALL COMMAND ;subrutin Command
MOV A,#’N' ;tampilkan abjad "N"
ACALL DATA_DISP ;panggil subrutin Display
MOV A,#’O' ;tampilkan abjad "O"
ACALL DATA_DISP ;panggil subrutin Display
ULANG: SJMP ULANG ;tunggu di sini
COMMAND:
ACALL READY ;apakah LCD siap
MOV P1,A ;salin isi A ke P1
CLR P2.0 ;RS=0 utk Command
CLR P2.1 ;R/W=0 utk Write
SETB P2.2 ;E=1 untuk ..
CLR P2.2 ;E=0 .. pulsa H-ke-L
RET
DATA_DISP:
ACALL READY ;apakah LCD siap
MOV P1,A ;salin isi A ke P1
SETB P2.0 ;RS=1 utk Data
CLR P2.1 ;R/W=0 utk Write
SETB P2.2 ;E=1 untuk ..
CLR P2.2 ;E=0 .. pulsa H-ke-L
RET
READY:
SETB P1.7 ;buat P1.7 sebagai port input
CLR P2.0 ;RS=0 utk mengakses reg Command
SETB P2.1 ;R/W=1 utk Read
;perintah baca reg dan memeriksa busy flag
READY1: SETB P2.2 ;E=1 untuk ..
CLR P2.2 ;E=0 .. pulsa H-ke-L
JB P1.7,READY1 ;Tunggu sampai siap
RET
END
Perhatikan program di atas, bahwa busy flag adalah D7 dalam register Command. Untuk membaca register command, kita harus membuat R/W=1, RS=0, dan pulsa H-ke-L pada pin E. Jika setelah proses tersebut ternyata D7 = 1 maka LCD adalah masih sibuk, dan seharusnya tidak boleh ada data yang dipaksakan untuk dikirim. Hanya saat D7=0 kita dapat mengirimkan data atau command baru pada LCD. Harap dicatat pula bahwa metode ini tidak dibutuhkan delay lebih banyak. Pengiriman data akan sedikit jauh lebih cepat dan efisien. ; P1.9-P1,.7 terhubung dengan pin data D0-D7 di LCD
; P2.0 terhubung pada pin RS
; P2.1 terhubung pada pin R/W
; P2.2 terhubung pada pin E
ORG 0000h
MOV A,#38h ;init LCD 2 baris / matrix 5×7
ACALL COMMAND ;panggil subrutin Command
MOV A,#0Eh ;Display On , kursor On
ACALL COMMAND ;subrutin Command
MOV A,#01h ;Clear LCD
ACALL COMMAND ;subrutin Command
MOV A,#06h ;pindahkan kursor ke kanan
ACALL COMMAND ;subrutin Command
MOV A,#084h ;pindahkan kursor ke baris 1 pos. 4
ACALL COMMAND ;subrutin Command
MOV A,#’N' ;tampilkan abjad "N"
ACALL DATA_DISP ;panggil subrutin Display
MOV A,#’O' ;tampilkan abjad "O"
ACALL DATA_DISP ;panggil subrutin Display
ULANG: SJMP ULANG ;tunggu di sini
COMMAND:
ACALL READY ;apakah LCD siap
MOV P1,A ;salin isi A ke P1
CLR P2.0 ;RS=0 utk Command
CLR P2.1 ;R/W=0 utk Write
SETB P2.2 ;E=1 untuk ..
CLR P2.2 ;E=0 .. pulsa H-ke-L
RET
DATA_DISP:
ACALL READY ;apakah LCD siap
MOV P1,A ;salin isi A ke P1
SETB P2.0 ;RS=1 utk Data
CLR P2.1 ;R/W=0 utk Write
SETB P2.2 ;E=1 untuk ..
CLR P2.2 ;E=0 .. pulsa H-ke-L
RET
READY:
SETB P1.7 ;buat P1.7 sebagai port input
CLR P2.0 ;RS=0 utk mengakses reg Command
SETB P2.1 ;R/W=1 utk Read
;perintah baca reg dan memeriksa busy flag
READY1: SETB P2.2 ;E=1 untuk ..
CLR P2.2 ;E=0 .. pulsa H-ke-L
JB P1.7,READY1 ;Tunggu sampai siap
RET
END
Datasheet LCD
Dalam LCD kita bisa mengambil data pada sebarang lokasi. Berikut ini digambarkan alamat lokasi dan bagaimana mereka bisa diakses.
RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
0 0 1 A A A A A A A
Dimana AAAAAAA = 0000000 – 0100111 untuk baris 1 dan AAAAAAA = 1000000 – 1100111 untuk baris 2. Lihat tabel 12-3.
Tabel 12-3:Pengalamatan LCD
DB7 DB6 DB5 DB4 DB3 DB2 DB2 DB1 DB0
Line 1 (min) 1 0 0 0 0 0 0 0 0
Line 1 (max) 1 0 1 0 0 0 1 1 1
Line 2 (min) 1 1 0 0 0 0 0 0 0
Line 2 (max) 1 1 1 0 0 0 1 1 1
Line 1 (max) 1 0 1 0 0 0 1 1 1
Line 2 (min) 1 1 0 0 0 0 0 0 0
Line 2 (max) 1 1 1 0 0 0 1 1 1
Jangkauan alamat atas dapat dicapai sampai 0100111 untuk LCD dengan lebar 40-karakter di mana LCD dengan lebar 20-karakter nilainya sampai 010011 (19 desimal). Perhatikan bahwa jangkauan atas 0100111 (binary) = 39 desmimal yang mana setara dengan lokasi 0 s/d 39 pada LCD ukuran 40×2.
Dari diskusi di atas kita dapat mengambil alamat dari posisi kursor untuk beberapa jenis LCD. Lihat gambar 12-3. Perhatikan bahwa semua alamat adalah dalam bilangan HEX. Gambar 12-4 menampilkan diagram pewaktuan LCD. Table 12-4 memberikan daftar detil dari Instruksi dan Perintah untuk LCD. Dan ringkasannya dapat kita lihat pada Tabel 12-2. 16 x 2 LCD 80 81 82 83 84 85 86 … 8F C0 C1 C2 C3 C4 C5 C6 … CF |
20 x 1 LCD 80 81 82 83 … 93 |
20 x 2 LCD 80 81 82 83 … 93 C0 C1 C2 C3 … D3 |
20 x 4 LCD 80 81 82 83 … 8F C0 C1 C2 C3 … CF 94 95 96 97 … A7 D4 D5 D6 D7 … E7 |
40 x 2 LCD 80 81 82 83 … A7 C0 C1 C2 C3 … E7 |
Gambar 12-3 Alamat Cursor dalam beberapa LCD
Gambar 12.4: LCD Timing Table 12-4: Daftar Instruksi LCD
SubBAB 12.2: Menghubungkan 8051 dengan ADC, Sensor-sensor
Pada bagian ini kita akan menggali bagaimana menghubngkan chip ADC (analog to digital Converter) dan sensor suhu dengan 8051. Kemudian kita akan meneliti karakteristik sensor suhu LM35 dan melihat bagaimana menghubungkannya pada 8051.
ADC Pada bagian ini kita akan menggali bagaimana menghubngkan chip ADC (analog to digital Converter) dan sensor suhu dengan 8051. Kemudian kita akan meneliti karakteristik sensor suhu LM35 dan melihat bagaimana menghubungkannya pada 8051.
Analog-to-Digital Converter adalah sebuah peralatan yang paling sering digunakan untuk melakukan pencuplikan data (data acquisition). Komputer Digital selalu menggunakan nilai-nilai biner (discrete), tapi dalam dunia nyata semua adalah analog (continuous). Suhu, tekanan (gas atau cair), kelembaban, dan kebisingan adalah beberapa contoh dari nilai-nilai fisika yang akrab dengan kita. Nilai fisika tersebut harus dikonversi menjadi nilai listrik dengan alat yang digolongkan sebagai tranduser. Tranduser kadang-kadang juga disebut sebagai sensor. Masing-masing sensor misalnya Suhu, Velocity, Tekanan, Cahaya, dan yang lainnya, memiliki output besaran listrik. Dan kita butuh sebuah konverter analog-ke-digital untuk mengartikan besaran besaran listrik tersebut menjadi besaran-besaran angka digital yang dimengerti komputer. Di dunia mikrokontroller chip yang sudah terkenal adalah ADC0804.
Chip ADC0804
Chip ADC0804 adalah konverter analog-ke-digital, turunan langsung dari keluarga seri ADC800 buatan National Semiconductor. Sekarang chip sejenis sudah dibuat oleh beberapa pabrik dan merek berbeda. Dia bekerja pada tegangan 5 Volts dan memiliki resolusi 8-bit. Selain resolusi, waktu konversi (convertion time) menjadi parameter yang sangat penting pula. Convertion Time ini menunjukkan berapa lama waktu yang dibutuhkan oleh ADC untuk melakukan 1 kali konversi. Pada ADC0804 Convertion Time ditentukan oleh nilai clock yang ad pada pin-pin CLK R dan CLK IN, dan paling cepat adalah 110uS. Pin-pin dalam ADC0804 adalah sebagai berikut ini..
CS Chip Select adalah input dengan aktif rendah yang digunakan untuk mengaktifkan chip ADC0804. Agar kita dapat megakses chip ini, tentu saja pin ini harus dibuat rendah terlebih dahulu.
RD (read)
Pin ini adalah input dan aktif rendah. Setelah ADC melaksanankan tugas peng-konversi-an, ADC akan menyimpan hasilnya pada register internalnya. pin RD inilah yang digunakan untuk mengeluarkan data pada register internal tersebut, keluar dari ADC0804 melalui pin D0-D7. Saat CS=0, dan adanya pulsa tinggi-ke-rendah pada RD maka hasil konversi 8-bit akan diteruskan pada pin D0-D7. Pin RD ini juga disebut sebagai "Output Enable".
WR (Write, lebih cocokdisebut Start Convr.)
Ini adalah input aktif rendah yang digunakan untuk menginformasikan ADC0804 untuk segera memulai konversi. Jika CS = 0 dan ada pulsa tinggi-ke-rendah pada WR, maka ADC akan memulai proses konversi nilai alnalog dari pin Vin menjadi nilai digital 8-bit. Lama waktu konversi tergantung besaran kompoenen yang kita pasanag pada CLK IN dan CLK R seperti yang sudha dijelaska sebellumya.Begitu konversi selesai maka pin INTR akan langsung oleh ADC dibuat rendah.
CLK IN dan LCK R
CLK IN adalah pin input yang dihubungkan pada sumber clock eksternal, jika kita mengunakan sumber clock eksternal untuk pewaktuan/timming. Namun, ADC0804 juga memiliki pembangkit clock sendiri di dalamnya. Untuk menggunakan pembangkit clock tersebut kita hanya membutuhkan sebuah capasitor dan sebuah resistor yang dihubugkan pada pin CLK IN dan CLK R tersebut. Cara menghubungkan ke 2 komponen dan ke 2 pin tersebut digambarkan pada gambar 12-5. Dalam kasus ini frekuensi clock ditentukan dari perhitungan sbb:
f= 1/(1.1 R C) CLK IN adalah pin input yang dihubungkan pada sumber clock eksternal, jika kita mengunakan sumber clock eksternal untuk pewaktuan/timming. Namun, ADC0804 juga memiliki pembangkit clock sendiri di dalamnya. Untuk menggunakan pembangkit clock tersebut kita hanya membutuhkan sebuah capasitor dan sebuah resistor yang dihubugkan pada pin CLK IN dan CLK R tersebut. Cara menghubungkan ke 2 komponen dan ke 2 pin tersebut digambarkan pada gambar 12-5. Dalam kasus ini frekuensi clock ditentukan dari perhitungan sbb:
Dimana R biasanya adalah resistor 10 k Ohms, dan C biasanya 150 PF. Sehingga akan didapat f = 606 kHz. Dan dalam kasus ini kita akan mendapatkan convertion time = 110uS.
Gambar 12-5 Menguji ADC0804 pada mode Free Running
INTR (Interupt, lebih cocok disebut :"koversi selesai")
Ini adalah output pin dengan aktif rendah. Normalnya pin ini adalah tinggi,dan dia akan segera rendah hanya saat setelah selesainya proses konversi. Pin ini biasanya digunakan untuk memberitahukan CPU bahwa konversi telah selesai dan CPU bisa mengambil datanya pada pin-pin data.
Ini adalah 2 buah input deferensial di mana sejatinya Vin = Vin(+) – Vin(-). Jika Vin(-) dihubungkan pada bumi (ground) maka berarti nilai pada Vin(+) adalah sama dengan Vin, yakni nilai yang akan dikonversi.
Vcc
Ini adalah pin untuk catu daya 5 volts. Selain itu, jika pin 9 atau pin Vref/2 dibiarkan tidak terhubung maka tinggi tegangan Vcc inilah yang akan dijadikan Vref-nya. Hal ini akan dijelaskan kemudian.
Vref/2
Pin 9 ini adalah input tegangan yang digunakan sebagai tegangan referensi. Jika pin dibiarkan tidak terhubung, maka jangkauan tegangan input analog adalah mulai dari 0 – 5 Volts. Pin ini sangat penting jika kita ingin mengubah ADC dipekerjakan dalam jangkauan selain 0-5V tersebut. Misalnya agar ADC0804 dapat bekerja dalam jangkauan 0 – 4 Volts, maka kita harus menggunakan pin 9 ini dan menghubungkannya pada tegangan 2 Volts. Tabel 1.5 menunjukkan jangkauan Vin dengan Vref/2 berbeda.
Table 12.5: Hubungan Vref/2 dan jangkauan Vin
Vref/2 (V) Vin (V) Ukuran Step (mV)
tdk terhubung )* 0 – 5 5/256 = 19.53
2.0 0 – 4 4/256 = 15.62
1.5 0 – 3 3/256 = 11.71
1.28 0 – 2.56 2.56/256 = 10
1.0 0 – 2 2/256 = 1.81
0.5 0 – 1 1/256 = 3.90
Catatan Vcc= 5 Volts
* Saat tidak terhubung (terbuka), Vref/2 terukur 2.56 secara internal, diukur terhadap Vcc=5 Volts. Ukuran Step (resolusi) adalah perubahan terkecil yang dapat dibaca oleh ADC.
D0 – D7
ke 8-pin ini adalah output data digital. Mereka memiliki 3 status. Pin ini akan merepresentasikan nilai hasil konversi terakhir yang dilakukan ADC, hanya saat pin RD = 0.
Dout = Vin/Step Size D0 – D7
ke 8-pin ini adalah output data digital. Mereka memiliki 3 status. Pin ini akan merepresentasikan nilai hasil konversi terakhir yang dilakukan ADC, hanya saat pin RD = 0.
Dimana Dout adalah data output digital dalam desimal, dan Vin = adalah input analog dalam tegangan, dan Step Size (resolusi) adalah nilai perubahan terkecil, dimana (2 x Vref/2)/256 untuk ADC 8-bit.
Analog Ground dan Digital Ground
Ini adalah 2 pin input yang menghubungkan ground dari 2 bagian dalam chip ADC0804, yakni bagian analog dan bagian digital. Digital Ground adalah pasangan dari pin Vcc. Alasan kenapa terdapat 2 buah ground adalah agar masing-masing rangkaian dapat benar-benar sedapat mungkin terpisah satu sama lain. Sehingga pensaklaran digital yang terjadi terutama pada pin D0-D7 tidak mempengaruhi Vin, sehingga ditakutkan hasil yang diperoleh menjadi tidak sesuai dengan yang diharapkan. Semakin terpisah maka kualitas konversi akan menjadi semakin baik. Dalam prakteknya kita dapat menghubugkan ke 2 pin Gnd pada ground yang sama, walaupun harus sedikit mengorbankan kualitas konversi. Dalam hal masih belajar, bolehlah hal ini diabaikan. Untuk peralatan profesional, maka ground ini menjadi masalah yang sangat penting yang harus kita perhatikan.
Dari diskusi ini kita dapat menarik kesimpulan bahwa langkah-langkah berikut inilah yang harus dilakukan untuk melakukan konversi pada chip ADC0804.
1. Buatlah CS = 0 dan kirim pulsa rendah-ke-tinggi pada pin WR untuk segera melakukan konversi.
2. Selalu memonitor pin INTR. Jika INTR rendah, maka konversi selesai, dan kita dapat segera ke langkah berikutnya. Namun jika INTR masih tinggi, maka kita harus menunggu sampai dia rendah.
3. Setelah INTR rendah, maka pastikan CS=0 dan kirim pulsa tinggi-ke-rendah pada pin RD. Sehingga kita dapat segera membaca hasil konversi pada D0-D7. Sedang Timming Diagram adalah seperti pada Gambar12-6.
Menguji ADC0804
Kita bisa menguji ADC0804 menggunakan rangkaian seperti pada Gambar 12-5. Desain rangkain ini, disebut sebagai "Pengujian Model Free Running" dan ini yang direkomendasikan oleh pabrik pembuat chip. Gambar 12-5 memperlihatkan adanya sebuah potensiometer yang digunakan untuk memberikan tegangan analog variable 0 s/d 5 Volts, yang langsung dihubungkan pada pin Vin. Output biner dapat dilihat dari nyala LED. Harap diperhatikan pula dalam mode free running ini input CS selalu di-ground. Dan input WR terhubung pada output INTR. Namun menurut data sheet yang dikeluarkan oleh "National Semiconductor", bahwa WR dan INTR, keduanya sebaiknya harus dibuat rendah sesaat begitu chip dinyalakan, untuk menjamin operasi yang sempurna.
Contoh 12-1 |
Buatlah hubungan ADC0804 dengan 8051 seperti pada gambar 12-7. Dan kemudian tulis program untuk memonitor pin INTR dan baca nilai dari input analog ke Akumulator. Kemudian panggil rutin konversi Hex-to-ASCII, dan rutin Display untuk menampilkan nilai tersebut. Buat hal tersebut berulang. jawaban: ;P2.6 = WR (Start convertion need to L to H pulse) ;P2.7 when low, end-of-convertion ;P2.5 = RD (a H-to-L will read the data from ADC Chip) ;P1.0 – P1.7 = D0 – D7 of ADC0804 ; MOV P1,#0FFh ;buat P1 sebagai input ULANG: CLR P2.6 ;WR = 0 SETB P2.6 ;WR = 1 >> L-H = Mulai Konversi TUNGGU: JB P2.7,TUNGGU ;sampai selesai konversi CLR P2.5 ;RD = 0 MOV A,P1 ;Baca data ACALL HEXTOASCII ;-panggil rutin ACALL DATA_DISPLAY ;-panggil rutin SETB P2.5 ;RD = 1 untuk berikutnya SJMP ULANG Catatan : rutin Konversi Hex To ASCII lihat Bab 7 |
Perhatikan gambar 12-8, clock untuk ADC0804 datang dari kristal milik mikrokontroller. Mengingat frekuensi tersebut masih terlalu tinggi, maka kita menggunakan flip-flop type-D (74LS74) untuk membagi frekuensi tersebut 4 kali. Seperti yang nampak pada gambar kita menggunakan 2 buah flip-flop. Untuk prosesor yang menggunakan kristal lebih tinggi lagi, maka terpaksa kita juga akan menambah flip-flopnya, sehingga frekuensi clock yang diberikan masih dapat diterima oleh ADC0804.
Menghubungkan sensor suhu pada 8051
Tranduser mengkonversi data fisika seperti suhu, intensitas cahaya, aliran, dan kecepatan, menjadi sebuah sinyal listrik. Tergantung dari tranduser yang kita pakai, output keluaran yang dihasilkan bisa berupa Tegangan (Volt), Arus (Current), Resistansi (Resistance), atau kapasitas (Capacitance). Misalnya suhu diubah menjadi sinyal listrik menggunakan tranduser yang disebut dengan thermistor. Thermistor merespon perubahan suhu dengan berubahnya resistansi diri thermistor tersebut, walaupun sebenarnya respon tersebut tidak linier, seperti yang ditampilkan pada Tabel 12-6.
Tabel 12-6. Resistansi Thermistor dibanding Suhu
Temperature(C) Tf (KOhms)
0 29.490
25 10.000
50 3.893
75 1.700
100 0.817
Tabel 12-7. Petunjuk Pilihan Sensor Suhu Seri LM34
Part Range Acuuracy Output Scale
LM34A -50 F to +300 F +2.0 F 10 mV/F
LM34 -50 F to +300 F +3.0 F 10 mV/F
LM34CA -40 F to +230 F +2.0 F 10 mV/F
LM34C -40 F to +230 F +3.0 F 10 mV/F
LM34D -32 F to +212 F +4.0 F 10 mV/F
Tabel 12-8. Petunjuk Pilihan Sensor Suhu Seri LM35
Part Range Acuuracy Output Scale
LM35A -55 C to +150 C +1.0 C 10 mV/C
LM35 -55 C to +150 C +1.5 C 10 mV/C
LM35CA -40 C to +110 C +1.0 C 10 mV/C
LM35C -40 C to +110 C +1.5 C 10 mV/C
LM35D 0 C to +100 C +2.0 C 10 mV/C
Akan menjadi sangat sulit membuat sebuah program komputer/mikrokontroller untuk mendapat petunjuk suhu yang tepat dari sebuah tranduser yang tidak linier. Dengan alasan ini National Semiconductor telah meluncur seri sensor terbaik mereka yang terkenal sejak lama sampai sekarang, yakni LM34 dan LM35. Merupakan sebuah tranduser (sensor) yang sangat linier, yang bisa kita gunakan dengan sangat mudahnya.
Sensor-sensor dari seri LM34 adalah sebuah sensor suhu yang sangat presisi dalam kemasan IC TO-92. Yang mana keluarannya adalah tegangan linier yang proporsional terhadap derajat suhu Fahrenheit. LM34 tidak membutuhkan kalibrasi eksternal, karena sudah memiliki peralatan kalibrasi otomatis di dalamnya. Keluaran 10mV adalah setara dengan setiap derajat Fahrenheit. Tabel 12-7 adalah daftar pilihan untuk LM34.
Sensor-sensor dari seri LM35 adalah mirip dengan LM34, hanya saja dia memiliki tegangan keluaran yang proporsional terhadap derajat suhu Celcius (Centigrade). Seperti juga dengan LM34, sensor ini juga tidak membutuhkan kalibrasi eksternal. Setiap keluaran 10mV dari sensor ini, setara dengan setiap derajat Celcius. Tabel 12-8 menjelaskan pilihan untuk LM35. (Untuk lebih jauh tentang sensor-sensor ini kunjungi www.national.com).
Pengkondisian Sinyal dan menghubungkan LM35 dengan 8051
Pengkondisian sinyal digunakan secara luas dalam pekerjaan pencuplikan data (data acquisition). Sebuah tranduser yang paling umum menghasilkan output dalam bentuk tegangan, arus, muatan, kapasitas, dan resistansi. Namun, kita butuh untuk mengkoversi sinyal-sinyal tersebut ke dalam bentuk Voltage (tegangan), yang ujungnya nanti akan kita kirim pada konverter A-D. Konversi (modifikasi) ini biasa disebut dengan Pengkondisian sinyal. Pengkondisian sinyal dapat berupa konversi arus-ke-tegangan, atau penguatan sinyal. Misalnya, thermistor berubah resistansinya akibat suhu. Perubahan resistansi tersebut harus diterjemahkan ke dalam tegangan karena nanti kita menggunakan ADC. Lihat pada kasus menghubungkan LM35 pada ADC0804. Mengingat ADC0804 memiliki resolusi 8-bit dengan maksimum 256(2exp8) langkah dan LM35 (atau LM34) menghasilkan 10mV setiap derajat dari perubahan suhu. Kita bisa mengkondisikan Vin dari ADC0804 untuk menghasilkan Vout 2560mV (2.56V) jangkauan keluaran maksimumnya. Sehingga pada akhirnya ADC0804 akan menghasilkan keluaran 1 bilangan biner setara dengan 1 derajat suhu.
Agar ADC0804 bisa dibuat untuk memiliki skala 0 – 2560 mV saja, kita harus membuat tegangan Vref/2 menjadi setengah tegangan maksimum yang diinginkan, yakni 1.28V. Lihat Tabel 12-9, dan nilai Vref/2 diberikan Tabel 12-5.
Gambar 12-9. Pengambilan data dari Dunia Analog
Tabel 12-9. Temperature Vs Vout of ADC0804
Temp (C) Vin(mV) DOutput(D7-D0)
0 0 0000 0000
1 10 0000 0001
2 20 0000 0010
3 30 0000 0011
10 100 0000 1010
20 300 0001 1110
Gambar 12-10 Hubungan ADC0804 dan Sensor Suhu
Gambar 12-10 menunjukkan hubungan sensor suhu pada ADC0804. Perhatikan penggunaan dioda zener 3,9V untuk menstabilkan tegangan keluaran yang ada pada pot 10K, tetap 1,28 Volts. Penggunaan dioda zener tersebut untuk menghilangkan setiap fluktuasi yang disebabkan sumber catu daya yang kurang baik.
Chip ADC0808/9 dengan 8 kanal masukan Chip yang sangat berguna lainnya adalah ADC0808 atau ADC0809 dari National Semiconductor. Lihat gambar 12-11. Dimana ADC0804 hanya memiliki 1 input analog, sementara chip ini memiliki 8 input. Dengan chip ADC0808/9 ini membuat kita bisa memonitor keluaran dari 8 tranduser berbeda, semuanya hanya dari 1 chip saja. Perhatikan bahwa ADC0804 juga memiliki 8-bit output data persis seperti ADC0804. 8 kanal input analog tersebut di-multiplex dan dipilih berdasarkan Tabel 12-10 dengan menggunakan 3 pin pengalamatan A, B dan C.
Gambar 12-11. ADC0808/0809