Pengendalian 8 buah Motor oleh DST-51

dokumen-dokumen yang mirip
PENGATURAN KECEPATAN MOTOR DENGAN PC OLEH DST-5 2

Wireless Infrared Printer dengan DST-51 (Pengambilan Data dari Standard Parallel Port)

Teknik Interface Keypad 4x3 ke DST-51

Register-register MT8888

MENAMPILKAN 1000 KARAKTER PESAN PADA MODUL M1632 LCD OLEH MODUL DST-51

Memprogram Port sebagai Output dan Input Sederhana

TERJADI INTERRUPT MELAYANI INTERRUPT KEMBALI MENERUSKAN PROGRAM YANG TERHENTI PROGRAM YANG SEDANG BERJALAN. Gambar 4.1 Interrupt

KOMUNIKASI DATA DENGAN MENGGUNAKAN TEKNIK RS485

PENAMPIL TOMBOL-TOMBOL REMOTE CONTROL SONY PADA M1632 LCD OLEH MODUL DST-52

PENGHITUNG WAKTU DENGAN TAMPILAN LCD M1632 OLEH DST-51

ANTAR MUKA DST-51 DENGAN MODUL AD-0809

PROGRAMMABLE TIMER DENGAN TAMPILAN M1632 LCD MENGGUNAKAN MODUL DST-51

TAMPILKAN NADA DTMF DAN DERING TELEPHONE OLEH MODUL DF-88 DAN MODUL DST-51 PADA LCD

Aplikasi Pengukur Ketinggian Air Mengunakan Modul Sensor InfraRed Object Detector

PENGGUNAAN KEYPAD 4X3 DAN PC KEYBOARD PADA MODUL DST-52 DENGAN TAMPILAN M1632 LCD

Wireless Infrared Printer dengan DST-51 (Komunikasi Infra Merah dengan DST-51)

PORT PARALEL MIKROKONTROLER ATMEL AT89C51

DESKRIPSI SINGKAT INSTRUKSI-INSTRUKSI PADA AT89S51

MESIN KETIK ELEKTRONIK DENGAN TAMPILAN M1632 LCD OLEH MODUL DST-52

AD Channel AD Conversion

Percobaan 5 PENGENALAN MIKROKONTROLER 8051

BAB IV ANALISA DAN HASIL UJI COBA RANGKAIAN

APLIKASI MODUL DST -52 SEBAGAI JAM DIGITAL DENGAN INPUT DARI PC KEYBOARD DAN M1632 LCD SEBAGAI PENAMPIL

Aplikasi Modul InfraRed Object Detector Sebagai Pengukur Jarak

BAB 3 PERANCANGAN ALAT DAN PROGRAM

BAB 2 LANDASAN TEORI. Dalam bab ini penulis akan membahas tentang komponen-komponen yang

LAMPIRAN D DATA SHEET

BAHASA PEMOGRAMAN AT89S/Cxx (assembly)

Memprogram Interupsi AT89S51

BAB III ANALISA DAN CARA KERJA RANGKAIAN

DASAR INPUT/OUTPUT (1) (PORT PPI DAN PORT 1 SEBAGAI OUTPUT)

PENULISAN KARAKTER DENGAN MENGGUNAKAN TEKNIK PENULISAN PADA KEYPAD HANDPHONE OLEH MODUL DST-51, KEYPAD 4X3 DAN M1632 LCD

BAB IV PENGUJIAN DAN ANALISA. Pengujian terhadap sistem yang telah dibuat dilakukan untuk mengetahui

BAB III RANCANGAN SISTEM. dirancanag. Setiap diagram blok mempunyai fungsi masing-masing. Adapun diagram

BAB 2 LANDASAN TEORI. Agar kendaraan lebih teratur dan tidak terlalu padat, biasanya tempat perparkiran ini dibagi

THERMOMETER DIGITAL DENGAN MODUL DST-51, ADC-0809 DAN LCD 2X16

Lab Elektronika Industri Mikrokontroler - 1 AT89C1051

Ringkasan Set Instruksi Dan Mode pengalamatan ( Addressing Mode )

AKSES MEMORI Menggunakan DT-51 MinSys

Laporan Modul 2, EL3006 Timer/Counter dan Interrupt Jongguran Sondang DN ( )/ Kelompok 48/ Jumat, 14 Maret 2008 Asisten: Virgilius

Tabel Perbandingan ROM dan RAM pada beberapa seri ATMEL

INSTRUKSI DAN BAHASA PEMOGRAMAN MIKROKONTROLER

Percobaan 7 INTERFACE MIKROKONTROLER DAN MOTOR STEPPER

PORT SERIAL MIKROKONTROLER ATMEL AT89C51

Antar Muka Modul RTC-1287 dengan Modul DST-51

SISTEM INTERUPSI MIKROKONTROLER ATMEL

I/O dan Struktur Memori

Memprogram Interface Motor

Percobaan 8 INTERFACE MIKROKONTROLER DAN KOMPUTER SECARA SERIAL

BAB II TINJAUAN PUSTAKA

DASAR INPUT/OUTPUT (2) (PORT PPI DAN PORT 1 SEBAGAI INPUT/OUTPUT)

TIMER DAN COUNTER MIKROKONTROLER ATMEL

