BAB IV PERANCANGAN DAN PEMBUATAN PERANGKAT LUNAK 4.1. Perangkat Lunak Code Vision AVR Program untuk mendeteksi posisi sudut dari suatu poros, menentukan arah putaran enkoder, dan menentukan harga kecepatan putar (rpm) dari poros dibuat dengan menggunakan perangkat lunak CodeVisionAVR, yang merupakan perangkat lunak khusus untuk pemrograman mikrokontrol-mikrokontrol produksi Atmel. Program yang dibuat ditulis dalam bahasa C dan compiler yang terdapat pada perangkat lunak CodeVisionAVR akan secara otomatis mengubah program yang ditulis dalam bahasa C tersebut menjadi program dalam bahasa assembly untuk selanjutnya menyimpan program dalam memori program internal yang dimiliki oleh mikrokontroler. Untuk pemrograman ini, mikrokontroler dihubungkan dengan komputer melalui ISP dongle yang dipasang pada port LPT1. Perangkat lunak CodeVisionAVR dilengkapi fasilitas CodeWizardAVR yang berguna untuk mempermudah programer dalam menyusun program. Dengan menggunakan fasilitas ini, programer dapat menentukan berbagai hal seperti: mikrokontroler yang akan digunakan, frekuensi kerja yang akan digunakan, kaki mikrokontroler mana yang difungsikan sebagai input/output, mengaktifkan timer/counter, menentukan fitur timer yang digunakan, mengaktifkan
interupsi
eksternal,
menentukan
bentuk
pemicu
interupsi
eksternal,
mengaktifkan USART, menentukan jenis komunikasi data melalui serial, dan mengaktifkan penggunaan LCD. Untuk selanjutnya harga register-register akan secara otomatis disesuaikan dengan pengaturan awal tersebut dan ditampilkan di baris-baris program. Tampilan fasilitas CodeWizardAVR diperlihatkan pada Gambar 4.1. Pada menu chip, dipilih mikrokontroler ATMega8535 dan clock 16 MHz. Pada menu ports, seluruh pin pada port A, port B, port C, dan port D diatur sebagai pin masukan. Namun untuk pin D semua bit diatur sebagai harga pull up. Pada menu external IRQ, dilakukan pengaktifan interupsi eksternal 0 dan eksternal 1 dengan mode yang dipilih adalah falling edge. Pada menu timers dilakukan pengaktifan timer 1 dengan clock source yang digunakan adalah system clock. Sedangkan harga clock value yang digunakan adalah 250 kHz dengan kondisi overflow. Setelah itu menu yang diatur adalah LCD dengan mengatur pin pada port C. Menu terakhir
yang perlu diatur adalah menu USART, di mana pada menu ini dilakukan pengaktifan transmitter.
Gambar 4.1 CodeWizard AVR
4.2. Logika Program Setelah
melakukan
pengaturan
menu-menu
yang
terdapat
pada
fasilitas
CodeWizardAVR, langkah selanjutnya adalah penulisan program. Seperti yang telah dibahas pada Bab III, perangkat pengolah sinyal yang dikembangkan pada tugas sarjana ini mempunyai tiga kanal masukan. Kanal 0 dihubungkan dengan sensor optik (keyphasor) sebagai masukan kaki PD2(INT 0). Sedangkan kanal 1 dan 2 dihubungkan dengan sensor posisi enkoder berupa sinyal 100 pulsa/putaran dengan beda fasa 90o. Kanal 1 digunakan sebagai masukan kaki PD3 (INT 1), sedangkan kanal 2 digunakan sebagai masukan kaki PD4. Logika program yang dibuat dapat dijelaskan sebagai berikut: saat poros berputar, program mulai dijalankan, mikrokontroler mulai mengaktifkan INT 0 dan INT 1 secara bersamaan untuk selanjutnya mulai menghitung jumlah pulsa dari dari kedua sinyal tersebut. Ketika poros telah berputar 1 putaran, dalam hal ini INT 0 telah mengalami satu siklus, proses penghitungan pulsa dari sinyal INT 1 dihentikan. Jumlah pulsa yang dihasilkan dari sinyal
INT 1 kemudian dibagi 360o. Proses pembagian ini dilakukan untuk mendapatkan besar sudut untuk masing-masing pulsa dari sinyal INT1(mencari resolusi). Ketika poros mulai berputar 2 putaran, dalam hal ini INT 0 mulai mengalami siklus yang ke-2, mikrokontroler mengaktifkan INT 1 dan mulai menghitung jumlah pulsa. Pulsapulsa yang dihasilkan INT 1 ini kemudian dikalikan dengan resolusi. Proses pengalian ini dilakukan untuk mendapatkan perubahan sudut yang terjadi selama poros berputar. Ketika INT 0 telah menyelesaikan siklus yang kedua, proses penghitungan pulsa dari INT 1 dihentikan dan proses kembali ke proses awal. Logika program yang telah diuraikan diatas digambarkan dengan diagram alir seperti yang ditunjukan pada Gambar 4.2
Mulai
A
Jalankan Poros
Jalankan Poros
Deteksi Sinyal Key phasor
N
Data Masukan
Y Deteksi Sinyal 1000 pulsa/putaran
Deteksi Sinyal Key phasor (INT 0)
N
Hitung Sinyal 1000 pulsa/putaran (INT 1)
Kecermatan =
360
o
Jumlah pulsa INT 1
Posisi Sudut = Sinyal INT1 x Resolusi
N
Y Selesai
Y A
Gambar 4.1 Logika program penentu posisi sudut poros
4.2.1. Program Tampilan LCD Pemrograman tampilan LCD dilakukan dengan menggunakan fungsi-fungsi yang telah disediakan
oleh
CodeVisionAVR.
Fungsi-fungsi
tersebut
antara
lain
void
lcd_gotoxy(unsigned char x, unsigned char y) dan void lcd_putsf(char flash *str). Fungsi void lcd_gotoxy(unsigned char x, unsigned char y) digunakan untuk meletakkan tampilan ke kolom x dan baris y LCD. Fungsi void lcd_putsf(char flash *str) digunakan untuk menampilkan string yang terletak pada flash di posisi tampilan terakhir. Ketika akan menuliskan variabel-variabe lain yang bukan berformat string dibutuhkan fungsi yang meletakkan karakter-karakter berformat tersebut ke variabel string. Fungsi tersebut adalah void sprintf(char *str, char flash *fmtstr [ ,arg1, arg2, ...]). Fungsi ini digunakan dengan terlebih dahulu mendefinisikan sebuah variabel berformat string yang dibutuhkan untuk meletakkan karakter-karakter berformat yang lain. Setelah menggunakan fungsi ini maka variabel berformat string tersebut dapat ditampilkan dengan fungsi void lcd_putsf(char flash *str).
4.2.2. Program pengatur pengiriman data ke komputer Perintah-perintah yang harus dilakukan pada saat pengiriman data dari mikrokontroler ke komputer melalui jalur komunikasi serial dikelompokan dalam subrutin kirim_data(void). Perintah yang digunakan untuk mengirimkan data tersebut adalah void printf(char flash *fmtstr [ , arg1, arg2, ...]). Untuk mengirimkan data integer pada pada variabel data_ram0[i] digunakan perintah printf("%d\n\r",data_ram0[i]. Karakter “\n\r” digunakan agar setiap selesai pengiriman sebuah data kursor langsung kembali pada kolom pertama baris baru.
4.2.3.
Subroutine Penentuan kecepatan putar poros Penentuan kecepatan poros dapat dilakukan dengan mendeteksi interupsi yang terjadi
pada kaki PD3 (saat kondisi kaki PD3 berubah dari low ke high) yaitu sinyal keluaran dari sensor optik (key phasor). Ketika poros berputar, program mulai dijalankan, mikrokontroler mulai mengaktifkan INT0 dan
Interupsi eksternal 0
Int_ext 0
N
If on_ukur=0 (b=1)
Y
Timer = on On_ukur=1
Timer = stop On_ukur = 0 Display LCD = Nilai timer
Timer on
Timer off
END
4.2.4. Subroutin Arah Putaran poros enkoder Pendeteksian arah putar poros enkoder dapat dilakukan dengan mendeteksi keadaan kaki PD4 setiap kali interupsi terjadi pada kaki PD3 (saat kondisi kaki PD3 berubah dari low ke high). Kedua sinyal keluaran enkoder 100 pulsa/putaran memiliki beda fasa 90o seperti ditunjukan Gambar 4.4 berikut ini.
PD3
CCW
CW PD4
Gambar 4.4 Sinyal keluaran enkoder phase A dan B
Berdasarkan Gambar 4.4 tersebut, dapat diamati bahwa untuk arah putaran berlawanan jarum jam (CCW), saat terjadi interupsi di kaki PD3 maka kaki PD4 selalu dalam keadaan low. Sedangkan untuk arah putaran searah jarum jam (CW), saat terjadi interupsi di kaki PD3 maka kaki PD4 selalu dalam keadaan high. Dengan demikian arah putaran poros enkoder setiap saat dapat diketahui.