BAB 3 PERANCANGAN SISTEM Bab ini berisi perancangan sistem yang terdiri dari penjelasan perancangan perangkat keras, perancangan piranti lunak dan rancang bangun sistem. Sistem yang dibuat terbagi menjadi dua modul utama yaitu modul transmitter dan modul receiver. Modul transmitter menggunakan satu buah sensor ultrasonik sebagai pemancarnya. Sementara untuk modul receiver, jika menggunakan 2 buah sensor ultrasonik (gambar 3.1a) sangat tidak dimungkinkan karena hanya mencakup ¼ wilayah dari satu lingkaran. Sedangkan dengan menggunakan 4 buah sensor ultrasonik (gambar 3.1b) masih terdapat wilayah yang tidak tercakup oleh ke 4 sensor ultrasonik. Jika menggunakan 8 buah sensor ultrasonik (gambar 3.1c) maka pada radius tertentu akan mencakup keseluruhan posisi. Oleh karena pertimbangan tersebut, modul receiver menggunakan 8 buah sensor ultrasonik sebagai penerima gelombang ultrasonik dari modul transmitter. (a) (b) (c) : cakupan wilayah sensor ultrasonik : sensor ultrasonik Gambar 3.1 Rancangan jumlah sensor pada modul receiver 41 42 Pada saat terjadi penekanan saklar di modul transmitter, maka gelombang ultrasonik akan dikirim dari transmitter ultrasonik dan diterima oleh receiver ultrasonik. Gelombang ultrasonik yang diterima receiver ultrasonik memiliki karakteristik sinyal AC (referensi bab 2.1.2). Tegangan AC yang diterima receiver ultrasonik akan dikuatkan sinyalnya oleh rangkaian penguat op-amp. Kemudian tegangan yang telah dikuatkan tersebut akan diukur tegangan DC-nya oleh rangkaian peak detector. Tone decoder hanya akan menyeleksi frekuensi sebesar 40 KHz yang dipancarkan dari modul transmitter. Gambar 3.2 memperlihatkan diagram blok dari sistem secara keseluruhan. Mikrokontroler dan ADC berada pada satu modul yaitu modul sistem minimum. Modul ini memiliki peranan penting untuk mengatur reorientasi pergerakan dari motor stepper. Pertama-tama ADC akan membaca dan merubah seluruh keluaran dari peak detector menjadi bit-bit digital yang akan disimpan kedalam suatu variabel data pada mikrokontroler. Mikrokontroler akan membaca keluaran dari tone decoder dan memprosesnya sebagai referensi untuk membandingkan antara nilai data digital yang tersimpan pada mikrokontroler. Perbandingan nilai data digital ini bertujuan untuk mencari nilai data digital yang terbesar. Nilai data digital terbesar ini menandakan receiver ultrasonik yang ditunjuk oleh modul transmitter. Kemudian motor stepper akan diberi nilai input posisi receiver ultrasonik yang memiliki data digital terbesar dan kepala dari motor stepper akan berputar menuju posisi yang telah ditentukan. Nilai input posisi tersebut akan disimpan di mikrokontroler untuk dijadikan acuan kepada motor stepper bila berputar ke arah yang lain. 43 MODUL TRANSMITTER TRANSMITTER ULTRASONIK MODUL RECEIVER 8x MODUL SENSOR RECEIVER ULTRASONIK OPERATIONAL AMPLIFIER TONE DECODER PEAK DETECTOR MODUL SISTEM MINIMUM MIKROKONTROLER AT89C52 ADC 0809 MODUL DRIVER MOTOR STEPPER DRIVER MOTOR STEPPER MOTOR STEPPER Gambar 3.2 Diagram blok sistem 44 3.1 Perancangan Perangkat Keras Perangkat keras yang dirancang dalam sistem ini dibagi menjadi dua bagian penting yaitu modul transmitter dan modul receiver. Sebelum membangun kedua modul pada alat bantu ultrasonik untuk mobile robot, terlebih dahulu telah dilakukan perancangan dan penelitian. Tujuan dari penelitian ini adalah agar modul transmitter dan modul receiver yang akan dirancang menjadi berfungsi secara maksimal untuk meningkatkan kinerja sistem dari alat bantu ultrasonik tersebut. Selain itu untuk memenuhi kriteria yang diinginkan untuk alat bantu ultrasonik tersebut, diperlukan pula analisa yang mendalam dengan menguji setiap penelitian tersebut dan menentukan solusi yang terbaik untuk penggunaan yang optimal. Modul transmitter berfungsi untuk mengirimkan gelombang ultrasonik ke arah modul receiver. Sementara itu, modul receiver berfungsi untuk menerima gelombang ultrasonik dari modul transmitter dan memutar kepala motor stepper ke arah modul transmitter. Gambar 3.3 memperlihatkan ilustrasi cara kerja dari kedua modul yang telah dijelaskan. Pada keadaan awal, kepala motor stepper mengarah pada posisi A. Bila modul transmitter bergerak dari posisi A ke posisi B, maka kepala motor stepper juga akan bergerak dari posisi A ke posisi B. Pergerakan kepala motor stepper selalu mengarah ke tempat dimana modul transmitter berada. Modul receiver diisi dengan modul-modul yang memiliki fungsi kerja lebih spesifik yaitu 8 buah modul sensor, modul sistem minimum, modul driver motor stepper dan modul rangkaian power supply. Dalam bab berikutnya akan dijelaskan masing-masing modul yang terdapat pada sistem yang telah dibuat. 45 B Modul receiver Modul transmitter A Mengirimkan gelombang ultrasonik Keterangan : : sensor ultrasonik : motor stepper Gambar 3.3 Gambaran cara kerja sistem 3.1.1 Modul transmitter Modul transmitter pada gambar 3.4 memiliki kegunaan sebagai remote control yang digunakan untuk mengirimkan gelombang ultrasonik sebesar 40 KHz kearah modul receiver. Modul transmitter terdapat dalam satu tempat dan merupakan modul yang tidak dibagi menjadi modul-modul lainnya. Catu daya yang digunakan untuk modul transmitter berupa dua buah baterai 9 volt yang tersusun seri sehingga total masukannya menjadi 18 volt DC. Dengan melewati regulator 12 volt, maka tegangannya akan diturunkan menjadi 46 12 volt DC. Melalui suatu rangkaian yang dapat menaikkan taraf tegangan yang distabilkan, maka tegangan 12 volt tersebut dinaikkan kembali menjadi 16 volt dan dijadikan catu tegangan untuk timer NE555 dan penguat op-amp CA3130. Persamaan (3-1) menunjukkan rumus perhitungan untuk menaikkan taraf tegangan yang distabilkan (Wasito, 2001, p47). Vstab Vo = Vstab + Iq + . Rb Ra Vstab . Rb Vo = Vstab + Iq . Rb + Ra Vstab . Rb Vo = Vstab + + ( Iq . Rb) Ra Ra + Rb Vo = Vstab + ( Iq . Rb) Ra (3-1) Vo adalah tegangan yang akan dinaikkan, sementara Vstab adalah tegangan yang distabilkan atau tegangan yang dijadikan acuan yaitu 12 volt. Nilai Ra pada rangkaian modul transmitter adalah resistor 1 KΩ (R8) dan nilai Rb adalah trimpot (trimmer potensio) sebesar 5 KΩ (TP2). Arus yang melewati Ra ditambah dengan arus Iq adalah sama dengan arus yang melewati Rb. Nilai Vo akan berubah-ubah sesuai dengan pengaturan dari trimpot. Bila nilai Rb mendekati maksimum, maka Vo akan semakin besar dan begitu pula sebaliknya. Dengan memberikan tegangan kerja operational amplifier (op-amp) sebesar 16 volt, maka akan didapatkan penguatan maksimum dari op-amp sebesar 16 volt peak to peak (Vpp). Jika penguatan yang diberikan besar sekali maka bentuk sinyal keluaran dari sinyal masukan akan berbentuk sinyal kotak. Walaupun sinyal keluaran yang dipancarkan dari transmitter ultrasonik berbentuk kotak akan tetapi receiver ultrasonik akan menghasilkan sinyal 47 keluaran sinusoidal yang baik. Hal ini dapat terjadi karena adanya teori yang mengatakan gabungan dari beberapa sinyal sinusoidal dapat membentuk sinyal kotak ( lihat referensi bab 2.9). Vcc 18V LED Regulator 12V R8 S1 TP2 R1 Regulator 16Volt PT1 R2 S2 C1 R3 1 1 2 C2 2 3 4 3 4 1 R4 8 2 5 8 a1 b1 b2 7 a3 b3 6 a4 b4 5 a2 NE 555 R6 6 R5 7 8 6 CA3130 4 3 7 5 8 TP1 R7 C3 C5 C4 Daftar komponen modul transmitter Resistor Nilai Kapasitor Nilai R R 1 2 1K2Ω 4K7Ω C C 1 2 47pF 100nF R R R 3 4 5 10KΩ 1K5Ω 20KΩ C C C 3 4 5 0,01µF 680pF 0,1µF R 6 10KΩ R 7 10KΩ Potensio Nilai R 8 1KΩ PT 10K 1 Trimpot TP TP 1 2 Gambar 3.4 Rangkaian skematik modul transmitter Nilai 5KΩ 5KΩ transmitter ultrasonik 48 Dalam rangkaian modul transmitter terdapat dua buah saklar yang kegunaannya adalah; saklar pertama (S1) digunakan sebagai tombol untuk menyalakan atau mematikan modul transmitter, sementara saklar kedua (S2) digunakan sebagai tombol untuk mengirimkan gelombang ultrasonik. Pada saat gelombang ultrasonik dikirimkan, lampu (LED) akan menyala dan menandakan proses pengiriman sedang berlangsung. Kegunaan timer NE555 pada modul transmitter adalah untuk membangkitkan frekuensi sebesar 40 KHz (40.000 Hz). Frekuensi tersebut dibangkitkan dengan cara memberikan nilai resistor (R4, R5, TP1) dan nilai kapasitor (C4) yang tepat. Waktu pada saat kapasitor mulai mengisi dirumuskan dengan T1 dan waktu pada saat kapasitor membuang dirumuskan dengan T2. Oleh karena itu total periode (T) adalah penjumlahan T1 dengan T2. Bila nilai periode telah didapat, maka dapat dicari nilai frekuensinya ( f ). Persamaan (3-2) memperlihatkan rumus untuk mencari nilai frekuensi. T1 = 0.693( Ra + Rb).C T2 = 0.693( Rb.C ) T = T1 + T2 (3-2) T = 0,693( Ra + 2 Rb).C f = 1 1,44 = T ( Ra + 2 Rb).C Nilai Ra disini adalah sama dengan nilai R4 1,5 KΩ (1.500 Ω) dan nilai C adalah sama dengan nilai C4 yaitu 680 pF (680x10-12 F). Dengan dua komponen tersebut, maka dapat dicari nilai Rb dengan persamaan (3-3) berikut : 49 1,44 ( Ra + 2 Rb).C 1,44 Ra + 2 Rb = f .C 1,44 2 Rb = − Ra f .C 1,44 2 Rb = − 1500 3 (40 x10 )(680 x10 −12 ) 2 Rb = 51441,17 Rb = 25720,58 f = (3-3) Karena nilai Rb yang tidak bulat, maka untuk Rb digunakan dua buah resistor yang tersusun seri yaitu resistor 10 KΩ(R5) dan trimpot 5 KΩ(TP1). Dengan bantuan osiloskop, nilai trimpot dapat diatur agar mendapatkan nilai frekuensi sebesar 40 KHz. Jenis penguat yang digunakan pada modul transmitter adalah penguat opamp membalik (inverting). Penguat op-amp inverting dapat digunakan untuk memperkuat atau memperlemah sinyal yang dipancarkan dari transmitter ultrasonik. Sinyal ini berupa tegangan AC yang timbul bersama-sama dengan frekuensi. Persamaan (3-4) memperlihatkan rumus untuk mencari berapa besar penguatan dari op-amp inverting. Av = − Rf Ri (3-4) Nilai dari Rf pada rangkaian skematik gambar 3.4 adalah hasil penjumlahan antara 4,7 KΩ(R2) dengan potensio 10 KΩ(PT1) dan nilai Ri adalah 10 KΩ(R3). Fungsi potensio adalah sama dengan trimpot, dimana nilai hambatannya dapat diatur dari 0 sampai 10 KΩ. Angka minus dalam rumus 50 penguat op-amp inverting diartikan sebagai pembalikan fasa pada keluarannnya. Rumus untuk menghitung penguatan op-amp inverting adalah sebagai berikut: Rf max = 14,7 KΩ Rf max 4,7 KΩ + 10 KΩ = 1,47 = Ri 10 KΩ = 4,7 KΩ Av = − Rf min Av = − (3-5) Rf min 4,7 KΩ + 0 = 0,47 = Ri 10 KΩ Dari persamaan (3-5), dapat diketahui nilai maksimum dan minimum penguatan. Bila nilai PT1 diatur menjadi minimum, maka penguatan dari sinyal akan berkurang oleh karena penguatan tersebut dibawah satu. Akan tetapi bila PT1 diatur menjadi maksimum, maka akan terjadi penguatan sinyal. Modul receiver Modul receiver berisikan 8 buah modul sensor, modul sistem minimum, modul driver motor stepper dan modul rangkaian power supply. Gambar 3.5 memperlihatkan isi dari modul-modul yang ada dalam modul receiver. Modul receiver adalah kumpulan dari berbagai modul yang memiliki fungsi spesifik. RX 7 6 RX RX 8 Modul sistem minimum R X R X 5 RX 1 Modul driver motor stepper 2 Modul rangkaian power supply 4 R X 3.1.2 RX 3 Rx1-8 : Modul Sensor Gambar 3.5 Modul-modul dalam modul receiver 51 Modul Rangkaian Power Supply Modul Driver Motor Stepper Port 0 Modul Sensor 1 Modul Sensor 2 Mikrokontroler AT89C52 Port 2 Modul Sensor 3 Modul Sensor 4 Modul Sensor 5 3 bit address Modul Sensor 6 Out. digital Modul Sensor 7 ADC 0809 In. analog 8 channel Modul Sensor 8 Input catu tegangan Output ADC Output Peak Detector Output Tone Decoder Input driver motor 3 bit alamat ADC Modul Sensor 1 2 3 4 5 6 7 8 3 bit address LLL LLH LHL LHH HLL HLH HHL HHH Gambar 3.6 Rangkaian di dalam modul receiver Contoh kerja spesifik tersebut antara lain pada modul rangkaian power supply yang akan memberikan memberikan catu tegangan kepada semua modul 52 yang berada dalam modul receiver. Kemudian pada modul sistem minimum berisi mikrokontroler dan ADC, yang keduanya berfungsi sebagai pengolah data dari modul sensor dan mengatur arah dari pergerakan motor stepper. Dua modul lainnya yaitu modul driver motor stepper yang bekerja sebagai driver kepada motor stepper dan modul sensor bekerja sebagai penerima dan pengolah gelombang ultrasonik. Modul-modul dalam modul receiver juga memiliki hubungan satu sama lainnya. Misalnya masukan modul sensor berasal dari gelombang ultrasonik yang dikirim oleh modul transmitter. Data yang masuk akan dikuatkan tegangannya oleh penguat op-amp non-inverting dan disaring frekuensinya oleh tone decoder. Modul sensor memiliki dua buah keluaran yang masing-masing menuju ADC dan mikrokontroler. Oleh karena ADC dan mikrokontroler berada pada satu modul yang dinamakan modul sistem minimum, maka dapat dikatakan bahwa masukan modul sistem minimum berasal dari keluaran 8 buah modul sensor. Antara mikrokontroler dengan ADC juga saling memiliki keterhubungan. Mikrokontroler memberikan inisialisasi kepada ADC berupa 3 bit alamat dan perintah untuk melakukan konversi data. Disamping itu, ADC akan mengeluarkan hasil konversi ke mikrokontroler. Keluaran mikrokontroler akan terhubung dengan masukan IC L297 pada modul driver motor stepper yang akan menggerakkan motor stepper. Gambar 3.6 di halaman 51 memperlihatkan rangkaian dalam modul receiver. Penjelasan lebih rinci mengenai modul-modul dalam modul receiver adalah pada sub bab 3.1.3 sampai dengan 3.1.6. 53 3.1.3 Modul Sensor Modul sensor berisi rangkaian-rangkaian yang menerima frekuensi dan tegangan yang berasal dari transmitter ultrasonik. Terdapat delapan buah modul sensor dalam modul receiver. Bagian-bagian dari setiap modul sensor adalah satu receiver ultrasonik, dua penguat non-inverting, rangkaian tone decoder dan rangkaian peak detector. Gambar 3.7 menunjukkan gambar rangkaian pada modul sensor dan daftar komponen yang digunakan. Dua buah penguat op-amp CA3130 pada modul sensor digunakan sebagai penguat tak membalik (non-inverting) yang menguatkan sinyal ultrasonik dari transmitter. Setiap op-amp diberi catu tegangan sebesar 12 volt. Rumus dari penguatan non-inverting adalah dituliskan pada persamaan (3-6) sebagai berikut: Av = Rf +1 Rin (3-6) Nilai Rf yang digunakan adalah 20 KΩ dan 10 KΩ. Nilai Rin yang digunakan adalah 1 KΩ. Nilai Rf pada penguat op-amp pertama dilambangkan dengan R3 dan TP1. Nilai Rf pada penguat op-amp kedua dilambangkan dengan R8 dan TP2. Nilai Rin pada penguat op-amp pertama dilambangkan dengan R7 dan nilai Rin pada penguat op-amp kedua dilambangkan dengan R9 (Gambar 3.7). Perhitungan untuk penguatan op-amp non-inverting dituliskan pada persamaan (3-7). Rf max = 22 KΩ 20 KΩ + 10 KΩ + 1 = 31x 1KΩ Rf min = 10 KΩ A= A= 10 KΩ + 1 = 11 x 1KΩ (3-7) 54 Dengan mengatur nilai dari trimpot 20 KΩ, maka penguatan maksimum adalah dari setiap penguat op-amp adalah 31 kali. Dengan dua kali penguatan, maka tegangan AC yang dikuatkan akan menjadi 31x31 = 961 kali. Output dari dua penguat op-amp akan menuju ke tone decoder dan peak detector. Tone decoder akan menyeleksi frekuensi 40 KHz sedangkan peak detector akan mengukur tegangan DC. Rangkaian tone decoder digunakan untuk menyeleksi sinyal yang dikirimkan dari transmitter ultrasonik sebesar 40 KHz. IC tone decoder adalah LM567 dengan menggunakan catu tegangan sebesar 5 volt (lebih jelasnya lihat bab 3.1.6 tentang modul rangkaian power supply). Untuk melewatkan frekuensi ( fo ) 40 KHz, maka perlu diatur nilai resistor dan kapasitor pada rangkaian tone decoder. Nilai kapasitor (C15 pada gambar 3.7) yang digunakan adalah 1 nF (10-9 F) dan nilai resistor dihitung dengan rumus sebagai berikut: fo = 1 1,1RC 1 R= = 22727,27 1,1(40000)(10 −9 ) (3-8) Dari persamaan (3-8) karena nilai resistor yang tidak bulat, maka digunakan nilai resistor sebesar 20 KΩ (R12) dan trimpot 5 KΩ (TP3). Dengan bantuan osiloskop, trimpot 5 KΩ dapat diatur agar frekuensi yang diinginkan adalah 40 KHz. Bila frekuensi yang diterima adalah 40 KHz maka tone decoder akan mengeluarkan logika 0 dan bila frekuensi yang diterima bukan 40 KHz maka tone decoder akan mengeluarkan logika 1. Keluaran logika 0 dan 1 ini akan dijadikan masukan ke port 0 pada mikrokontroler. 55 Vcc 12V Vcc 12V C1 C3 8 C2 1 8 1 CA3130 6 4 7 6 +3 2 Receiver ultrasonik C4 R1 CA3130 4 R2 TP1 7 +3 - R4 R5 2 C5 R3 R6 TP2 C7 R8 C6 R7 R10 C9 R9 C10 C8 Ke Port 0 AT89C52 (pin 32 -39) C11 RANGKAIAN PEAK DETECTOR R11 IN4148 Vcc 5V Vcc 5V Zener diode C16 8 4 6 LM567 3 1 2 5 7 R12 R13 TP3 C15 C12 C13 C14 Daftar komponen modul sensor Resistor Nilai Kapasitor Nilai Trimpot Nilai R 1 1MΩ C 1 47pF TP 1 R 2 10KΩ C 2 10nF TP 2 20KΩ R 3 10kΩ C 3 47pF TP 3 5KΩ R 4 1MΩ C 4 10nF R 5 10KΩ C 5 10pF R 6 10KΩ C 6 10nF R 7 1KΩ C 7 10pF R 8 10KΩ C 8 100nF R 9 1KΩ C 9 10nF R 10 10KΩ C 10 100nF R 11 1KΩ C 11 100nF R 12 20KΩ C 12 10nF R 13 100KΩ C 13 20nF C 14 10nF C 15 1nF C 16 1nF Gambar 3.7 Rangkaian skematik modul sensor 20KΩ Ke IN0 - IN7 ADC0809 (pin 1-5,pin 26-28) 56 Kegunaan dari peak detector (gambar 3.7) adalah untuk mengukur tegangan DC yang dikuatkan oleh op-amp. Tegangan DC ini mengambil nilai tegangan maksimum AC dan digunakan sebagai input kepada ADC. Rangkaian dasar dari peak detector ini terdiri dari satu dioda IN4148 dan satu kapasitor (C16). Pada saat arus melewati dioda, maka Dioda IN4148 akan melewatkan tegangan positif dari sinyal sinus dan kemudian digunakan kapasitor untuk membentuk tegangan DC (lebih jelasnya pada bab 4.4.2 tentang pengujian peak detector). Karena tegangan offset dari sinyal input adalah 6 volt, maka diperlukan penurunan tegangan (back-off voltage) sebesar nilai tersebut. Untuk itu diode zener bernilai 6,2 volt yang akan menurunkan posisi sinyal tersebut sebanyak 6,2 volt agar sejajar dengan ground dan kemudian dikirim ke ADC. Keluaran dari rangkaian peak detector akan berada pada latch di ADC yang siap untuk diambil oleh mikrokontroler. 3.1.4 Modul Sistem Minimum Pada modul sistem minimum terdapat dua bagian utama yaitu rangkaian IC AT89C52 dan rangkaian IC ADC0809. Dua rangkaian saling terkoneksi dan mendapatkan input dari modul sensor. Modul ini memiliki tugas sebagai pengatur dari seluruh kerja sistem yang berada pada modul receiver. Gambar 3.8 menunjukkan rangkaian skematik dari modul sistem minimum dan daftar komponen yang digunakan. Pada sistem ini, mikrokontroler AT89C52 memiliki beberapa fungsi. Fungsi pertama dari AT89C52 adalah membaca input dari delapan tone decoder dalam bentuk bit 0 dan 1. Fungsi lainnya AT89C52 juga berguna untuk 57 melakukan proses perbandingan tegangan digital hasil konversi dari ADC0809 serta sebagai pengatur dari jumlah pergerakan motor stepper. Mikrokontroler akan menerima input dari delapan tone decoder melalui port 0 (pin32 s.d. 39) berupa logika 0 (high) atau 1 (low). Logika low memiliki arti bahwa frekuensi yang diterima receiver ultrasonik adalah 40 KHz sedangkan logika high berarti frekuensi yang diterima receiver ultrasonik bukan 40 KHz. Dalam satu proses, dapat terjadi kemungkinan lebih dari satu receiver ultrasonik yang menerima frekuensi 40 KHz atau mendapat logika 0. Karena itu deret logika 0 dan 1 dari receiver-receiver ultrasonik akan dijadikan acuan untuk membandingkan 8 buah data digital yang telah dikonversi oleh ADC. Hasil konversi ADC akan diterima mikrokontroler pada port 2 (pin 21 s.d. 28). Didalam mikrokontroler itu sendiri telah disediakan tempat untuk menampung 8 data digital dari 8 receiver ultrasonik. Melalui program dalam mikrokontroler, 8 data digital tersebut akan disaring untuk mendapatkan data yang terbesar. Proses penyaringan tersebut adalah dengan mengambil data dari receiverreceiver ultrasonik yang berlogika 0 dan membandingkan data-data digitalnya untuk mendapatkan data terbesar. Data terbesar adalah data dari receiver ultrasonik yang menerima tegangan terbesar. Tegangan terbesar didapatkan saat transmitter ultrasonik dan receiver ultrasonik berada pada jarak minimum dan terarah secara point to point (referensi bab 2.1.2). Kemudian mikrokontroler akan mengeluarkan output berupa clock (pin 1, 2, 3) kepada driver motor stepper IC L297 untuk berputar ke arah receiver ultrasonik yang memiliki tegangan 58 terbesar. Pin-pin lainnya pada mikrokontroler digunakan sebagai inisialisasi untuk ADC, rangkaian reset, kristal, catu tegangan dan ground. Rangkaian reset (gambar 3.8) berfungsi untuk membersihkan isi register dan port pada mikrokontroler dengan menekan tombol (S1) pada rangkaian reset. Tegangan 5 volt dimasukkan ke dalam rangkaian ini sebagai catu tegangan untuk rangkaian reset. Oleh karena muatan dari kapasitor 1 µF (C5) masih kosong maka terjadi kondisi dimana rangkaian ini seolah-olah terhubung singkat. Bila pin RESET (pin 9) di mikrokontroler diberi logika high maka kapasitor akan terisi penuh dan mikrokontroler akan di-reset. Rangkaian pembangkit pulsa clock atau rangkaian kristal (gambar 3.8) pada mikrokontroler menggunakan sebuah kristal 11 Mhz dan 2 buah kapasitor yang masing-masing bernilai 33 pF (C3 dan C4). Fungsi dari kristal ini untuk memberikan frekuensi sebesar 11 Mhz. Frekuensi tersebut dibangkitkan untuk menggerakkan mikrokontroler dan fungsi dari kapasitor untuk menstabilkan nilai frekuensi tersebut. ADC0809 yang digunakan menggunakan 8 channel input analog (IN0 s.d. IN7) dan 8 channel output digital (2-1 s.d. 2-8). Untuk mengaktifkan proses konversi analog ke digital, terlebih dahulu ADC harus diberi 3 bit address (pin 22, 23, 24) dari mikrokontroler. Pin-pin seperti ALE (Address latch enable), START, EOC (End of Conversion) dan OE (Output Enable) juga digunakan dalam konversi data analog ke digital. Pada perancangan ini, tegangan referensi yang digunakan untuk ADC adalah 5 volt DC. Jadi untuk satu bit digital dari ADC mempunyai tegangan sebesar 0,019 volt. Nilai ini didapatkan dari tegangan referensi dibagi dengan 59 Vcc 5V OUTPUT KE IC L297 (pin 10,17,18) Vcc 5V S1 R5 C5 Vcc 5V Rangkaian Reset R6 R4 C3 11MHz 1 (T2) P1.0 2 (T2 EX) P1.1 P0.0 (AD0) 39 VCC 40 3 P1.2 P0.1 (AD1) 38 4 P1.3 P0.2 (AD2) 37 5 P1.4 P0.3 (AD3) 36 6 P1.5 P0.4 (AD4) 35 7 P1.6 P0.5 (AD5) 34 8 P1.7 P0.6 (AD6) 33 9 RST P0.7 (AD7) 32 10 (RXD) P3.0 EA/VPP 31 11 (TXD) P3.1 ALE/PROG 30 12 (INT0) P3.2 PSEN 29 13 (INT1) P3.3 P2.7 (A15) 28 14 (T0) P3.4 P2.6 (A14) 27 15 (T1) P3.5 P2.5 (A13) 26 16 (WR) P3.6 P2.4 (A12) 25 17 (RD) P3.7 P2.3 (A11) 24 18 XTAL2 P2.2 (A10) 23 19 XTAL1 C4 INPUT DARI 8 TONE DECODER LM67 P2.1 (A9) 22 AT89C52 P2.0 (A8) 21 20 GND Rangkaian Kristal INPUT DARI 8 RANGKAIAN PEAK DETECTOR 1 IN3 IN2 28 2 IN4 IN1 27 3 IN5 IN0 26 4 IN6 ADD A 25 5 IN7 ADD B 24 6 START ADD C 23 ALE 22 7 EOC Vcc 5V 8 2 7 3 Timer NE555 1 4 6 5 2-1 MSB 21 8 2-5 9 OUTPUT ENABLE 2-2 20 10 CLOCK 2-3 19 2-4 18 11 VCC R1 2 -8 LSB 17 12 VRE F(+) R2 V RE F (-) 16 13 GND 14 2-7 ADC0809 2-6 15 R3 C1 C2 Daftar komponen modul sistem minimum Resistor Nilai Kapasitor Nilai R R R R 1 2 3 4 1KΩ 1KΩ 20KΩ 1KΩ C C C C 1 2 3 4 10nF 680pF 33pF 33pF R 5 2KΩ C 5 1uF R 6 10KΩ Gambar 3.8 Rangkaian skematik modul sistem minimum 60 resolusi ADC (28 = 256). Mengenai perhitungan ini digunakan pada bab 4.4.3 tentang pengujian debugger pada saat tegangan input yang diberikan sebesar 2,86 volt. Clock yang digunakan ADC dibangkitkan frekuensinya dengan menggunakan timer NE555. Frekuensi yang digunakan adalah 500 KHz karena frekuensi tersebut digunakan untuk kecepatan proses konversi dari data analog ke data digital. Untuk membangkitkan frekuensi sebesar 500 KHz maka digunakan rumus yang dituliskan pada persamaan (3-9) berikut : Ra + 2 Rb = 1,44 f .C 1,44 − Ra f .C 1,44 − 1000 = 4234,3 2 Rb = (500000)(680 x10 −12 ) Rb = 2117,15Ω 2 Rb = (3-9) Nilai resistor Ra yang digunakan adalah 1 KΩ (R1), kapasitor C yang digunakan adalah 680 pF (C2) dan resistor Rb sebesar 1 KΩ (R2) ditambah trimpot 20 KΩ (R3). Trimpot tersebut dapat diatur agar mencapai nilai hambatan yang sesuai untuk frekuensi sebesar 500 KHz. 3.1.5 Modul Driver Motor Stepper Motor stepper yang digunakan disini adalah motor stepper jenis 2 kutub. Untuk menggerakkan motor ini diperlukan driver motor stepper yang sesuai dengan kebutuhan. Dalam membangun modul ini diperlukan IC L297 dan IC L298 yang dapat memberikan eksitasi untuk motor stepper. Gambar 3.9 61 memperlihatkan rangkaian skematik dari modul driver motor stepper dan komponen-komponen yang digunakan untuk membangun modul tersebut. Input dari Power Supply Dari AT89C52 (pin 1-3) Vcc 5V A D12 D1 B D3 C3 C4 R1 17 12 VS CLK A 4 5 RST B 6 7 CW/CCW C 7 10 HALF/FULL D 9 12 CONTROL L297 SYNC 15 VREF INH1 5 14 SENSE 1 INH2 8 13 SENSE 2 10 ENABLE 6 11 9 VSS D10 D9 D8 D4 D5 D6 D7 OUT 1 2 INPUT1 OUT 2 3 INPUT2 OUT 3 13 INPUT3 INPUT4 D11 4 VS Motor Stepper 2 kutub 18 L298 OUT 4 14 SENSE A 1 ENABLE A SENSE B 15 ENABLE B GND 8 HOME OSC 16 GND 2 C1 R2 R3 C2 R4 D2 Daftar komponen modul driver motor stepper Dioda D1 D2 D3 D4 D5 D6 D7 D8 D9 D10 D11 D12 Type IN4001 IN4001 IN4001 Fast Diode Fast Diode Fast Diode Fast Diode Fast Diode Fast Diode Fast Diode Fast Diode IN4001 Resistor R1 R2 R3 R4 Nilai 1KΩ 22KΩ 0,33Ω /2W 0,33Ω /2W Kapasitor C1 C2 C3 C4 Nilai 33nF 0,1uF 470 uF /25V 0,1uF Gambar 3.9 Rangkaian skematik modul driver motor stepper Driver motor mempunyai cara kerja yang dapat memudahkan penggunaan motor steper 2 kutub ini. Kegunaan driver motor IC L297 adalah mengatur pergerakan motor beserta mode langkah stepper. IC L297 menerima input dari mikrokontroler. Pin 1 mikrokontroler terhubung dengan pin 18 (CLK) 62 L297 yang fungsinya untuk mengatur jumlah step dari motor stepper. Pin 2 mikrokontroler terhubung dengan pin 17 (CW/CCW) L297 yang berfungsi untuk mengatur arah dari motor stepper untuk berputar searah jarum jam atau sebaliknya. Pin 3 mikrokontroler terhubung dengan pin 10 (ENB) L297 yang berfungsi untuk mengaktifkan motor stepper agar dapat dioperasikan. Sebagai langkah dari motor stepper, digunakan mode half step yang memiliki pergerakan lebih halus dibandingkan mode full step. Pada rangkaian skematik (Gambar 3.9) pengaturan mode langkah stepper diatur ambang, yang berarti mode langkah stepper menggunakan mode half step (Lihat data sheet L297 Lampiran L9 hal. 4/11). Cara kerja dari IC L297 ini menggunakan clock yang akan memberikan trigger keluaran A,B,C dan D dari IC L297 menjadi high dan low. Pulsa clock yang diterima oleh IC L297 dibangkitkan secara manual dari program yang ada di dalam mikrokontroler (Listing program bab 3.2.2). Keluaran dari IC L297 ini akan bervariasi sesuai dengan clock yang diberikan oleh mikrokontroler. Dengan IC L297, pergerakan motor dapat diatur dari mikrokontroler melalui IC L297. IC L298 adalah IC Driver yang umumnya digunakan untuk motor stepper. L298 mempunyai input yang berasal dari keluaran L297. Input tersebut adalah sinyal fase motor dan kontrolnya (pin 4 s.d. 9 dari L297). Pin input L298 (5,7,10,12) akan mengolah sinyal tersebut untuk menggerakkan motor stepper. Tanpa menggunakan IC L297, motor stepper tetap dapat berfungsi sebagaimana harusnya. Hal ini dapat terjadi dengan ketentuan bahwa masukan yang diberikan pada IC L298 sudah disesuaikan. Kegunaan dari IC L298 ini antara lain sebagai interfacing kepada motor stepper yang menggunakan jenis 2 kutub. Kelebihan lainnya dapat membuat motor stepper menjadi tidak mudah terpengaruh terhadap 63 gangguan eksternal, contohnya perubahan posisi secara paksa oleh manusia. Bila modul receiver tersambung dengan listrik maka IC L298 menggunakan tegangan dari sebesar 23,4 volt dan bila modul receiver menggunakan baterai NiCd maka tegangan yang digunakan sebesar 12 volt. IC L298 dapat menggunakan tegangan maksimal yang mencapai 36 volt DC (Data Sheet L298 lampiran L10 hal. 1/13). 3.1.6 Modul Rangkaian Power Supply Rangkaian power supply menggunakan pencatu daya teregulasi dengan input 220VAC/50Hz dari PLN yang bertujuan menghasilkan tegangan DC untuk mengisi baterai NiCd 12 volt. Dengan menggunakan baterai NiCd, modul receiver dapat tetap digunakan walaupun tidak dihubungkan dengan listrik. Transformator step down akan merubah tegangan 220VAC/50Hz menjadi 18VAC/50Hz. Kemudian jembatan dioda akan menyearahkan tegangan 18 volt AC tersebut menjadi 23,4 volt DC. Persamaan (3-10) digunakan untuk menghitung perubahan tegangan AC menjadi DC (Wasito, 2001, p 36). Vo ≈1,3 × Vs (3-10) Vo adalah nilai tegangan keluaran searah dan Vs adalah tegangan keluaran dari transformator. Angka 1,3 adalah konstanta dalam perhitungan ini. Dengan nilai Vs sebesar 18 volt AC, maka nilai Vo yang didapatkan setara dengan 23,4 volt DC. Setelah tegangan DC diperoleh selanjutnya tegangan ditapis oleh kapasitor elektrolit untuk membuang ripple yang tersisa pada tegangan DC. Keluaran 23,4 volt tersebut akan digunakan untuk : - Mengisi baterai 12 volt yang terdapat didalam modul rangkaian power supply. 65 Sebagai sumber tegangan untuk sistem yang dirancang ini digunakan baterai 12 volt yang berjenis Nikel-Cadmium (NiCd). Keunggulan dari baterai ini adalah memiliki tegangan nominal 1,5 volt tiap sel serta mampu di isi ulang sebanyak lebih dari 500x untuk pengisian dan pembuangan. 3.2 Perancangan Piranti Lunak Perancangan piranti lunak untuk sistem alat bantu ultrasonik menggunakan bahasa pemrograman MCS-52. Dalam perancangan piranti lunak terdapat satu program yang dapat mengatur semua perintah di mikrokontroler AT89C52. Program tersebut berisikan rangkaian perintah yang mengatur keseluruhan kerja dari sistem yang dibuat. Penjelasan dari perancangan piranti lunak terbagi menjadi penjelasan diagram alir dari program dan penjelasan untuk listing program. 3.2.1 Diagram alir program MCS-52 Diagram alir (gambar 3.11) berisi urutan instruksi dari program yang mengatur semua tugas dalam sistem secara keseluruhan. Program dimulai dengan proses untuk inisialisasi dari sistem seperti mendeklarasi variabel, menset nilai awal variabel dan mendefinisikan jenis interrupt yang akan dipakai. Kemudian ADC akan men-konversi tegangan analog dari 8 receiver ultrasonik menjadi 8 data digital dan menyimpannya di mikrokontroler. Proses selanjutnya pada program adalah membaca port 0 mikrokontroler yang berisi keluaran dari 8 tone decoder. Masukan tone decoder berasal dari frekuensi yang diterima receiver ultrasonik. Bila frekuensi yang diterima salah satu receiver adalah 40 66 KHz, maka data digitalnya akan digunakan dalam proses pencarian data terbesar. Proses pencarian data terbesar adalah membandingkan data-data digital dari receiver ultrasonik yang mendapat frekuensi 40 KHz. Bila data terbesar sudah didapatkan maka posisi receiver ultrasonik dapat diketahui. Nilai posisi tersebut akan diberikan kepada IC dari motor stepper. IC tersebut akan menggerakkan kepala motor stepper ke posisi yang telah ditentukan. Nilai posisi terakhir akan disimpan pada mikrokontroler dan dijadikan acuan untuk pergerakan motor selanjutnya. Program kemudian berada dalam keadaan standby dan menunggu apabila ada pemanggilan dari modul transmitter. Untuk melihat diagram alir yang lebih rinci dapat dilihat pada lampiran halaman L2 halaman 1/4 – 4/4. 3.2.2 Penjelasan Listing Program Pada awal program didefinisikan pin-pin keluaran dan variabel yang digunakan didalam program. Pada baris program 56 sampai baris program 58 (lihat L1 halaman 2) didefinisikan pin-pin yang digunakan untuk modul pengontrol motor stepper. Variabel CLKPLS merupakan pulsa clock untuk pengontrol motor, karena pengontrol motor yang digunakan ialah IC L297 dan L298. Pada IC L297, untuk menggerakkan motor stepper sebanyak satu step maka harus diberikan pulsa clock sebanyak satu kali. Pulsa clock tersebut dibangkitkan dari program pada mikrokontroler, yaitu dengan cara men-set bit CLKPLS kemudian selang beberapa waktu bit CLKPLS di-clear kembali. Sedangkan variabel CWCCW berfungsi untuk menentukan arah perputaran dari motor stepper. Jika variabel CWCCW di-set bit maka arah perputaran motor akan searah jarum jam. 67 Sebaliknya jika variabel CWCCW di-clear bit maka arah perputan motor akan berlawanan dengan arah jarum jam. Motor stepper bergerak secara half step karena pada perancangan perangkat kerasnya pin HALF/FULL pada IC L297 tidak dihubungkan (posisi ambang), jadi pin tersebut akan selalu high. Pin enable berfungsi untuk mengaktifkan IC L297, pin enable ini harus diatur high jika motor stepper ingin bergerak. Jika pin ini sudah diberi logika high maka motor stepper akan berada dalam keadaan standby atau tidak dapat digerakkan lagi secara manual oleh tangan manusia. ADC yang digunakan adalah tipe 0809 yang mempunyai 8 channel analog input yang bisa diakses setiap channel-nya dengan memberikan 3 bit address-nya. Variabel ADDRS merupakan 3 bit address yang digunakan untuk ADC. Untuk lebih jelasnya bisa dilihat pada baris program 87 (Lampiran L1 halaman 2). Untuk mengkonversi input analog, pertama-tama harus diberikan 3 bit address untuk menentukan input mana yang akan dikonversi. Contohnya mau mengkonversi input analog ke-5 jadi diberikan 3 bit address (101), kemudian harus diaktifkan ALE (Address Latch Enable) pada ADC dan kemudian di nonaktifkan lagi. Pin ALE untuk ADC bisa dilihat pada baris program 59 (Lampiran L1 halaman 2). Setelah ALE pada ADC di non-aktifkan kemudian diikuti dengan mengaktifkan bit STR (Start of conversion) dan selang beberapa waktu dinonaktifkan lagi. Pin STR untuk ADC ini bisa dilihat pada baris program 55 (Lampiran L1 halaman 2). Cara pengaktifan bit ALEADC dan STR mengikuti aturan pada diagram waktu dari data sheet ADC 0809. 64 - Sebagai catu tegangan untuk IC L298 pada modul driver motor stepper. - Untuk diregulasikan menjadi tegangan 5 volt dan 12 volt. Regulator 12 volt digunakan untuk penguat CA3130 pada modul receiver dan kipas pendingin. Dari data Sheet IC LM567 dan IC ADC0809, kedua IC tersebut dapat menggunakan catu tegangan sebesar 9 volt. Namun data sheet dari tone decoder LM567 juga menuliskan bahwa tone decoder akan high (5 volt) jika frekuensi yang diterima bukan 40KHz dan ADC0809 juga masih dapat berjalan dengan catu tegangan 5 volt. Dengan demikian untuk mempermudah perancangan hardware tersebut maka catu tegangan untuk IC LM567 dan ADC0809 diberikan tegangan sumber sebesar 5 volt. Regulator 5 volt digunakan sebagai catu tegangan untuk tone decoder LM567, AT89C52, ADC0809, timer NE555 dan IC L297. Gambar 3.10 adalah rangkaian skematik modul rangkaian power supply beserta komponen-komponen yang digunakan. Ke pin Vs ICL298 A Dioda-dioda Rectifier 220V AC Header 4 Pin G 12 5 Baterai 12V B D1 5V Output D3 Fuse 1A D2 T1 I: 220V O: 18V S1 C1 12V Output Regulator 12V C3 C4 LED1 C2 R1 Daftar komponen modul rangkaian power supply Kapasitor C1 C2 C3 C4 Regulator 5V Nilai 4700uF / 35V 100uF / 50V 470uF / 50V 100uF / 50V Resistor R1 Nilai 1K2Ω Dioda D1 D2 D3 Tipe IN4001 IN4001 IN4001 Gambar 3.10 Skematik modul rangkaian power supply 68 START INISIALISASI SISTEM -> Deklarasi variabel -> Set nilai awal variabel ->Defini jenis intrrupt Konversi semua data analog ADC YA Simpan hasil konversi sesuai dengan nilai addressnya Baca input dari tone decoder di P0 TIDAK Cek bit input tone decoder = 0FFh ? YA TIDAK Cari data yang terbesar dari data-data hasil konversi ADC Sudah ada data yang terbesar ? YA Tentukan nilai pergerakan dari motor stepper Simpan status posisi dari motor stepper Ada penekanan tombol lagi ? TIDAK END Gambar 3.11 Diagram alir program MCS-52 69 Pada saat mengaktifkan dan kemudian dinon-aktifkan bit STR itu, proses konversi mulai berjalan dan jika proses konversi sudah selesai maka ADC akan memberikan logika high pada bit EOC (End of conversion). Pin EOC untuk ADC bisa dilihat pada baris program 60 (lihat lampiran L1 halaman 2). Pin EOC pada ADC dihubungkan ke mikrokontroler pada interrupt 1 eksternal, jadi bila proses konversi pada ADC sudah selesai maka program pada mikrokontroler akan di interrupt. Setelah interrupt terjadi maka data hasil konversi ADC disimpan kedalam variabel dataAdc yang dijelaskan pada baris program 100 (lihat lampiran L1 halaman 2). Setelah dikonversi, data 8 bit digital yang tersimpan di dalam variabel dataAdc dipindahkan kedalam sebuah variabel DAT yang sesuai dengan alamat address-nya. Contoh: jika yang dikonversi input analog ke-5 maka data hasil konversinya akan disimpan kedalam variabel DAT4. Jadi data hasil konversinya disimpan sesuai dengan address yang diberikan. Variabel DAT dijelaskan pada baris program 89 sampai 96 (lihat lampiran L1 halaman 2). Variabel PINT merupakan variabel yang menentukan data digital hasil konversi yang paling terbesar. Variabel PINT merupakan bit addressable yang dapat diakses per bit. Variabel PINT0 hingga PINT7 merupakan nama variabel dari bit-bit yang termasuk pada variabel PINT. Variabel PINT dijelaskan pada baris program 63 sampai 71 (lihat lampiran L1 halaman 2). Contoh: data yang terbesar merupakan data ke-5 jadi PINT4 akan high, maka bit lainnya akan low. Setelah konversi pada ADC selesai, maka ADC akan memberikan logika high pada pin EOC. Kemudian flag fDataAdc berguna untuk menandakan bahwa proses konversi telah usai. Jika proses konversi sudah selesai maka flag 70 tersebut akan aktif. Penjelasan tentang flag terdapat pada baris program 73 (lihat lampiran L1 halaman 2). Pada perancangan perangkat keras, digunakannya tone decoder adalah untuk menyeleksi frekuensi yang diterima receiver ultrasonik. Jika frekuensi yang diterima oleh tone decoder itu bernilai 40 KHz maka tone decoder akan mengeluarkan logika low. Apabila tone decoder menerima frekuensi di bawah atau di atas frekuensi 40 KHz maka tone decoder akan mengeluarkan logika high. Variabel TD merupakan tempat penampungan output dari tone decoder. Di dalam perancangan perangkat kerasnya digunakan 8 buah receiver ultrasonik maka output dari tone decoder berjumlah 8 bit. Variabel TD merupakan bit addressable yang bisa diakses setiap bit-nya. Variabel TD0 hingga TD7 merupakan nama variabel dari bit-bit yang termasuk pada variabel TD. Penjelasan tentang variabel TD terdapat pada baris program 75 sampai 83 (lihat lampiran L1 halaman 2). Selanjutnya untuk mendefinisikan posisi dari motor maka digunakan variabel degree. Variabel degree merupakan posisi motor stepper pada keadaan awal. Sedangkan variabel setdeg merupakan posisi motor yang harus dituju oleh motor stepper dari posisi keadaan awal. Variabel degree dan setdeg dijelaskan pada baris program 85 dan 86 (lihat lampiran L1 halaman 2). Gambar 3.12 menjelaskan posisi motor pada setiap receiver ultrasonik. Pada perancangan perangkat keras, sudut antara setiap receiver ultrasonik 45 dejarat. Sedangkan karakteristik dari motor stepper yang digunakan untuk setiap 1 step-nya itu memiliki sudut 1,8 derajat. Jadi motor stepper harus bergerak 71 sebanyak 25 step untuk menempuh ke posisi receiver berikutnya. Oleh sebab itu posisi motor diatas mempunyai nilai degree dengan selisih 25. 8 EC R RECEIVER 7 DEGREE 75 5 REVI E CE R R DEGREE 50 R R VE EI EC 6 45O E CE 4 IV E R DEGREE 125 RECEIVER 3 DEGREE 150 DEGREE 25 R VE EI EC 2 RECEIVER 1 R DEGREE 175 EI VE R DEGREE 200 DEGREE 100 Gambar 3.12 Posisi motor pada setiap receiver ultrasonik Prinsip dari pencarian data terbesar untuk semua data hasil konversi ADC adalah dengan cara mengurangkan setiap data dengan data lainnya. Dengan mengacu pada carry flag, jika carry flag tersebut aktif setelah operasi pengurangan maka hasil pengurangan tersebut bernilai minus. Apabila carry flag tidak aktif maka hasil pengurangan tersebut bernilai positif. Variabel hslkrng merupakan tempat hasil operasi pengurangan. Kemudian variabel PRGK merupakan tempat nilai dari jumlah pergerakan motor stepper. Contoh: PRGK = 25, maka motor stepper akan bergerak sebanyak 25 step. Penjelasan variabel PRGK dan hslkrng terdapat pada baris 98 dan 99 (lampiran L1 halaman 2). Pada modul utama dari program ini diinisialisasi tipe dari interrupt yang digunakan. Pertama-tama di-set bit IT1 untuk menandakan bahwa jenis interrupt yang digunakan merupakan aktif low. Kemudian di-set bit EX1 untuk menandakan bahwa digunakan interrupt 1 eksternal dan selanjutnya men-set bit 72 EA untuk mengaktifkan penggunaan interrupt. Pin IT1, EX1 dan EA dijelaskan pada baris program 112 sampai 114 (lihat lampiran L1 halaman 3). Pertama-tama didefinisikan alamat stack pointer pada alamat 60h, jadi bila terjadi interrupt di dalam program maka stack pointer akan menyimpan status lokasi terakhir program berada. Setelah proses di dalam interrupt selesai, maka program akan melanjutkan kembali di lokasi sebelum diberi interrupt. Variabel SP dijelaskan pada baris program 115 (lihat lampiran L1 halaman 3). Di dalam program utama, digunakan macro untuk mempermudah dalam penulisan source code yang berulang-ulang. Macro initADC merupakan proses inisialisasi dari ADC. Macro initADC dijelaskan pada baris program 9 sampai 19 (lihat lampiran L1 halaman 1). Penjelasan dari macro initADC dijelaskan sebagai berikut ini. Pada awal macro di-set bit outenb ini menandakan bahwa output enable pada ADC diaktifkan. Berikutnya di-clear bit STR yaitu start konversi dan kemudian diclear bit ALEADC untuk mematikan ALE pada ADC. Selanjutnya mengaktifkan bit EOC (akhir dari konversi) dan men-set bit flag fDataAdc. Untuk lebih memastikan bahwa address yang pertama kali diberikan ke ADC itu address 0 maka port P1 diberi nilai 11000111b. Kemudian dalam menentukan posisi awal dari motor stepper diberikan nilai degree-nya sama dengan 200. Karena sebelum program dijalankan, posisi motor stepper diarahkan ke modul sensor 1 secara manual. (lihat lampiran L1 halaman 3 pada baris program 129). Pada saat program baru dijalankan, nilai dari DAT0 sampai DAT7 diberi nilai nol. Variabel DAT0 sampai DAT7 dijelaskan pada baris program 132 sampai 139 (lihat lampiran L1 halaman 3). 73 Setelah semua proses inisialisasi dan definisi nilai awal, maka program akan mulai mengirimkan 3 bit address untuk ADC agar mulai mengkonversi input analog. Karena penekanan tombol pada modul transmitter yang hanya sesaat, dapat terjadi kemungkinan nilai tegangan pada input analog ADC akan hilang terlebih dahulu sebelum dikonversi. Jadi untuk lebih memastikan maka proses konversi ADC dilakukan terlebih dahulu sebelum penyaringan frekuensi. Di dalam program terdapat instruksi untuk mengirimkan 3 bit address mulai dari address 0 hingga address 7. Hal ini berarti ADC akan mengkonversi seluruh input analognya dengan berurutan seperti yang dijelaskan pada baris program 143 sampai 412 (lihat lampiran L1 halaman 3 sampai 8). Pada proses pengiriman 3 bit address ADC terdapat perintah adc addrs yang merupakan macro untuk proses pengiriman 3 bit addres ADC. Pada awalnya macro di push ACC dan register B kedalam stack. Karena akumulator dan register B digunakan juga di dalam macro ini. Kemudian flag fDataAdc diclear, kemudian nilai pada variabel addrs di AND dengan 00000111b ini berfungsi agar nilai address itu berada pada bit ke-0 sampai bit ke-3. Kemudian digeser ke kiri tiga kali ini bertujuan karena pada perancangan perangkat kerasnya 3 pin address untuk ADC itu berada pada P1.3, P1.4 dan P1.5. Kemudian hasil penggeseran ini dikeluarkan pada port 1. Macro ADC ini dijelaskan pada baris program 21 sampai 51 (lihat lampiran L1 halaman 1). Kemudian selanjutnya proses konversi dimulai, di-set bit ALE pada ADC. Perintah NOP (No Operation) bertujuan untuk menunda beberapa saat kemudian men-clear kembali bit ALE pada ADC. Kemudian dilakukan perintah 74 NOP untuk menunda beberapa saat, lalu men-set bit STR (Start Of Conversion) kemudian NOP lagi kemudian meng-clear kembali bit STR. Berikutnya diperiksa status dari flag fDataAdc ini jika flag ini low maka program akan memeriksa kembali status dari flag ini begitu seterusnya. Flag fDataAdc akan aktif bila proses konversi ADC sudah selesai dan program utama sudah ter-interrupt. Jika status dari flag fDataAdc ini high maka data hasil konversi yang ada di port P2 disimpan kedalam sebuah variabel dataAdc. Kemudian dipanggil prosedur simpanData, di dalam prosedur simpandata ini data yang tersimpan di variabel dataAdc akan disimpan lagi kedalam sebuah variabel DAT0 sampai DAT7 sesuai dengan nilai address-nya. Jika prosedur simpanData itu sudah selesai dikerjakan maka program akan kembali lagi dan mengeksekusi baris berikutnya yaitu POP register B dan Akumulator dan macro selesai. Prosedur dari simpan data ini pada awalnya push akumulator ke dalam stack, kemudian nilai address disimpan ke dalam akumulator. Kemudian nilai pada akumulator ini di periksa nilai. Setelah nilai pada variabel dataAdc itu disimpan kedalam salah satu variabel DAT maka program akan pop akumulator kembali dilanjutkan dengan return, yaitu program akan kembali ke baris program sesudah perintah acall terjadi. Prosedur simpanData ini dijelaskan pada baris program 740 sampai 778 (lihat lampiran L1 halaman 13 dan 14). Kemudian setelah semua data dikonversi dan sudah tersimpan di variabel DAT0 sampai DAT7 maka program selanjutnya akan membaca nilai input dari tone decoder pada port P0. Keluaran dari tone decoder ini bisa terjadi pulse atau terjadi perubahan output dari high ke low maupun sebaliknya dengan sangat 75 cepat. Jika menggunakan LED sebagai indikatornya maka LED tersebut akan mengedip (blinking). Jadi setelah prosedur simpandata ini selesai dikerjakan maka variabel DAT0 sampai DAT7 akan berisi nilai hasil konversi input analog sesuai dengan nilai address-nya. Karena keluaran dari tone decoder yang masuk ke dalam mikrokontroler itu bisa merupakan pulse, maka di dalam program harus diatasi dengan membaca input tone decoder sebanyak 4 kali. Kemudian dari keempat input tone decoder ini akan di OR-kan satu sama lain. Hasil dari operasi OR ini disimpan kedalam suatu variabel TD. Untuk menampung input tone decoder yang dibaca sebanyak 4 kali, digunakan register R0, R1, R2 dan R7. Pada awalnya nilai register ini diberi nilai nol. Digunakan gerbang logika OR untuk mem-filter input tone decoder karena prinsip dasar dari gerbang OR yaitu bila salah satu input-nya bernilai high, maka output-nya akan high. Sebab dari digunakannya gerbang logika OR adalah input tone decoder ini sering mengeluarkan pulsa pada saat dibaca oleh mikrokontroler. Bila Input tone decoder memiliki frekuensinya benar, maka output-nya akan mengeluarkan logika low dan bila terjadi pulsa maka output dari tone decoder akan berubah secara terus menerus dari high ke low. Jika logika low di OR-kan dengan logika high, maka hasilnya akan high kemudian bila di OR-kan lagi dengan logika high maka hasil outputnya akan high juga. Ini dijelaskan pada baris program 416 sampai 446 (lihat lampiran L1 halaman 8). Kemudian hasil dari operasi gerbang OR itu disimpan kedalam variabel TD yang kemudian di periksa apakah nilai pada variabel TD itu bernilai 0FFh. Jika sama dengan 0FFh maka program akan kembali lagi dari awal ini 76 menandakan bahwa belum terjadi penekanan tombol pada transmitter ultrasonik. Jika tidak sama dengan 0FFh maka program akan lanjut ke baris program berikutnya. Pengecekan variabel TD ini dijelaskan pada baris program 448 sampai 451 (lihat lampiran L1 halaman 8). Jika nilai pada variabel TD itu tidak sama dengan 0FFh maka program akan masuk kedalam modul pencarian data yang terbesar. Prinsip yang digunakan di dalam program ini untuk mencari data yang paling terbesar ialah dengan operasi SUBB (pengurangan). Dalam operasi pengurangan , carry flag akan aktif atau high bila hasil pengurangan adalah minus. Bila status dari carry flag itu sedang high sebelum operasi pengurangan terjadi maka bilangan yang digunakan dalam operasi tersebut dianggap bilangan minus. Oleh sebab itu, sebelum operasi pengurangan berlangsung, harus di-clear terlebih dahulu status dari carry flag-nya. Penggunaan register R5 ini untuk tempat tampung sementara nilai dari data yang paling terbesar. Variabel PINT ini berfungsi sebagai variabel penunjuk yang setiap bitnya mewakili DAT0 sampai DAT7. Variabel PINT ini merupakan variabel yang bisa diakses setiap bitnya. Variabel PINT0 hingga PINT7 ini merupakan nama variabel dari bit-bit yang termasuk di dalam variabel PINT. Pada awal modul proses ini nilai variabel PINT diberi nilai 0FFh. Yang dijelaskan pada baris program 455 sampai 458 (lampiran L1 halaman 8). Input tone decoder yang sebelumnya di OR sebanyak 4 kali akan di periksa setiap bitnya. Kemudian di periksa bit td0 sama dengan high. Jika sama dengan high maka program lompat ke modul prs0s yang akan memeriksa bit berikutnya yaitu td1. Jika sama dengan nol maka variabel PINT di clear kemudian bit pint0 di set high. Nilai hasil konversi DAT0 dimasukkan kedalam 77 register R5, ini menandakan nilai DAT0 itu paling besar sementara karena proses perbandingannya baru hanya satu data. Dijelaskan pada baris program 461 sampai 464 (lampiran L1 halaman 9). Di dalam modul ini bit td1 akan diperiksa sama dengan high. Jika sama dengan high maka program akan lompat ke modul prs1t. Jika td1 sama dengan nol maka nilai hasil konversi DAT1 akan dibandingkan dengan nilai yang ada di register R5. Proses perbandingan ini dengan cara menguranginya. Jadi nilai DAT1 dikurangi dengan nilai yang ada di register R5 kemudian hasil pengurangan ini diperiksa apakah carry flag-nya aktif. Jika carry flag-nya aktif maka program akan lompat ke modul prs1t. Jika carry flag-nya tidak aktif maka program akan lompat ke modul prs0bs. Dijelaskan pada baris program 467 sampai 474 (lihat lampiran L1 halaman 9). Jika carry flag-nya tidak aktif maka program akan lompat modul prs0bs. Maka variabel PINT di clear kemudian di set bit pint1, ini menandakan bahwa data yang terbesar sementara ialah data ke-1 hasil konversi ADC. Dijelaskan pada baris program 477 sampai 479 (lihat lampiran L1 halaman 9). Jika carry flagnya aktif maka program akan lompat ke modul prs1t, yaitu memeriksa status bit tone decoder berikutnya. Jika status bit td2 itu sama dengan high maka program akan lompat ke modul prs2t. Jika status bit td2 itu sama dengan low maka nilai hasil konversi ADC DAT2 akan dibandingkan dengan nilai yang ada di register R5. Caranya sama dengan yang sebelumnya. Nilai DAT2 dikurangi dengan nilai R5 selanjutnya setelah operasi pengurangan ini di periksa status dari carry flagnya. Jika carry flagnya aktif maka program akan lompat ke modul prs2t. Jika carry flag-nya tidak aktif maka program akan 78 lompat ke modul prs1bs. Dijelaskan pada baris program 482 sampai 489 (lihat lampiran L1 halaman 9). Setelah operasi pengurangan tersebut, jika status dari carry flagnya tidak aktif maka program akan lompat ke modul prs1bs. Kemudian variabel PINT di clear kemudian di set bit pint2, ini menandakan bahwa data yang terbesar sementara ialah data ke-2 hasil konversi ADC. Dijelaskan pada baris program 492 sampai 494 (lihat lampiran L1 halaman 9). Jika carry flagnya aktif maka program akan lompat ke modul prs2t, yaitu memeriksa status bit tone decoder berikutnya. Jika status bit td3 itu sama dengan high maka program akan lompat ke modul prs3t. Jika status bit td3 itu sama dengan low maka nilai hasil konversi ADC DAT3 akan dibandingkan dengan nilai yang ada di register R5. Caranya sama dengan yang sebelumnya. Nilai DAT3 dikurangi dengan nilai R5 selanjutnya setelah operasi pengurangan ini di periksa status dari carry flag-nya. Jika carry flag-nya aktif maka program akan lompat ke modul prs3t. Jika carry flag-nya tidak aktif maka program akan lompat ke modul prs2bs. Dijelaskan pada baris program 497 sampai 504 (lampiran L1 halaman 9). Setelah operasi pengurangan tersebut, jika status dari carry flag-nya tidak aktif maka program akan lompat ke modul prs2bs. Kemudian variabel PINT di clear kemudian di set bit pint3, ini menandakan bahwa data yang terbesar sementara ialah data ke-3 hasil konversi ADC. Dijelaskan pada baris program 507 sampai 509 (lihat lampiran L1 halaman 9). Jika carry flag-nya aktif maka program akan lompat ke modul prs3t, yaitu memeriksa status bit tone decoder berikutnya. Jika status bit td4 itu sama 79 dengan high maka program akan lompat ke modul prs4t. Jika status bit td4 itu sama dengan low maka nilai hasil konversi ADC DAT4 akan dibandingkan dengan nilai yang ada di register R5. Caranya sama dengan yang sebelumnya. Nilai DAT4 dikurangi dengan nilai R5 selanjutnya setelah operasi pengurangan ini di periksa status dari carry flag-nya. Jika carry flag-nya aktif maka program akan lompat ke modul prs4t. Jika carry flag-nya tidak aktif maka program akan lompat ke modul prs3bs. Dijelaskan pada baris program 512 sampai 519 (lihat lampiran L1 halaman 9 dan 10). Setelah operasi pengurangan tersebut, jika status dari carry flag-nya tidak aktif maka program akan lompat ke modul prs3bs. Kemudian variabel PINT di clear kemudian di set bit pint4, ini menandakan bahwa data yang terbesar sementara ialah data ke-4 hasil konversi ADC. Dijelaskan pada baris program 522 sampai 524 (lihat lampiran L1 halaman 10). Jika carry flag-nya aktif maka program akan lompat ke modul prs4t, yaitu memeriksa status bit tone decoder berikutnya. Jika status bit td5 tersebut sama dengan high maka program akan lompat ke modul prs5t. Jika status bit td5 itu sama dengan low maka nilai hasil konversi ADC DAT5 akan dibandingkan dengan nilai yang ada di register R5. Caranya sama dengan yang sebelumnya. Nilai DAT5 dikurangi dengan nilai R5 selanjutnya setelah operasi pengurangan ini di periksa status dari carry flag-nya. Jika carry flag-nya aktif maka program akan lompat ke modul prs5t. Jika carry flag-nya tidak aktif maka program akan lompat ke modul prs4bs. Dijelaskan pada baris program 527 sampai 534 (lihat lampiran L1 halaman 10). 80 Setelah operasi pengurangan tersebut, jika status dari carry flag-nya tidak aktif maka program akan lompat ke modul prs4bs. Kemudian variabel PINT di clear kemudian di set bit pint5, ini menandakan bahwa data yang terbesar sementara ialah data ke-5 hasil konversi ADC. Dijelaskan pada baris program 537sampai 539 (lihat lampiran L1 halaman 10). Jika carry flag-nya aktif maka program akan lompat ke modul prs5t, yaitu memeriksa status bit tone decoder berikutnya. Jika status bit td6 itu sama dengan high maka program akan lompat ke modul prs6t. Jika status bit td6 itu sama dengan low maka nilai hasil konversi ADC DAT6 akan dibandingkan dengan nilai yang ada di register R5. Caranya sama dengan yang sebelumnya. Nilai DAT6 dikurangi dengan nilai R5 selanjutnya setelah operasi pengurangan ini di periksa status dari carry flag-nya. Jika carry flag-nya aktif maka program akan lompat ke modul prs6t. Jika carry flag-nya tidak aktif maka program akan lompat ke modul prs5bs. Dijelaskan pada baris program 542 sampai 549 (lihat lampiran L1 halaman 10). Setelah operasi pengurangan tersebut, jika status dari carry flag-nya tidak aktif maka program akan lompat ke modul prs5bs. Kemudian variabel PINT di clear kemudian di set bit pint6, ini menandakan bahwa data yang terbesar sementara ialah data ke-6 hasil konversi ADC. Dijelaskan pada baris program 552 sampai 554 (lihat lampiran L1 halaman 10). Jika carry flag-nya aktif maka program akan lompat ke modul prs6t, yaitu memeriksa status bit tone decoder berikutnya. Jika status bit td7 itu sama dengan high maka program akan lompat ke modul prs7t. Jika status bit td7 itu sama dengan low maka nilai hasil konversi ADC dat7 akan dibandingkan dengan 81 nilai yang ada di register R5. Caranya sama dengan yang sebelumnya. Nilai DAT7 dikurangi dengan nilai R5 selanjutnya setelah operasi pengurangan ini di periksa status dari carry flag-nya. Jika carry flag-nya aktif maka program akan lompat ke modul prs7t. Jika carry flag-nya tidak aktif maka program akan lompat ke modul prs6bs. Dijelaskan pada baris program 557 sampai 564 (lihat lampiran L1 halaman 10). Setelah operasi pengurangan tersebut, jika status dari carry flag-nya tidak aktif maka program akan lompat ke modul prs6bs. Kemudian variabel PINT di clear kemudian di set bit pint7, ini menandakan bahwa data yang terbesar sementara ialah data ke-7 hasil konversi ADC. Dijelaskan pada baris program 567 sampai 569 (lihat lampiran L1 halaman 10). Jika carry flag-nya aktif maka program akan lompat ke modul prs7t, di dalam modul ini di periksa nilai dari variabel PINT itu sama dengan 0FFh. Jika nilai dari variabel PINT itu sama dengan 0FFh maka program akan kembali ke awal baris program, karena jika varibel PINT itu bernilai 0FFh itu menandakan bahwa tidak ada data terbesar dari data hasil konversi. Pada awal modul proses ini sudah di definisikan bahwa nilai awal dari variabel PINT ini 0FFh. Jika nilai dari variabel PINT itu tidak sama dengan 0FFh maka program akan lompat ke modul pros2 yang ada pada baris program 572 - 574(lampiran L1 halaman 10). Pada modul pros2 ini akan di periksa setiap bit dari varibel PINT. Jika status bit dari pint0 itu high maka program akan lompat ke modul komp0. Jika status bit dari pint0 itu low maka program akan memeriksa status bit PINT berikutnya sampai status bit pint7. Jika program sudah lompat ke salah satu modul komp0 hingga komp7 maka program tidak akan kembali ke modul pros2 82 ini lagi. Jika nilai dari variabel PINT ini bernilai 00h maka program tidak akan lompat ke salah satu modul antara komp0 hingga komp7 sedangkan akan lompat ke modul mulai yaitu kembali ke baris awal program. Di jelaskan pada baris program 578 sampai 585 (lihat lampiran L1 halaman 11). Jika program lompat ke salah satu modul antara komp0 hingga komp7 maka di dalam modul tersebut akan diberikan nilai acuan untuk variabel setdeg. Variabel setdeg ini merupakan nilai posisi untuk setiap receiver yang dijelaskan pada gambar 3.11 (lihat halaman 71). Pada semua modul antara komp0 hingga komp7 itu setelah di definisikan nilai untuk variabel setdeg kemudian program akan lompat ke modul action semuanya. Modul komp0 sampai komp7 dijelaskan pada baris program 590 sampai 620 (lihat lampiran L1 halaman 11). Modul action berisi proses perhitungan untuk menentukan jumlah pergerakan dari motor stepper untuk menuju ke posisi sesuai dengan nilai yang ada pada variabel setdeg. Pada awal modul ini di-set bit variabel CWCCW. Variabel CWCCW ini yang menentukan arah pergerakan dari motor stepper. Jika status dari variabel CWCCW ini high maka motor stepper akan bergerak sesuai dengan arah perputaran jarum jam. Jika status dari variabel CWCCW ini low maka motor stepper akan bergerak berlawanan dengan arah perputaran jarum jam. Selanjutnya nilai yang ada pada variabel setdeg dikurangi dengan nilai yang ada pada variabel degree. Nilai yang ada pada variabel degree ini merupakan nilai aktual posisi motor stepper pada saat ini. Pada awal program nilai variabel degree ini di-set awal dengan 200d, arah motor stepper-nya menunjuk pada receiver ultrasonik ke-1 (untuk lebih jelas lihat gambar 3.11 83 halaman 71). Kemudian hasil pengurangan ini disimpan ke dalam variabel hslkrng. Selanjutnya status dari carry flag di periksa, jika status carry flag-nya sama dengan high maka program akan lompat ke modul label1. jika status carry flag-nya sama dengan low maka program akan lompat ke modul label7 yang terdapat pada baris 622 sampai 631 (lihat lampiran L1 halaman 11 dan 12). Jika status dari carry flag-nya sama dengan high maka program akan lompat ke modul label1. Didalam modul label1 ini nilai yang ada pada variabel hslkrng itu dikalikan dengan bilangan (-1) dan hasil perkalian tersebut itu di simpan ke dalam variabel hslkrng lagi. Kemudian nilai yang ada pada variabel hslkrng ini dikurangi dengan bilangan 100, jika status carry flag-nya sama dengan low maka program akan lompat ke modul label2. jika status carry flagnya sama dengan high maka program akan lompat ke modul label4. Dijelaskan pada baris program 633 sampai 643 (lihat lampiran L1 halaman 12). Jika status dari carry flag-nya sama dengan low maka program akan lompat ke modul label7. Didalam modul label7 ini nilai yang ada pada variabel hslkrng itu dikurangi dengan bilangan 100 dan setelah operasi pengurangan tersebut diperiksa status dari carry flag-nya. Jika status dari carry flag-nya sama dengan low maka program akan lompat ke modul label8. Jika status dari carry flag sama dengan high maka nilai yang ada pada variabel hslkrng dimasukkan ke variabel prgk dimana nilai pada variabel prgk ini merupakan jumlah pergerakan step pada motor stepper. Kemudian dipanggil prosedur mtrmov untuk membangkitkan pulsa clock untuk menjalankan motor stepper. Setelah prosedur mtrmov ini selesai dijalankan maka nilai yang ada pada variabel setdeg dimasukkan ke variabel degree. Jadi posisi motor sekarang ini ada pada posisi 84 sesuai dengan nilai yang ada pada variabel degree. Kemudian setelah disimpan ke variabel degree maka program akan lompat ke modul selesai. Dijelaskan pada baris program 665 sampai 677 (lihat lampiran L1 halaman 12). Pada modul label1, jika hasil pengurangan antara variabel hslkrng dengan bilangan 100 itu status carry flag-nya sama dengan low maka program akan lompat ke modul label2. Jika status dari carry flag-nya sama dengan high maka program akan lompat ke modul label4. Jika status dari carry flag-nya sama dengan low maka program akan lompat ke modul label2 ini. Pada awal modul ini bilangan 200d dikurangi dengan nilai yang ada pada variabel hslkrng. Kemudian nilai dari hasil pengurangan ini di simpan kembali ke variabel hslkrng dan nilai dari variabel hslkrng ini juga disimpan ke dalam variabel prgk. Kemudian dipanggil prosedur mtrmov untuk menggerakkan motor stepper dan jika prosedur mtrmov sudah dijalankan selanjutnya program akan lompat ke modul selesai. Dijelaskan pada baris program 644 sampai 655 (lihat lampiran L1 halaman 12). Jika status dari carry flag-nya sama dengan high maka program akan lompat ke modul label4 ini. Pada awal modul ini di clear bit CWCCW (arah perputaran motor stepper berlawanan arah jarum jam) kemudian nilai yang ada di variabel hslkrng dimasukkan ke dalam variabel prgk. Jadi, motor stepper akan bergerak sebanyak jumlah nilai (step) yang ada pada variabel prgk. Setelah dipanggil prosedur mtrmov maka nilai yang ada pada variabel setdeg dimasukkan ke dalam variabel degree, ini menandakan bahwa posisi motor stepper pada saat sekarang ini sedang berada pada posisi yang ditunjuk oleh 85 variabel degree. Dijelaskan pada baris program 657 sampai 663 (lampiran L1 halaman 12). Pada modul label7, bila hasil pengurangan antara variabel hslkrng dengan bilangan 100 menghasilkan status carry flag-nya sama dengan low maka program akan lompat ke modul label8 ini. Didalam modul ini pertama kali di clear bit CWCCW kemudian bilangan 200 dikurangi nilai yang ada pada variabel hslkrng. Hasil dari pengurangan ini dimasukkan ke dalam variabel hslkrng yang kemudian di simpan lagi ke variabel prgk untuk menggerakkan motor stepper sebanyak jumlah nilai yang ada pada variabel prgk. Setelah di panggil prosedur mtrmov maka nilai yang ada pada variabel setdeg dimasukkan ke dalam variabel degree. Kemudian program akan lompat ke modul selesai, dengan kata lain modul selesai ini program akan lompat kembali dari modul mulai. Dijelaskan pada baris program 679 sampai 694 (lihat lampiran L1 halaman 12 dan 13). Secara garis besar, program sudah menjalankan motor stepper dan menyimpan status posisi terakhir dari motor stepper. Prosedur mtrmov sering di panggil di dalam program yang dikarenakan modul mtrmov ini yang mengendalikan pergerakan motor stepper dan juga pembangkit pulsa clock untuk menjalankan motor stepper. Pada awal modul mtrmov ini di set bit enable untuk IC L297, bit ini harus di-set dengan tujuan agar motor stepper dapat bergerak. Jika bit enable ini belum di-set maka motor stepper tidak dapat bergerak walaupun sudah diberikan pulsa clock yang dibangkitkan dari program pada mikrokontroler. Sebelumnya, jumlah pergerakan step untuk motor stepper ditentukan dengan nilai yang ada 86 pada variabel prgk. Pada perancangan hardwarenya jenis pergerakan motor yang digunakan ialah half step. Jadi, nilai yang ada pada variabel prgk harus dikalikan dengan bilangan 2 untuk mendapatkan posisi motor stepper dengan tepat. Kemudian jika nilai pada variabel prgk ini sama dengan nol (motor stepper tidak bergerak), maka program akan keluar dari prosedur mtrmov ini. Jika nilai pada variabel prgk tidak sama dengan nol, maka akan dibangkitkan pulsa clock untuk menggerakkan motor stepper sesuai dengan nilai yang ada pada variabel prgk yang sudah dikalikan dengan bilangan 2. Jika motor stepper sudah bergerak ke posisi yang dituju maka program akan keluar dari prosedur mtrmov ini dan kembali ke baris program sesudah prosedur mtrmov ini di panggil. Prosedur mtrmov ini dijelaskan pada baris program 697 sampai 721 (lampiran L1 halaman 13). Di dalam program ini menggunakan satu interrupt eksternal yaitu intr1. jika program ini ter-interrupt maka program akan secara langsung akan lompat ke modul intr1. Di dalam modul intr1 ini bit outenb di clear terlebih dahulu kemudian ada perintah nop (No Operation), jadi pada saat program di baris nop ini maka program tidak melakukan apa-apa hanya untuk memberi jeda waktu sedikit kemudian di set kembali bit outenb. Ini bertujuan untuk mengeluarkan hasil konversi data ADC ke port 2 pada mikrokontroler. Kemudian flag fDataAdc di set setelah modul interrupt ini selesai dijalankan maka program akan kembali lagi ke program utama sebelum program ini ter-interrupt. Dijelaskan pada baris program 724 sampai 730 (lampiran L1 halaman 13). Di dalam program utama ini digunakan delay, modul delay yang dibuat dengan macro ini bertujuan untuk mempermudah dalam pemanggilan prosedur 87 delay ini. Contoh: pada program ada perintah delay 1, ini berarti program akan tertunda selama 0ffh yang dikurangi satu hingga mencapai nilainya sama dengan nol. Jadi delay 1 itu berarti satu kali 0ffh. Jika delay 25 ini menandakan program akan tertunda selama 25 kali 0ffh. Jadi untuk memanggil delay hanya dengan perintah delay xxxh sesuai dengan kebutuhan. Untuk penjelasan dari macro delay dan prosedur DLY1 dijelaskan pada baris program 734 sampai 737 (lihat lampiran L1 halaman 14) dan untuk penjelasan dari macro delay dijelaskan pada baris program 4 sampai 7 (lihat lampiran L1 halaman 1). 3.3 Rancang bangun sistem Alat bantu ultrasonik untuk mobile robot terbagi menjadi dua bagian yaitu tempat untuk modul transmitter dan tempat untuk modul receiver. Pada modul transmitter terdapat dua buah baterai 9 volt, IC op-amp CA3130, IC timer NE555 dan satu buah transmitter ultrasonik. Gambar 3.13 menunjukkan rancang bangun dari tempat untuk modul transmitter. 10,5 cm 3,8 cm 9,9 cm Gambar 3.13 Ukuran tempat modul transmitter 88 Tempat modul transmitter tersebut memiliki tinggi 3,8 cm dengan lebar 9,9 cm dan panjang 10,5 cm. Dalam kotak tersebut terdapat rangkaian untuk modul transmitter yang memiliki tata letak komponen pada gambar 3.14. Tx adalah transmitter ultrasonik dan generator 40 KHz dimaksudkan untuk rangkaian dari timer NE555. Regulator 16 volt dimaksudkan untuk menaikkan tegangan dari IC regulator 12 volt menjadi 16 volt. Perbedaan dua saklar S1 dan S2 adalah saklar S1 digunakan sebagai tombol on/off dari modul transmitter sementara saklar S2 untuk memancarkan gelombang ultrasonik. TX S1 LED Inverting Operational Amplifier Generator 40KHz S2 Regulator 16V Baterai 9V Baterai 9V Gambar 3.14 Tata letak komponen pada modul transmitter Di dalam tempat untuk modul receiver terdapat 8 buah modul sensor, modul sistem minimum, modul driver motor stepper, modul rangkaian power supply dan sebuah kipas pendingin. Gambar 3.15 menunjukkan rancang bangun dari tempat untuk modul receiver. 89 13,5 cm 11,5 cm Gambar 3.15 Ukuran tempat modul receiver Modul receiver berbentuk oktagon dengan diameter 28,5 cm. Tinggi dari oktagon ini adalah 13,5 cm dan lebarnya adalah 11,5 cm. Dalam ruang oktagon tersebut terdapat rangkaian-rangkaian lainnya yang ditunjukkan pada gambar 3.16 berikut ini. RX 6 RX 7 8 Trafo Baterai Stepper Motor Fan RX 4 Power Supply 1 Motor Driver 2 5 R X R X R X R X ADC & MCS-52 RX 3 Gambar 3.16 Tata letak komponen pada modul receiver Modul-modul dalam receiver adalah modul sensor, modul sistem minimum, modul rangkaian power supply dan modul driver motor stepper. Tata 90 letak komponen-komponen didalam modul-modul tersebut adalah sebagai berikut: Peak Detektor Non Inverting Operational Amplifier Level 2 Non Inverting Operational Amplifier Level 1 RX Tone Decoder 40KHz Gambar 3.17 Tata letak komponen pada modul sensor H5 H 4 ADC 0809 H2 H1 MCS 52 H 3 Timer 500KHz Gambar 3.18 Tata letak komponen pada modul sistem minimum Pada modul sensor (gambar 3.17), Rx menunjukkan receiver ultrasonik. Dua buah penguat op-amp akan memiliki keluaran ke peak detector dan tone decoder. Di modul sistem minimum, H1-H5 menunjukkan header yang digunakan. Sementara itu timer 500 KHz adalah rangkaian timer eksternal yang digunakan untuk ADC 0809. 91 Fast diode L298 L297 Gambar 3.19 Tata letak komponen pada modul driver motor stepper Jembatan Dioda Tapis Regulator H1 Gambar 3.20 Tata letak komponen pada modul rangkaian power supply Pada modul driver motor stepper, terdapat rangkaian fast diode yang menguhubungkan motor stepper dengan IC L298. Di modul rangkaian power supply, header H1 akan memberikan supply terhadap seluruh komponenkomponen di dalam modul receiver. 92 Gambar 3.21a Modul transmitter Gambar 3.21b Modul receiver Gambar 3.21c Alat bantu ultrasonik untuk reorientasi mobile robot