INTRUKSI-INTRUKSI BAHASA PEMROGRAMAN ASSEMBLY

Menggunakan Bahasa Pemrograman Assembly

BAB II TINJAUAN PUSTAKA. Mikrokontroler, sebagai suatu terobosan teknologi mikrokontroler dan

BAB 2 TINJAUAN TEORITIS. Mikrokontroller, sebagai suatu terobosan teknologi mikrokontroler dan microkomputer,

BAB 2 LANDASAN TEORI

BAB 2 TINJAUAN TEORITIS

DT-51 Application Note

PERCOBAAN 11 PULSE WIDHT MODULATION

SISTEM PENGONTROLAN ALAT ELEKTRONIK DENGAN MEDIA KOMPUTER DAN MIKROKONTROLER AT89C51 MELALUI MEDIA KOMUNIKASI SERIAL PORT RS232

PETUNJUK PEMROGRAMAN DAN SET INSTRUKSI

BAB V HASIL DAN PEMBAHASAN Perangkat Keras (Hardware)

BAB III PERANCANGAN SISTEM. Secara garis besar rangkaian pengendali peralatan elektronik dengan. blok rangkaian tampak seperti gambar berikut :

BAB III PERANCANGAN SISTEM

BAB 3 PERANCANGAN SISTEM. pada sistem pengendali lampu telah dijelaskan pada bab 2. Pada bab ini akan dijelaskan

BAB IV PENGUJIAN DAN EVALUASI SISTEM. Pengujian dan evaluasi sistem pada tugas akhir ini meliputi perangkat

Memprogram Interface Display

MIKROKONTROLER Arsitektur Mikrokontroler AT89S51

Mengenal bahasa assembly

BAB 2 LANDASAN TEORI. Mikrokontroler AT89S52 termasuk kedalam keluarga MCS-51 merupakan suatu. dua macam memori yang sifatnya berbeda yaitu:

4. Port Input/Output Mikrokontroler MCS-51

Percobaan 5. TIMER/COUNTER Menggunakan DT-51 MinSys

BAB 2 LANDASAN TEORI. Dalam bidang elektronika, perlahan-lahan peralatan-peralatan manual mulai digantikan

LM124/LM224/LM324/LM2902

PERCOBAAN 3. KONTROL DISPLAY 7-SEGMENT Menggunakan DT-51 MinSys

BAB IV PENGUJIAN DAN ANALISA DATA

BAB III RANCANGAN DAN CARA KERJA ALAT

DOWNLOAD BITMAP FILE KE LCD GRAFIK 240X64 PIXEL OLEH MODUL DST-51

Akuisasi data dengan remote host AT89s51 melalui serial RS232

PERTEMUAN. SET INSTRUKSI MIKROKONTROLER AT 89C51 (Lanjutan)

BAB 3 PERANCANGAN ALAT DAN BAHAN. 3.1 Diagram Blok dan Rangkaian Sensor Ketinggian Air

DESIGN INTERFACE PADA AT89S52 8k Byte In-System Programmable 8bit Mikrokontroler

2. SPESIFIKASI EKSTERNAL SPC DC MOTOR

LAPORAN PRAKTIKUM MIKROPROFESOR Z80-PIO UNTUK GERAK MOTOR STEPPER

RANCANG BANGUN PENGAMAN MOBIL BERBASIS MIKROKONTROLER AT89S51 DENGAN APLIKASI TELEPON SELULER SEBAGAI INDIKATOR ALARM

BAB V PENGUJIAN DAN ANALISIS. pengukuran terhadap parameter-parameter dari setiap komponen per blok maupun

BAB III PERANCANGAN DAN KERJA ALAT

BAB II DASAR TEORI MIKROKONTROLER II (PENERIMA DATA) MEDIA PENGIRIMAN DATA. Gambar 2.1 Blok Pengiriman Data Mikrokontroler I ke Mikrokontroler II

Program Studi Fisika Fakultas Matematika dan Ilmu Pengetahuan Alam Universitas Lambung Mangkurat

Program di computer (visual basic) Private Sub Command1_Click() End Sub. Private Sub Command2_Click() End Sub. Private Sub Command3_Click() End Sub

PERCOBAAN 2 SAKLAR PUSH BUTTON

BAB IV PENGUJIAN DAN PEMBAHASAN

BAB II LANDASAN TEORI

Alarm Pintu, Harap Pintu Tutup Kembali, Jangan Buka Pintu Lama-lama versi 2

Transkripsi:

