Berhubungan dengan Dunia Nyata I: LCD, ADC, dan Sensor-sensor

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.
Operasi LCD
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.
Penjelasan pin LCD
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.
RS, register Select
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
Untuk mengirimkan beberapa "Intruksi Command" seperti pada tabel 12-2 pada LCD, maka buatlah pin RS = 1. Sedang untuk "Intruksi Data" buatlah RS = 0. Selanjutnya kirim pulsa Tinggi-ke-Rendah pada E agar LCD segera melaksanakan tugasnya. Hal tersebut ditunjukkan pada kode di bawah ini. Dan lihat pula gambar 12-2.
;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.

Gambar 12-2. Koneksi untuk LCD
;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.
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

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
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)
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.
Vin(+) dan Vin(-)
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
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.

Gambar 12-6 Pewaktuan Read dan Write pada ADC0804
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.

Gambar 12-7 Hubungan ADC0804 dengan sumber clock mandiri

 
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

Gambar 12-8 Hubungan ADC0804 dengan sumber clock XTAL2 milik 8051
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 suhu LM34 dan LM35
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

0 Response to " Berhubungan dengan Dunia Nyata I: LCD, ADC, dan Sensor-sensor "

Welcome In Kode Blogger

Contoh Sliding Login Dengan JQuery

Disamping ini adalah contoh Sliding Login menggunakan JQuery. Login Form Disamping hanya Contoh dan tidak dapat digunakan layaknya Login Form FB, Karena Blog ini terbuka untuk umum tanpa perlu mendaftar menjadi Member

Tutorial Blog

Untuk membuatnya Silahkan : Klik Disini

Member Login

Lost your password?

Not a member yet? Sign Up!