• Tidak ada hasil yang ditemukan

3.2 Perancangan Piranti Lunak

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.

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 non-aktifkan 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 dinon-aktifkan 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.

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

220V AC Fuse 1A T1 I: 220V O: 18V Dioda-dioda Rectifier D1 D2 D3 Regulator 12V Regulator5V 12V Output G 12 5 Header 4 Pin Baterai 12V C1 C2 C3 C4 S1 5V Output LED1 R1 Ke pin Vs ICL298 A B

Daftar komponen modul rangkaian power supply

Kapasitor Nilai Resistor Nilai

C 1 4700uF / 35V R 1 1K2Ω

C 2 100uF / 50V

C 3 470uF / 50V Dioda Tipe

C 4 100uF / 50V D 1 IN4001

D 2 IN4001

D 3 IN4001

START

INISIALISASI SISTEM -> Deklarasi variabel -> Set nilai awal variabel

->Defini jenis intrrupt

Konversi semua data analog ADC

Simpan hasil konversi sesuai dengan nilai

addressnya

YA

Cari data yang terbesar dari data-data hasil

konversi ADC

Sudah ada data yang terbesar ? Cek bit input tone

decoder = 0FFh ? TIDAK YA Tentukan nilai pergerakan dari motor stepper Simpan status posisi dari motor

stepper END TIDAK YA Ada penekanan tombol lagi ? TIDAK Baca input dari tone decoder di P0

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

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

sebanyak 25 step untuk menempuh ke posisi receiver berikutnya. Oleh sebab itu posisi motor diatas mempunyai nilai degree dengan selisih 25.

RECEIVER 1 R E C E I V E R 5 RE CE IV E R 7 R E C E IVER 3 RE CE IV ER 4 RE CE IV ER 6 RECE IVER 8 RE CE IVER 2 DEGREE 200 DEGREE 25 DEGREE 50 DEGREE 75 DEGREE 100 DEGREE 150 DEGREE 125 DEGREE 175 45O

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

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 clear bit STR yaitu start konversi dan kemudian

di-clear 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).

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 di-

clear, 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

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

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

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

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

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

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

Dokumen terkait