Ib2 Pengendalian 8 buah Motor oleh DST-51 Pada aplikasinya, seringkali suatu sistem mikrokontroler digunakan untuk mengendalikan beberapa buah motor secara bersamaan. Berikut ini adalah pengendalian delapan buah motor DC oleh DST-51, sebuah sistem berbasis AT89C51 di mana proses pengendalian yang dilakukan adalah berupa pengaturan kecepatan dan keaktifan motor dengan arah putar yang searah. Rangkaian Pengendali Rangkaian pengendali pada setiap motor terdiri dari dua buah transistor yaitu BD139 yang terhubung dengan motor dan C9014 yang mengatur keaktifan BD139. IMotor Gambar 1 Aliran arus pada Transistor BD139 Transistor BD139 mempunyai arus kolektor maksimum (I Cmax ) sebesar 1A sesuai data sheet, namun pada aplikasinya sebaiknya digunakan 0,5A. Arus kolektor maksimum dari transistor BD139 adalah arus yang mengalir melalui Motor DC oleh karena itu dapat juga disebut sebagai I Motor. Dengan arus motor sebesar 0,5A maka maksimal arus motor DC yang dapat dikendalikan oleh rangkaian ini juga 0,5A. Transistor BD139 mempunyai penguatan (H FE ) sebesar 40 maka sesuai persamaan berikut: I Motor = I b1 * H FE.. (1) 0,5A = I b1 * 40 I b1 = 12,5 ma maka arus basis dari Q1 BD139 yang diperlukan untuk mengaktifkan transistor ini adalah sebesar 12,5 ma Untuk memberikan arus sebesar ini pada basis Q1 BD139 maka harga R2 yang terhubung pada basis transistor ini adalah: (2) maka akan diperoleh harga R2 adalah 344 ohm atau 330 ohm yang biasa digunakan di pasaran. Arus sebesar 12,5 ma masih terlalu besar untuk Port AT89C51 yang mempunyai kemampuan maksimum I OL 10 ma, oleh karena itu transistor Q2 C9014 perlu ditambahkan sebagai penguat.

IC2 Ib2 Gambar 2 Aliran arus pada C9014 Dengan R2 sebesar 330 ohm maka I C2 yang terjadi saat transistor Q1 C9014 berada pada kondisi aktif (saturasi) adalah:... (3) Dengan persamaan ini, maka diperoleh IC2 adalah 15mA. Dengan H FE C9014 sebesar 60 dan digunakannya persamaan 1, maka I b1 yaitu arus basis Q2 C9014 yang diambil dari Port 1 AT89C51 cukup sebesar 250 ua saja. Agar Port 1 AT89C51 mengeluarkan arus sebesar 250 ua saat kondisi high maka harga R1 diperoleh dengan persamaan berikut. (4) V OH adalah tegangan output Port 1 AT89C51 saat kondisi high yaitu minimal 2,4 Volt. Dengan persamaan ini maka harga R1 yang diperoleh adalah 6,8 K Dengan rangkaian ini, maka pada saat kondisi P1.0 berlogika high maka transistor Q2 C9014 akan saturasi sehingga arus I C2 mengalir dari R2 langsung menuju ke ground. Transistor Q1 BD139 tidak mendapat bias arus pada basisnya dan berada pada kondisi cut off. Hal ini menyebabkan arus motor tidak mengalir dan motor tidak berputar., namun bila kondisi P1.0 berlogika low maka transistor Q2 C9014 akan cut off dan arus dari R2 tidak langsung menuju ke ground melainkan mengalir ke basis I b1 sehingga transistor Q1 BD139 berada pada pada kondisi saturasi. Arus I Motor akan mengalir dan menggerakkan motor DC. Diode D1 IN4001 berfungsi sebagai penahan adanya tegangan balik dari kumparan motor. Maka dapat disimpulkan bahwa, motor DC akan berputar setiap kali kondisi P1.0 low dan berhenti berputar setiap kondisi P1.0 high.

Pengaturan kecepatan Proses pengaturan kecepatan dilakukan dengan menggunakan Teknik PWM (Pulse Width Modulation) yaitu dengan mengatur lebar pulsa ON (pulsa untuk mengaktifkan motor) dalam periode tertentu. Semakin lebar pulsa ON atau kondisi low pada P1.0 maka kecepatan putar motor akan semakin bertambah hingga pada batas maksimumnya maka kondisi P1.0 akan berlogika low terus, sebaliknya semakin sempit pulsa ON atau kondisi low pada P1.0 maka kecepatan putar motor akan semakin berkurang hingga pada batas maksimumnya maka kondisi P1.0 akan berlogika high terus. Periode T ON Motor bertambah cepat Putaran paling cepat Gambar 3 Bentuk sinyal PWM ] 8 buah rangkaian driver seperti yang tampak pada gambar 1 terhubung pada Port 1 AT89C51, oleh karena itu untuk menghasilkan sinyal PWM seperti pada gambar di atas pada masing-masing port dari Port 1 maka dibuat sebuah program yang mengeluarkan data dari tabel yang dibentuk dalam memori RAM Internal AT89C51.

