Akuisasi data dengan remote host AT89s51 melalui serial RS232 I.
Tujuan
1. Mahasiswa mampu merealisasikan sebuah system data jarak jauh dengan remote host berbasis MCS51 yang terhubung pada pC melalui RS232. 2. Mahasiswa mampu merancang melalui ADC 0808 secara free running II.
Dasar Teori Suatu perangkat lunak dan perangkat keras akuisisi data dapat merubah komputer PC
menjadi suatu sistem akuisisi, pemroses (analisa) dan penampil data yang terpadu (Data Acquisition System). Melakukan pemrograman langsung pada tingkat register pada papan akuisisi data merupakan tingkat pemrograman yang paling sulit dalam pengembangan perangkat lunak akuisisi data. Dalam hal ini, Anda harus menentukan nilai biner yang tepat dan benar yang harus dituliskan pada register-register tersebut. Selain itu, bahasa pemrograman yang digunakan harus mampu melakukan pembacaan dan penulisan data dari atau ke papan akuisisi data yang terpasang pada komputer. Perangkat lunak akuisisi data dibagi menjadi dua macam: ( 1 ) Perangkat lunak aras-penggerak (driver-level) dan (2) Perangkat lu nak aras-aplikasi (application-level). Perangkat lunak aras-penggerak menyederhanakan pemrograman akuisisi data dengan cara menangani secara langsung pemrograman aras-rendah (low-level programing) dan memberikan Anda berbagai fungsi aras-tinggi (high-level functions) yang dapat dipanggil dalam bahasa pemrograman yang Anda gunakan. Perencanaan sistem akuisisi data jarak jauh dengan remote host berbasis AT89s51 yang terhubung pada local host melalui serial RS 232 terdiri dari ADC0808 ini bekerja secara free running. Pada mode free running, ADC akan mengeluarkan data hasil pembacaan input secara otomatis dan berkelanjutan (continue). Pada mode ini pin INTR akan berlogika rendah setelah ADC selesai melakukan konversi, logika ini dihubungkan kepada masukan WR untuk memerintahkan ADC memulai konversi kembali. Analog to Digital Converter adalah sebuah peralatan yang paling sering digunakan untuk melakukan pencuplikan data (data acquisition). Contoh mikrokontroller chip yang biasa digunakan sebagai ADC adalah ADC0809. Chip ADC0809 adalah konverter analog-kedigital, turunan langsung dari keluarga seri ADC800 buatan National Semiconductor. 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 ADC0809 Convertion Time ditentukan oleh nilai clock yang ad pada pin-pin CLK R dan CLK IN, dan paling cepat adalah 110uS. Langkah-langkah yang dilakukan untuk konversi pada chip ADC0809 adalah: 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 Gambar di bawah ini:
Ada 2 macam cara komunikasi data serial yaitu Sinkron dan Asinkron. Pada komunikasi data serial sinkron, clock dikirimkan bersama sama dengan data serial, tetapi clock tersebut dibangkitkan sendiri – sendiri baik pada sisi pengirim maupun penerima. Sedangkan pada komunikasi serial asinkron tidak diperlukan clock karena data dikirimkan dengan kecepatan tertentu yang sama baik pada pengirim / penerima. Pada komunikasi asinkron, kecepatan pengiriman data ( atau yang sering disebut dengan Baud Rate ) dan fase clock pada sisi transmitter dan sisi receiver harus sinkron. Kecepatan transmisi (baud rate) dapat dipilih bebas dalam rentang tertentu.Baud rate yang umum dipakai adalah 110, 135, 150, 300, 600, 1200, 2400, dan 9600 (bit/perdertik).Dalam komunikasi data serial, baud rate dari kedua alat yang berhubungan harus diatur pada kecepatan yang sama. Selanjutnya harus ditentukan panjang data (6,7 atau 8 bit), paritas (genap, ganjil, atau tanpa paritas), dan jumlah bit “Stop” (1, 1 ½ , atau 2 bit). Baud rate pada mode 0 adalah tertentu: pada mode 0, Baud Rate = 1/12 x Frekuensi Osilator. Baud rate pada mode 2 bergantung pada nilai bit SMOD pada SFR PCON. Jika SMOD = 0, baud rate adalah 1/64 frekuensi osilator. Jika SMOD=1, baud rate adalah 1/32 frekuensi osilator. Penentuan baud rate mode 2 adalah sebagai berikut:
Sedangkan baud rate pada mode 1 dan 3 ditentukan oleh nilai laju overflow dari Timer 1.Menggunakan Timer 1 untuk membangkitkan Baud Rate .Ketika timer 1 digunakan untuk membangkitkan clock baud rate, baud rate pada mode 1 dan 3 adalah ditentukan oleh laju overflow timer 1 dan nilai dari SMOD. Penentuan baud rate untuk mode 1 dan 3 adalah sebagai berikut:
Interupsi timer 1 harus disable pada aplikasi ini. Pada kebanyakan aplikasi, timer ini dioperasikan sebagai timer, dengan mode auto reload mode 2. Pada kasus ini baud rate diberikan dengan rumus sebagai berikut:
Gambar blok diagram sistem
III.
Peralatan Yang Digunakan
Modul MCS51
Modul ADC
Downloader
1 set PC
Power supply
IV.
V.
Setting Percobaan
Prosedur Percobaan :
1. Siapkan dan periksa kelengkapan modul MCS-51 dan modul ADC 2. Rangkai port-port ADC ke MCS-51, dan memasang jumper-jumper pada ADC dan MCS-51 seperti pada setting percobaan lalu menghubungkan dengan supply 5 volt 3. Set baud rate dengan nilai 2400 bps dan set parity 4. Pada device manager aturlah nomor port serial missal untuk mengatur com1 5. Set hyperterminal ke port yang ada dan untuk membuka hyperterminal tersebut,pilih menu accesosories communication pilih hyperterminal (hterm.exe) 6. Pilih menu properties,kemudian ASCII setup kemudian pilih echo character as type 7. Download program melalui SPI 8. Amati dan tulis hasilnya 9. Buat analisa dan kesimpulan
VI.
Hasil Percobaan : Jika password yang dimasukan benar pada hyperterminal tampilannya adalah sebagai berikut : Pilih sensor [0~7]:
Disini paswordnya adalah huruf “a” atau “A” jadi jika password yang dimasukan adalah huruf selain itu maka pada hyperterminal tidak akan muncul apa-apa. Setelah kita memilih sensor,misalnya sensor ke 4,maka tampilannya adalah sebagai berikut : Pilih sensor [0~7]: 0 Data sensor ke-0: 243 Data sensor ke-0: 243 Data sensor ke-0: 243
Hasilnya adalah data yang tampil tidak bisa secara terus menerus atau tampilan diatas dikatakan tampil secara offline.
VII.
Analisa Dari percobaan yang telah kita lakukan, kita melakukan akuisisi data. Sistem akuisisi
data dapat didefinisikan sebagai suatu sistem yang berfungsi untuk mengambil, mengumpulkan dan menyiapkan data, hingga memprosesnya untuk menghasilkan data yang dikehendaki. Untuk bisa menangkapnya terlebih dahulu diperlukan transduser. Di dalam transduser ini terdapat sensor yang berfungsi untuk merespons rangsangan. Dalam percobaan yang berfungsi sebagai sensor adalah modul ADC 0808. Dalam modul ADC 0808 tersebut terdpat 8 sensor yang dalam modul di definisikan sebagai ADC Control. Selain itu ADC 0808 juga mempunyai 8 input yang dalam percobaan ini digunakan sebagai kanal input yang akan diproses ketika ADC Control mendapatkan respons. Dalam percobaan kita menggunakan mode free running untuk mengakses modul ADC oleh sebab itu maka kita menggunakan posisi jumper 1 sampai 3 dalam posisi 2-3. Selain menggunakan modul ADC sebagai perlengkapan percobaan kita juga mengakses komunikasi serial pada MCS51. Ini dikarenakan kita mengakses system tersebut menggunakan hiperterminal yang terdapat pada PC. Karena kita juga mengakses komunikasi serial maka kita menempatkan jumper 1 dan 2 pada modul MCS51 pada posisi 1-2. Dalam percobaan PORT ADC control pada modul ADC dihubungkan dengan dengan PORT 2 pada modul MCS 51. Sedangkan PORT ADC Data pada modul ADC dihubungkan dengan PORT0 pada modul MCS51. Ini terlihat seperti pada listing program di bawah: adc_a
bit
p2.0
adc_b
bit
p2.1
adc_c
bit
p2.2
adc_wr
bit
p2.3
adc_rd
bit
p2.4
adc_eoc
bit
p2.5
adc_cs
bit
p2.6
adc_data
equ
p0
Selain itu kita juga menggunakan akses timer untuk menentukan agar tampilan yang berada di hiperterminal tampil berulang-ulang selama 2 detik. Sistem juga dilengkapi dengan password dimana ketika kita sudah bisa melewati password tersebut maka kita akan bisa masuk untuk mengakses sensor. Pendefinisian password dalam program seperti listing program
di
cek_tombol:
bawah
ini:
acall ambil_data cjne a,#'a',gedhe sjmp ok
gedhe:
cjne a,#'A',cek_tombol
Sistem terhubungkan antara modul MCS51, modul ADC, dan juga PC. Hasil akhirnya adalah semua kinerja system bisa dikontrol dengan keyboard pada PC. Hasil dari percobaannya adalah ketika sudah berhasil memasukkan password maka kita bisa memasukkan sensor mana yang akan kita gunakan. Data sensor sudah dimasukkan, maka akan keluar nilai ADC yang terdapat pada modul ADC yang diberikan dari power supply disambungkan ke input ADC. Hasil data tersebut akan muncul terus berulang-ulang selama 2 detik dan akan berhenti looping ketika 2 detik berakhir. Tetapi setelah looping selama 2 detik tersebut kita tidak dapat lagi untuk memasukkan password, kita terlebih dahulu mereset system agar kembali ke awal. Ini dikarenakan kita belum menggunakan interrupt timer dalam pemrogramannya.
VIII.
Kesimpulan
Dari percobaan yang telah kita lakukan, dapat disimpulkan bahwa: 1. Akuisisi data merupakan proses untuk mendapatkan data dan merupakan proses yang penting dalam system pemantauan dan pengendalian system. 2. Akuisisi data bisa dilakukan dengan menangkap data dari sensor dimana dalam praktikum ini menggunakan modul ADC (ADC Control) sebagai sensornya. 3. Akuisisi data bisa dikontrol dengan menggunakan PC ketika Modul MCS51 sudah tersambung dengan PC dengan menggunakan komunikasi serial. 4. Penentuan letak jumper pada modul MCS51 maupun modul ADC harus diperhatikan karena kesalahan pada peletakkan jumper menyebabkan sistem tidak bekerja.
IX.
Lampiran Listing program
adc_a adc_b adc_c adc_wr adc_rd adc_eoc adc_cs adc_data led org ljmp org main:
bit bit bit bit bit bit bit equ equ
p2.0 p2.1 p2.2 p2.3 p2.4 p2.5 p2.6 p0 p1
0h main 0100h
mov r0,#0 mov r2,#200 mov ie,#0 mov scon,#50h mov th1,#0fdh anl pcon,#7fh mov tmod,#21h mov tcon,#40h cek_tombol: acall ambil_data cjne a,#'a',gedhe sjmp ok gedhe: cjne a,#'A',cek_tombol ok: mov dptr,#sensor clr a next1: push acc movc a,@a+dptr cjne a,#0,ada1 sjmp kanal ada1: acall tulis_data pop acc inc a sjmp next1 kanal:
mov led, #0ffh acall ambil_data mov r1,a ;acall tulis_data mov a,#13 acall tulis_data mov a,#10 acall tulis_data tulis: mov dptr,#channel clr a next2: push acc movc a,@a+dptr cjne a,#0,ada2 mov a,r1 acall tulis_data mov a,#' ' acall tulis_data mov a,#'=' acall tulis_data mov a,#' ' acall tulis_data sjmp cek_kanal; sjmp cek_kanal ada2: acall tulis_data pop acc inc a sjmp next2 ambil_data: ri,ambil_data
ret tulis_data: lagi:
mov sbuf,a jnb ti,lagi clr ti ret cek_kanal: cjne r1,#'0',cek_1 sjmp kanal_0 cek_1: cjne r1,#'1',cek_2 sjmp kanal_1 cek_2: cjne r1,#'2',cek_3 sjmp kanal_2 cek_3: cjne r1,#'3',cek_4 sjmp kanal_3 cek_4: cjne r1,#'4',cek_5 sjmp kanal_4 cek_5: cjne r1,#'5',cek_6 sjmp kanal_5 cek_6: cjne r1,#'6',cek_7 sjmp kanal_6 cek_7: cjne r1,#'7',cek_kanal sjmp kanal_7 sampling: mov a,adc_data mov b,#100 div ab add a,#48; 48=0 acall tulis_data mov a,b mov b,#10 div ab add a,#48 acall tulis_data mov a,b add a,#48 acall tulis_data mov a,#13 acall tulis_data mov a,#10 acall tulis_data ;cjne r0,#3,tulis ;mov led, #0 ajmp cek_tombol kanal_0:
clr clr clr sjmp
adc_a adc_b adc_c sampling
kanal_1:
setb clr clr sjmp
adc_a adc_b adc_c sampling
kanal_2:
clr setb clr sjmp
adc_a adc_b adc_c sampling
kanal_3:
setb adc_a setb adc_b clr adc_c sjmp sampling
kanal_4:
clr adc_a clr adc_b setb adc_c
jnb mov a,sbuf clr ri
sjmp sampling kanal_5:
kanal_6:
kanal_7:
delay:
maneh:
kene:
setb clr setb sjmp clr setb setb sjmp setb setb setb sjmp
adc_a adc_b adc_c sampling adc_a adc_b adc_c sampling adc_a adc_b adc_c sampling
mov tmod,#01h mov tl0,#0ffh mov th0,#0ffh setb tr0 jnb tf0,maneh clr tf0 clr tr0 cjne r2,#200,kene mov a,r2 inc a ret
sensor: db 13,10,'Pilih sensor [0~7]: ',0 channel: db 'Data sensor-',0 END