Motor 1 Motor 2 Motor 3 Motor 4 Motor 5 Motor 6 Motor 7 Motor 8 TABEL KECEPATAN Motor 8 7 6 5 4 3 2 1 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 1 0 1 0 1 0 0 0 1 0 1 0 1 0 0 0 1 1 1 1 1 0 0 0 1 1 1 1 1 0 0 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 50H 51H 52H 53H 54H 55H 56H 57H 58H 59H Kecepatan Gambar 4 Tabel Kecepatan Gambar 4 menunjukkan hubungan antara tabel kecepatan dan sinyal PWM yang dihasilkan. Seperti telah dijelaskan sebelumnya, bahwa untuk mengaktifkan motor dilakukan dengan memberikan kondisi low pada port yang berhubungan, oleh karena itu semakin lebar kondisi low maka akan semakin banyak logika 0 pada tabel kecepatan tiap motor. Tabel Kecepatan pada gambar 4 menunjukkan bahwa tiap kolom berisi dengan data kecepatan motor. Tampak pada tabel tersebut bahwa data kecepatan motor berada di tiap-tiap bit dari 10 buah lokasi memori, hal ini menunjukkan bahwa terdapat 10 step perubahan kecepatan untuk tiap-tiap motor. Oleh karena itu dapat disimpulkan sesuai dengan data pada gambar 4 bahwa: Motor 1 menempati kecepatan pada step 1 Motor 2 menempati kecepatan pada step 4 Motor 3 menempati kecepatan pada step 2 Motor 4 menempati kecepatan pada step 4 Motor 5 berhenti Motor 6 menempati kecepatan pada step 6 Motor 7 menempati kecepatan pada step 10 (tertinggi) Motor 8 menempati kecepatan pada step 8 Dengan sebuah program looping yang mengambil data-data di tabel tersebut dan mengirimkan ke Port1 secara paralel dengan berurutan maka sinyal-sinyal PWM akan muncul pada Port 1 seperti yang tampak pada sinyal-sinyal PWM pada gambar 4. Listing 1 Loop2Motor: Mov R0,#TabelKecepatan Mov R7,#StepKecepatan ;R0 menuju ke tabel data ;kecepatan motor ;R7 diisi dengan jumlah step ;kecepatan LoopMotor: ;Ambil data di tabel keceptan ;motor Mov B,EnableMotor ;OR kan dengan keaktifan motor Orl A,B ; Mov P1,A ;Kirim ke P1 Inc R0 ;Tunjuk tabel kecepatan ;berikutnya

Djnz R7,LoopMotor ;Lakukan hingga sejumlah step ;kecepatan Ajmp Loop2Motor ;Kembali ke loop2motor Perubahan kecepatan dilakukan dengan mengubah isi tabel data kecepatan pada motor yang akan dirubah. Misalkan untuk menambah kecepatan motor 1 ke step berikutnya, dapat dilakukan dengan memberikan logika 0 pada bit 0 alamat 51H, maka kecepatan motor 1 akan berubah menuju ke step 2. Untuk merubah data-data kecepatan pada tabel maka diperlukan sebuah tabel lain yang berfungsi untuk menyimpan pointer dari data kecepatan tiap motor. Pada tabel gambar 4, saat itu pointer dari motor 1 sedang berada di alamat 51H dan pointer motor 2 di alamat 54H. Pointer-pointer ini disimpan pada sebuah tabel pointer data kecepatan di mana pointer ini digunakan oleh program pada saat akan dilakukan perubahan kecepatan pada motor. TABEL POINTER DATA KECEPATAN Motor 1 2 3 4 5 6 7 8 0 1 0 1 0 0 0 1 0 1 0 1 0 1 0 0 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 0 1 0 0 1 0 0 0 0 0 0 0 1 1 0 1 0 1 0 1 0 0 0 Gambar 5 Tabel Pointer Data Kecepatan berdasar data pada tabel 4 Misalkan akan dilakukan penambahan kecepatan pada motor 1, maka program akan melihat motor 1 pada tabel pointer. Karena pointer pada motor 1 menunjukkan alamat 51H maka bit 0 (urutan bit dari motor 1) pada alamat tersebut diberi logika 0 dan pointer menunjukkan ke alamat 52H serta disimpan kembali ke tabel pointer data kecepatan. Listing 2: ;Penambahan kecepatan ;- Ambil pointer kecepatan motor di alamat ini ditunjuk oleh kode ; yang diterima (R0) ;- Apabila pointer menunjuk ke akhir tabel maka pointer tidak berubah ;- Apabila pointer belum menunjuk ke akhir tabel maka pointer akan menuju ke ; alamat berikutnya ;- Proses penambahan kecepatan dilakukan dengan meng-clear bit-bit dari motor ; yang diakses di alamat yang ditunjuk oleh pointer data kecepatan ;------ TambahKecepatan: ;Ambil Pointer data kecepatan di tabel ;pointer Cjne A,#StepKecepatan+TabelKecepatan,TidakResetAlamat ;Bila alamat

;terakhir, pointer bertahan ; Ret TidakResetAlamat: Push A ;Pointer menunjuk ke alamat berikut Inc A ;dan simpan kembali di tabel pointer ; Pop A ; Ret ;------------- ;- Ambil pointer data kecepatan dan bila belum mencapai ; alamat awal, tunjuk ke alamat sebelumnya dan simpan kembali ke tabel ;- Bila mencapai alamat awal, maka tetap tahan di alamat tersebut KurangiKecepatan: Mov A,R0 Clr C ; Subb A,#JumlahMotor ;Ambil Kode yang diterima ;Kode yg diterima - JumlahMotor = alam ;pointer data kecepatan dari motor ;yang diakses Mov R0,A ;Ambil pointer data kecepatan dari mot ; Cjne A,#TabelKecepatan,Tidak2resetAlamat ;Bila alamat bukan ;step awal, maka menuju alamat step ;sebelumnya LihatCarry2: Mov A,#TabelKecepatan ;bila alamat awal maka, tahan pointer Ret Tidak2ResetAlamat: Dec A Ret ;tersebut ;Pointer menuju ke alamat step sebelum- ;nya ;simpan di Tabel Pointer Data ;Kecepatan Potongan program di atas berfungsi untuk mengambil data Pointer Data Kecepatan, menunjuk ke alamat selanjutnya dan menyimpannya kembali ke tabel pointer pada saat terjadi penambahan kecepatan atau menunjuk ke alamat sebelumnya dan menyimpan kembali ke tabel pointer pada saat terjadi pengurangan kecepatan. Setelah pointer yang menunjukkan alamat dari data kecepatan terakhir yang diakses oleh motor yang dipilih diketahui maka selanjutnya bit yang menunjukkan motor yang dipilih saat itu akan di set (untuk mengurangi kecepatan) atau di clear (untuk menambah kecepatan). Hal ini dilakukan dengan melakukan loncatan ke lokasi-lokasi tertentu dari program yang berisi perintah SET atau CLR dari bit-bit berdasarkan motor yang dipilih. Listing 3: Mov R0,A ;R0 diisi alamat step kecepatan yang ;akan diubah Mov DPTR,#AksiMotor ;DPTR ke alamat awal tabel aksi motor Mov A,R5 ;Kode yg diterima - 'A' = Urutan Clr C ;aksi motor Subb A,#'A' ; Mov B,#07 ;Urutan aksi motor * 7 (area yg ;digunakan Mul AB ;setiap urutan) Jmp @A+DPTR ;Lompat ke alamat urutan aksi motor

Kembali: AksiMotor ;Tambah Kecepatan/aktifkan Motor 1 Clr A.0 ;Tambah Kecepatan/aktifkan Motor 2 Clr A.1 ;Tambah Kecepatan/aktifkan Motor 3 Clr A.2 ;Tambah Kecepatan/aktifkan Motor 4 Clr A.3 ;Tambah Kecepatan/aktifkan Motor 5 Clr A.4 ;Tambah Kecepatan/aktifkan Motor 6 Clr A.5 ;Tambah Kecepatan/aktifkan Motor 7 Clr A.6 ;Tambah Kecepatan/aktifkan Motor 8 Clr A.7 ;Kurangi Kecepatan/nonaktifkan Motor 1 Setb A.0 ;Kurangi Kecepatan/nonaktifkan Motor 2 Setb A.1 ;Kurangi Kecepatan/nonaktifkan Motor 3 Setb A.2 ;Kurangi Kecepatan/nonaktifkan Motor 4

Setb A.3 ;Kurangi Kecepatan/nonaktifkan Motor 5 Setb A.4 ;Kurangi Kecepatan/nonaktifkan Motor 6 Setb A.5 ;Kurangi Kecepatan/nonaktifkan Motor 7 Setb A.6 ;Kurangi Kecepatan/nonaktifkan Motor 8 Setb A.7 Pada listing 3 nilai Akumulator A sebelumnya telah terisi dengan pointer data kecepatan yang telah didapatkan setelah listing 2 dijalankan. Nilai akumulator A ini disimpan dalam R0 dan program akan melakukan lompatan ke lokasi tertentu berdasarkan motor yang dipilih dan perintah yang diberikan. Misalkan perintah yang diberikan adalah perintah penambahan kecepatan pada motor 3, maka sesuai tabel di bawah perintah >C yang diterima oleh sistem. Pengaturan Kecepatan Kode Keterangan >A Tambah Kecepatan Motor 1 >B Tambah Kecepatan Motor 2 >C Tambah Kecepatan Motor 3 >D Tambah Kecepatan Motor 4 >E Tambah Kecepatan Motor 5 >F Tambah Kecepatan Motor 6 >G Tambah Kecepatan Motor 7 >H Tambah Kecepatan Motor 8 >I Kurangi Kecepatan Motor 1 >J Kurangi Kecepatan Motor 2 >K Kurangi Kecepatan Motor 3 >L Kurangi Kecepatan Motor 4 >M Kurangi Kecepatan Motor 5 >N Kurangi Kecepatan Motor 6 >O Kurangi Kecepatan Motor 7 >P Kurangi Kecepatan Motor 8 Pengaturan Keaktifan Kode Keterangan!A Aktifkan Motor 1!B Aktifkan Motor 2!C Aktifkan Motor 3!D Aktifkan Motor 4!E Aktifkan Motor 5!F Aktifkan Motor 6!G Aktifkan Motor 7!H Aktifkan Motor 8!I Nonaktifkan Motor 1!J Nonaktifkan Motor 2!K Nonaktifkan Motor 3!L Nonaktifkan Motor 4!M Nonaktifkan Motor 5!N Nonaktifkan Motor 6!O Nonaktifkan Motor 7!P Nonaktifkan Motor 8 Tabel 1 Tabel Perintah-perintah Pengendalian Motor Perintah > digunakan untuk membedakan perintah pengaturan kecepatan dan perintah pengaturan keaktifan (lihat pada listing program lengkap), sedangkan

perintah C yang diterima oleh serial port dalam bentuk hexa adalah 43H, data tersebut dikurangi dengan A atau 41H sehingga menjadi 2. Hal ini diperlukan karena program harus melompat ke urutan ketiga (0 adalah urutan pertama) dari tabel aksi motor. Setiap urutan aksi motor menempati 7 byte lokasi memori oleh karena itu, nilai 2 terlebih dahulu harus dikali dengan 7 lompatan dilakukan. Sedangkan nilai DPTR sebelumnya telah diisi dengan alamat dari Tabel Aksi Motor, maka pada saat instruksi JMP @A+DPTR program akan melompat ke alamat Tabel Aksi Motor + 2*7 yaitu bagian penambahan kecepatan motor 3. Di sini bit ke nol yang merupakan bit pengatur kecepatan motor 3 di clear sehingga kecepatan motorpun bertambah. Input Perintah Input perintah untuk pengendalian motor ini diperoleh dari serial port. Proses pengendalian motor dilakukan dengan mengirimkan data di tabel kecepatan ke Port 1 secara terus menerus, oleh karena itu apabila terjadi pengiriman perintah baik untuk merubah kecepatan atau mengatur keaktifan motor, harus dilakukan dengan menggunakan sistem interrupt, sehingga walaupun program sedang sibuk melakukan looping pengiriman data ke Port 1, pada saat terjadi pengiriman perintah melalui serial port, maka program akan berhenti melakukan pengiriman data dan meloncat ke alamat vektor interrupt terlebih dahulu. Pada alamat tersebut, data perintah yang diterima akan dibedakan antara perintah pengaturan kecepatan > dan perintah pengaturan keaktifan motor!. Selanjutnya dilanjutkan dengan data perintah yang menunjukkan motor berapa yang diatur keaktifan ataupun kecepatannya (Lihat tabel 1). Setelah melayani interrupt, maka program akan kembali ke alamat letak terjadinya interrupt dan melanjutkan pengiriman data ke Port 1. Pengaturan Keaktifan Pengaturan keaktifan dilakukan dengan melakukan SET/CLR pada bit-bit yang terdapat pada variabel EnableMotor. Variabel EnableMotor Motor 8 7 6 5 4 3 2 1 1 = non aktif 2 = aktif Gambar 6 Variabel EnableMotor Variabel ini selanjutnya akan di OR kan dengan data yang akan dikeluarkan pada Port 1. Sesuai sifat Gerbang OR maka setiap bit yang di OR dengan kondisi 1 (non aktif) maka akan menghasilkan kondisi logika 1 pula, sehingga motor yang terhubung dengan Port 1 melalui rangkaian driver akan berhenti berputar, namun bila bit tersebut di OR dengan kondisi 0 (aktif) maka data kecepatan akan terkirim keluar melalui Port 1.

Tabel Data Kecepatan Variabel Enable Motor 1 P1.0 0 0 0 0 0 0 0 P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 Gambar 7 Proses Kerja Variable Enable Motor untuk mengatur keaktifan

Aktifkan Serial Port Isi Tabel Kecepatan Isi Tabel Alamat Step Kecepatan R0 = Alamat Awal Tabel Kecepatan R7 = Jumlah Step Kecepatan Ambil data di Tabel Kecepatan Aktifkan Motor sesuai EnableMotor Tunjuk Tabel Kecepatan berikut R7 = R7-1 No R7 = 0? Gambar 8 Flowchart Main Program SERIAL INTERRUPT Disable Serial Interrupt Ambil Data Serial '>'? '!'? Ambil Data Serial Ambil Data Serial Data Serial > H? Aktifkan/ Nonaktifkan Motor sesuai data yg diterima Tambah Kecepatan Kurangi Kecepatan Kembali dari Interrupt Gambar 9 Flowchart Serial Interrupt

12VDC 12VDC 12VDC VCC VCC VCC D1 IN4001 M1 MOTOR DC D2 IN4001 M2 MOTOR DC D3 IN4001 M3 MOTOR DC R2 330R R4 330R R6 330R P1.0 P1.1 P1.2 R1 33K R7 33K R13 33K VCC VCC Q2 C9014 D4 IN4001 R8 330R Q8 C9014 D7 IN4001 R14 330R Q14 C9014 12VDC 12VDC Q1 BD139 Q7 BD139 Q13 BD139 P1.3 P1.4 P1.5 R3 33K M4 MOTOR DC R9 33K M7 MOTOR DC R15 33K VCC VCC Q4 C9014 D5 IN4001 R10 330R Q10 C9014 D8 IN4001 R16 330R Q16 C9014 12VDC 12VDC Q3 BD139 Q9 BD139 Q15 BD139 P1.6 P1.7 R5 33K M5 MOTOR DC R11 33K M8 MOTOR DC VCC Q6 C9014 D6 IN4001 R12 330R Q12 C9014 12VDC JP1 VCC P1.0 1 2 P1.1 P1.2 3 4 P1.3 P1.4 5 6 P1.5 P1.6 7 8 P1.7 9 10 PORT1 DST51 J1 1 2 12VDC Q5 BD139 Q11 BD139 M6 MOTOR DC 12VOLT 5A Gambar 10 Skema lengkap Antar Muka Pengendali 8 Motor dengan DST-51 Program lengkap Pengendali 8 Motor dengan DST-51 melalui Serial Port Program ini menggunakan Built In Routine DST-51 yaitu init_serial yang terletak di alamat 1B8H pada DST-51 Monitor.DATA Org 70H EnableMotor Ds 1 ;Variabel pengaktif motor.code Init_Serial EQU 1B8H ;BUILT IN ROUTINE DST-51 ROM EQU 2000H TabelKecepatan EQU 50H PointerKecepatan EQU 41H JumlahMotor EQU 8 StepKecepatan EQU 10 Org ROM ;Reset Vector Ajmp Start ; Org ROM+3H ;External Interrupt 0 Vector Reti ; Org ROM+0BH ;Timer 0 Interrupt Vector Reti ; Org ROM+13H ;External Interrupt 1 Vector Reti ; Org ROM+1BH ;Timer 1 Interrupt Vector Reti ; Org ROM+23H ;Serial Interrupt Vector Ajmp Serial_Interrupt ;--------- ;- Aktifkan Serial Interrupt ;- Isi Tabel Kecepatan dan Tabel Pointer Data Kecepatan

;- Kirim seluruh isi tabel kecepatan ke P1 berulang-ulang ;- Keaktifan motor atau perubahan motor akan terjadi setiap terjadi serial ; interrupt ;--------- Start: Lcall Init_Serial ;Inisial Serial Port 9600 bps Setb EA ;Aktifkan Serial Interrupt Setb ES ; Mov EnableMotor,#00H ;Aktifkan semua motor Acall IsiTabel ;Isi Tabel Kecepatan dan Pointer data kecepatan Loop2Motor: Mov R0,#TabelKecepatan ;R0 menuju ke tabel data kecepatan motor Mov R7,#StepKecepatan ;R7 diisi dengan jumlah step kecepatan LoopMotor: ;Ambil data di tabel keceptan motor Mov B,EnableMotor ;OR kan dengan keaktifan motor Orl A,B ; Mov P1,A ;Kirim ke P1 Inc R0 ;Tunjuk tabel kecepatan berikutnya Djnz R7,LoopMotor ;Lakukan hingga sejumlah step kecepatan Ajmp Loop2Motor ;Kembali ke loop2motor ;------------- ;Isi Tabel Kecepatan dengan FF atau tidak ada kecepatan ;Isi Tabel Alamat Step Kecepatan dengan alamat awal dari Tabel Kecepatan ;------------- IsiTabel: Mov R0,#TabelKecepatan Mov R7,#StepKecepatan ;R0 ke alamat awal tabel ke ;cepatan motor ;R7 diisi dengan jumlah step ;kecepatan LoopKecepatanAwal: Mov @R0,#0FFH ;Isi FFH di seluruh data Inc R0 ;kecepatan motor Djnz R7,LoopkecepatanAwal ; Mov R0,#PointerKecepatan ;R0 ke alamat awal tabel alamat ;step kecepatan motor Mov R7,#JumlahMotor ;R7 dengan jumlah motor IsiAlamatMotor: Mov @R0,#TabelKecepatan ;Isi tabel pointer data kecepatan Inc R0 ;dengan alamat awal pointer kecepatan Djnz R7,IsiAlamatMotor ; Ret ;------ ;Penambahan kecepatan ;- Ambil pointer kecepatan motor di alamat ini ditunjuk oleh kode ; yang diterima (R0) ;- Apabila pointer menunjuk ke akhir tabel maka pointer tidak berubah

;- Apabila pointer belum menunjuk ke akhir tabel maka pointer akan menuju ke ; alamat berikutnya TambahKecepatan: ;Ambil alamat data kecepatan terakhir dari ;motor tersebut Cjne A,#StepKecepatan+TabelKecepatan,TidakResetAlamat ;Bila alamat ;terakhir, kembali ke alamat awal Ret TidakResetAlamat: Push A ;Pointer menunjuk ke alamat berikut Inc A ; ; Pop A ; Ret ;------------- ;- Ambil alamat step kecepatan yang terakhir dan bila belum mencapai ; alamat awal, tunjuk ke alamat sebelumnya dan simpan kembali ke tabel ;- Bila mencapai alamat awal, maka tetap tahan di alamat tersebut KurangiKecepatan: Mov A,R0 ;Ambil Kode yang diterima Clr C ; Subb A,#JumlahMotor ;Kode yg diterima - JumlahMotor = ;alamat ;tabel pointer data kecepatan terakhir ;dari motor ;yang diakses Mov R0,A ;Ambil pointer data kecepatan terakhir ;tersebut Cjne A,#TabelKecepatan,Tidak2resetAlamat ;Bila alamat bukan ;pointer awal, maka menuju alamat step ;sebelumnya LihatCarry2: Mov A,#TabelKecepatan ;bila alamat awal maka, tahan di alamat ;tersebut Ret Tidak2ResetAlamat: Dec A Ret ;-------- ;INTERRUPT SERVICE ROUTINE ;-------- Serial_Interrupt: Clr ES Mov P1,#0FFH Mov A,SBUF ;Menuju ke alamat step sebelumnya ;simpan di tabel alamat step ;Disable Interrupt ;Matikan semua motor sejenak ;Simpan perintah di R5 ;------- ;Terjemahkan perintah yang diterima dari serial ;- Perintah '>' untuk pengaturan kecepatan

; A...H = Motor 1...Motor 8 ditambah kecepatan ; I...P = Motor 1...Motor 8 dikurangi kecepatan ; Contoh: ; - Menaikkan kecepatan motor 1: >A ; - Mengurangi kecepatan motor 8: >P ; ; Bila kecepatan mencapai maksimal atau minimal maka kecepatan akan bertahan ; di sana ;- Perintah '!' untuk mengatur keaktifan motor ; A...H = Motor 1...Motor 8 aktif ; I...P = Motor 1...Motor 8 non aktif ; Contoh: ; - Mengaktifkan motor 7:!G ; - Menonaktifkan motor 3:!K ;------------ Cjne A,#'>',Bukan_Kecepatan ; Ajmp Kecepatan Bukan_Kecepatan: Cjne A,#'!',Kembali ;--------- ;Mengatur keaktifkan Motor ;Keaktifan motor diatur oleh variabel EnableMotor ;Variabel ini terdiri dari 8 bit di mana bit 0 adalah Motor 1 hingga bit 8 adalah ;motor 8. Bit 1 menandakan motor non aktif dan bit 0 menandakan motor aktif ;--------- Clr RI ;Ambil kode keaktifan motor Jnb RI,* ; Mov A,SBUF ; Clr C ; Subb A,#'A' ;Kode keaktifan - 'A' = urutan aksi ;motor Mov DPTR,#AksiMotor ;DPTR menunjuk ke alamat awal aksi ;motor Mov R0,#EnableMotor ;R0 menunjuk alamat variabel ;keaktifan Mov B,#07 Mul AB Jmp @A+DPTR ;Urutan aksi motor * 7 (ukuran area yg ;dipakai utk tiap urutan aksi motor) ;Lompat ke alamat urutan aksi motor Kecepatan: Clr RI Jnb RI,* Mov R5,SBUF ;------------ ;- Periksa apakah perintah pengurangan atau penambahan kecepatan ;------------ Mov R0,05H ;Kode Motor yang diakses -> R0 Cjne R0,#PointerKecepatan+JumlahMotor,LihatCarry ;Kode yang ;diterima ;> dari 'H' maka pengurangan kecepatan LihatCarry: ; Jnc PerintahPengurangan ; ;Bila tidak maka penambahan kecepatan Acall TambahKecepatan ; ;-------

;- Proses penambahan kecepatan/mengaktifkan motor dilakukan dengan ; meng-clear bit-bit dari motor yang diakses di alamat yang ditunjuk ; oleh pointer data kecepatan ;- Proses pengurangan kecepatan/menonaktifkan motor dilakukan dengan men-set ; bit-bit dari motor yang diakses di alamat yang ditunjuk oleh pointer data ; kecepatan ;------ AksiMotor2: Mov R0,A ;R0 diisi alamat step kecepatan yang ;akan diubah Mov DPTR,#AksiMotor ;DPTR ke alamat awal tabel aksi motor Mov A,R5 ;Kode yg diterima - 'A' = Urutan Clr C ;aksi motor Subb A,#'A' ; Mov B,#07 ;Urutan aksi motor * 7 (area yg ;digunakan Mul AB ;setiap urutan) Jmp @A+DPTR ;Lompat ke alamat urutan aksi motor PerintahPengurangan: Acall KurangiKecepatan Ajmp AksiMotor2 Kembali: Clr RI Clr TI Setb ES Reti ;Hapus Flag Receive ;Hapus Flag Transmit ;Enable Serial Interrupt ;Kembali dari interrupt ;---------- ;Lakukan set atau clear bit di alamat yang ditunjuk oleh R0 ;- Untuk mengatur kecepatan ; - R0 diisi alamat step kecepatan ; - Set/clear di bit yang tergantung dari motor yang diakses pada alamat yg ; ditunjuk R0 ;- Untuk mengatur keaktifan ; - R0 diisi alamat variabel keaktifan motor (EnableMotor) ; - Set/clear di bit yang tergantung dari motor yang diakses ;----------- AksiMotor: ;Tambah Kecepatan/aktifkan Motor 1 Clr A.0 ;Tambah Kecepatan/aktifkan Motor 2 Clr A.1 ;Tambah Kecepatan/aktifkan Motor 3 Clr A.2 ;Tambah Kecepatan/aktifkan Motor 4

Clr A.3 ;Tambah Kecepatan/aktifkan Motor 5 Clr A.4 ;Tambah Kecepatan/aktifkan Motor 6 Clr A.5 ;Tambah Kecepatan/aktifkan Motor 7 Clr A.6 ;Tambah Kecepatan/aktifkan Motor 8 Clr A.7 ;Kurangi Kecepatan/nonaktifkan Motor 1 Setb A.0 ;Kurangi Kecepatan/nonaktifkan Motor 2 Setb A.1 ;Kurangi Kecepatan/nonaktifkan Motor 3 Setb A.2 ;Kurangi Kecepatan/nonaktifkan Motor 4 Setb A.3 ;Kurangi Kecepatan/nonaktifkan Motor 5 Setb A.4 ;Kurangi Kecepatan/nonaktifkan Motor 6 Setb A.5 ;Kurangi Kecepatan/nonaktifkan Motor 7 Setb A.6 ;Kurangi Kecepatan/nonaktifkan Motor 8

Setb A.7