TUGAS AKHIR
46
BAB III PROSES PERANCANGAN
Pada bab ini akan dibahas mengenai Perancangan komunikasi program Lab View dan Mikrokontroler melalui kanal serial pada sebuah PC
dengan
menggunakan USB to Serial Converter. 3.1 Pendahuluan. Pada perancangan ini akan dijelaskan mengenai terjadinya proses mulai dari input sampai output. Untuk bagian Input, komputer akan difungsikan untuk menjembatani proses kendali dan pemantauan status tone control. Didalam bagian Input,USB akan dirubah menjadi serial karena port serial yang dulu masih sering dijumpai pada komputer portabel/laptop sekarang sulit untuk diperoleh, hal ini dikarenakan perkembangan kecepatan/Transfer rate komunikasi data serial melalui port USB. Namun demikian, dengan menggunakan converter USB to Serial . Jadi dengan begitu data yang dikeluarkan komputer akan lewat serial port sehingga dapat berkomunikasi dengan mikrokontrollernya. Pada bagian Proses, mikrokontroller dirancang dan diprogram untuk dapat berkomunikasi dengan komputer dan juga dapat berkomunikasi dengan peralatan tone kontrolnya. Mikrokontrollernya dirancang dengan menggunakan bahasa
Fakultas Teknologi Industri Universitas Mercu Buana
46
TUGAS AKHIR
47
pemograman assembly dan komputernya menggunakan program labview. Sehingga dengan begitu Output, tone control(power,volume,bass,treble) dapat dikendalikan dengan komputer. Untuk gambar blok diagram dari sistem perancangan dapat dilihat pada gambar dibawah ini.
Gambar 3.1 Blok diagram sistem perancangan Sedangkan Untuk perancangan proses aplikasi dari perancangan sistem ini dapat dilihat pada gambar flowchart dibawah ini. Mulai Aplikasi Inisialisasi Hardware Tidak Exit
Disable menu
AKTC 1.0 Ditemukan?
ya Baca Penekanan Tombol
Ada penekanan Tombol Soft/Hardware
Tidak
ya Tidak ya
Tombol Exit ditekan?
Gambar 3.1.1 Flowchart sistem perancangan Fakultas Teknologi Industri Universitas Mercu Buana
Baca Status Display
Eksekusi secara soft/hardware Update Status Pada Display
TUGAS AKHIR
48
3.2 Penerapan Komunikasi Serial Berbasis Labview Labview merupakan perangkat lunak yang telah dikembangkan oleh National Instrument sejak tahun 1973, LabVIEW didedikasikan sebagai media antarmuka pengguna untuk melakukan proses pengendalian dan pemantauan perangkat/instrument yang terhubung dengan komputer melalui serangkaian alur diagram data yang disusun seperti flowchart. Selain memproduksi perangkat lunak, National Instrument juga memiliki produk-produk perangkat keras yang telah kompatibel dengan perangkat lunak LabVIEW yang berstandarkan internasional. VISA merupakan standar I/O API(application programming interface ) pemrograman perangkat/instrument yang dapat diintegrasikan pada perangkat lunak LabVIEW. VISA dapat digunakan untuk mengendalikan GPIB(General Purpose Interface Base), serial, USB, Ethernet, PXI, ataupun perangkat VXI, agar sesuai dengan driver yang akan digunakan sehingga untuk menggunakannya tidak harus menguasai protokol perangkat keras secara spesifik. Visa adalah platform independen, bus independen, dan environment independen. Dengan kata lain, API yang sama digunakan tanpa memandang jenis perangkat, platform, atau bahasa pemrograman.
Gambar 3.2 Fungsi untuk pengelolaan kanal serial Fakultas Teknologi Industri Universitas Mercu Buana
TUGAS AKHIR
49
Pada gambar 3.2 ditunjukkan function pallete yang akan digunakan untuk melakukan komunikasi melalui kanal serial, berikut ini merupakan nama dan diskripsi fungsi kerjanya. Nama
Fungsi
Visa Configure Seriall Port Digunakan
untuk
melakukan
koneksi
kanal serial dan konfigurasi kanal serial diantaranya baudrate, Lebar data, parity dan flow control. Visa write
Digunakan untuk mengrim data melalui buffer kanal serial yang telah dipilih
Visa read
Digunakan untuk membaca data yang diterima pada buffer kanal serial.
Visa close
Digunakan untuk memutuskan hubungan kanal serial.
Visa byte at serial
Digunakan untuk membaca jumlah data masuk/diterima pada kanal serial
Visa write
Digunakan untuk mengrim data melalui buffer kanal serial yang telah dipilih
Visa read
Digunakan untuk membaca data yang diterima pada buffer kanal serial.
Visa close
Digunakan untuk memutuskan hubungan kanal serial.
Fakultas Teknologi Industri Universitas Mercu Buana
TUGAS AKHIR
50
Gambar 3.3 Source Pengiriman perintah ke kanal serial
Gambar 3.4 Source pembacaan kanal serial
Penjelasan gambar 3.3 & 3.4 dapat dijabarkan sebagai berikut, program dimulai dengan pengkonfigurasian kanal serial meliputi : 1. Visa resource name : Pemilihan kanal serial, pada kasus ini adalah com1; 2. Baudrate : Kecepatan transfer rate/detik, pada kasus ini adalah 9600kbps 3. Data bits : Jumlah pengiriman data perdetik, pada kasus ini adalah 8bits 4. Parity : Menetapkan paritas yang digunakan pada setiap frame untuk dikirim maupun diterima. Masukan ini menerima nilai-nilai berikut
Fakultas Teknologi Industri Universitas Mercu Buana
TUGAS AKHIR
51
0
no parity (default)
1
Odd parity
2
Even parity
3
Mark parity
4
Space parity
5. Parity : Menentukan jumlah stop bit yang digunakan untuk menunjukkan akhir sebuah frame. Masukan ini menerima nilai-nilai berikut 10
1 stop bit
15
1.5 stop bit
20
2 stop bit
6. Flow control : Menetapkan jenis kontrol yang digunakan untuk mekanisme transfer. Masukan ini menerima nilai-nilai berikut: 0
None (default)-Pada mekanisme ini transfer tidak menggunakan kontrol. Penyangga di kedua sisi sambungan diasumsikan cukup besar untuk menampung semua data yang ditransfer.
1
Odd parity XON / XOFF-mekanisme transfer menggunakan karakter XON dan XOFF untuk melakukan kontrol aliran. Mekanisme transfer mengontrol aliran dengan mengirimkan masukan XOFF ketika buffer menerima data hampir penuh, dan mengendalikan aliran output dengan menunda transmisi ketika XOFF diterima
Fakultas Teknologi Industri Universitas Mercu Buana
TUGAS AKHIR
2
52
RTS / CTS-mekanisme transfer menggunakan sinyal RTS dan sinyal masukan CTS untuk melakukan kontrol aliran. Mekanisme transfer masukan kontrol dilakukan oleh RTS ketika buffer menerima sinyal hampir penuh, dan mengendalikan aliran keluaran dengan menunda transmisi melalui sinyal CTS
3
XON / XOFF dan RTS / CTS-mekanisme transfer menggunakan XON dan XOFF karakter dan RTS dan CTS
4
DTR / DSR-mekanisme transfer menggunakan sinyal keluaran DTR dan sinyal masukan DSR untuk melakukan kontrol aliran
5
XON / XOFF dan DTR / DSR-mekanisme transfer menggunakan karakter XON dan XOFF disertai sinyal keluaran DTR dan sinyal masukan DSR untuk melakukan kontrol aliran.
7. Enable termination char : mempersiapkan perangkat serial untuk mengenali penghentian karakter. Jika TRUE (default), maka atribut VI_ATTR_ASRL_END_IN diatur untuk mengenali karakter penghentian. Jika FALSE, maka atribut VI_ATTR_ASRL_END_IN diatur ke 0 (Tidak ada) dan perangkat serial tidak mengenali penghentian char ; 8. Termination char : Operasi baca berakhir ketika terminasi karakter dibaca dari perangkat serial. Hexadecimal 0xA mewakili karakter linefeed. Ubah penghentian karakter dengan hexadecimal 0xD untuk mengakhiri pembacaan ketika menjumpai karakter carriage return atau enter. Timeouts : digunakan untuk mengatur lamanya waktu proses baca dan tulis. Fakultas Teknologi Industri Universitas Mercu Buana
TUGAS AKHIR
53
Setelah konfigurasi diterima, selanjutnya dapat dilakukan operasi penulisan dan pembacaan data pada kanal serial untuk kemudian diakhiri dengan melakukan pemutusan koneksi(visa close connection).
3.3 Penerapan Komunikasi Serial Mikrokontroller Seperti halnya komputer, pada kanal serial mikrokontrollerpun perlu dilakukan inisialisasi agar dapat digunakan untuk berkomunikasi dengan komputer, berikut adalah kode sumber menggunakan bahasa C yang akan digunakan pada perancangan ini. initSerial() { /* init serial to 1200 baud by using 11.0592MHz crystal */ SCON = 0x50; /* SCON: mode 1, 8-bit UART, enable rcvr */ TMOD = 0x20; /* TMOD: timer 1, mode 2, 8-bit reload */ TH1 = 0xFD; /* TH1: reload value for 9600 baud */ TR1 = 1; /* TR1: timer 1 run */ TI = 1; /* TI: set TI to send first char of UART */ } Interupsi
dan
pewaktu
mikrokontroller
dikonfigurasikan
untuk
pendayagunaan operasi kerja kanal serial agar dapat berkomunikasi dengan baudrate 9600 bps. Protokol untuk melakukan pengendalian kendali/pembacaan kanal mikrokontroller yang akan digunakan adalah sebagai berikut; 1. Pin Rx mikrokontroller menunggu karakter Px=nnn[CR] -> dimana x adalah nilai 0 sampai dengan 3, dan nnn adalah 0 sampai dengan 255; 2. Karakter kedua adalah nomer kanal yang akan dikirimkan nilai nnn;
Fakultas Teknologi Industri Universitas Mercu Buana
TUGAS AKHIR
54
3. Karakter akan diperiksa dan dikonversi ke nilai byte dan dikirimkan ke kanal; 4. Kirim karakter ' OK'jika selesai, dan kirim karakter ERROR jika dijumpai kesalahan format maupun kegagalan pengiriman data. Protokol untuk melakukan pembacaan nilai kanal mikrokontroller yang akan digunakan adalah sebagai berikut; 1. Pin Rx mikrokontroller menunggu karakter Rx[CR] -> dimana x adalah nilai 0 sampai dengan 3; 2. Karakter kedua adalah nomer kanal yang akan dibaca nilainya; 3. Kirim hasil pembacaan kanal jika selesai, dan kirim karakter ERROR jika dijumpai kesalahan format maupun kegagalan eksekusi. Sehingga dapat dipahami bahwa dalam perancangan ini, mikrokontroller akan terus menunggu perintah yang diberikan oleh komputer yang terhubung dengan mikrokontroller melalui kanal serial. Jika terdapat data pada buffer serial mikrokontroller
maka
mikrokontroller
akan
melakukan
komparasi
dan
memprosesnya sesuai dengan command/perintah yang telah diset didalamnya. Penjabaran umum perintah/command yang akan dieksekusi adalah sebagai berikut: 1. “Px=y” adalah perintah yang dikirim oleh komputer untuk mengeluarkan data 8 bit pada kanal pararel mikrokontroller dimana ' x'adalah nomer kanal yang akan digunakan dan ' y'adalah data 8bit yang akan diproses; contoh “P0=0” matikan semua bit data kanal 0, “P1=255” hidupkan semua bit data kanal 1.
Fakultas Teknologi Industri Universitas Mercu Buana
TUGAS AKHIR
55
2. “Rx” adalah perintah yang dikirim komputer untuk membaca data 8bit pada kanal pararel mikrokontroller dimana ' x'adalah nomer kanal yang akan dibaca datanya untuk dikirim mikrokontroller ke komputer. Contoh: “P0” mikrokontroller akan membaca dan mengirimkan kondisi yang dibaca pada kanal 0, dan jika “P1” mikrokontroller akan membaca dan mengirimkan 8bit data yang dibaca pada kanal 1. 3. “I” adalah perintah yang dikirim komputer untuk memantau apakah perangkat yang terhubung adalah mikrokontroller yang dirancang untuk aplikasi ini atau bukan.
3.4 Hasil dan Penjelasan Perancangan Aplikasi Labview
Gambar 3.5 Front panel aplikasi
Pada gambar 3.5 ditunjukkan frontpanel aplikasi yang akan digunakan sebagai antarmuka pengguna untuk membaca dan mengendalikan kondisi dari tone control secara langsung melalui mikrokontroller yang terhubung melalui kanal serial. Berikut urutan dan cara penggunaan aplikasi:
Fakultas Teknologi Industri Universitas Mercu Buana
TUGAS AKHIR
56
1. Saat aplikasi telah muncul, lakukan pemilihan alamat perangkat yang akan digunakan. 2. Jika koneksi berhasil dilakukan maka indikator akan berubah berwarna merah, dan aplikasi siap untuk digunakan. 3. Setiap periode 500ms aplikasi akan melakukan pemantauan status tonecontrol dan meng-update tampilan aplikasi. 4. Setiap perubahan yang dilakukan secara manual pada perangkat tonecontrol akan dideteksi aplikasi AKTC. 5. Jika pengguna melakukan perubahan dengan meng-klik tombol-tombol yang disediakan maka aplikasi akan merespon dengan mengirimkan perintah-perintah yang telah dikonfigurasi dan didefinisikan oleh pelabelan tombol yang diberikan melalui kanal serial mikrokontroller dan merubah kondisi tonecontrol.
Gambar 3.6 Block diagram penanganan perubahan alamat kanal
Fakultas Teknologi Industri Universitas Mercu Buana
TUGAS AKHIR
Gambar 3.7 Blok diagram penanganan perubahan tombol power
Gambar 3.8 Blok diagram pemantauan tonecontrol & seven segment
Fakultas Teknologi Industri Universitas Mercu Buana
57
TUGAS AKHIR
58
Gambar 3.9 Blok diagram status false power tonecontrol & seven segment
Gambar 3.10 Blok diagram status true power tonecontrol & seven segment
Gambar 3.11 Blok diagram penekanan tombol volume, bas dan treable
Gambar 3.12 Blok diagram jika nilai data sudah mencapai maksimal/minimal Fakultas Teknologi Industri Universitas Mercu Buana
TUGAS AKHIR
59
3.5 Kode Sumber Aplikasi Mikrokontroller Kode sumber untuk mikrokontroller ditulis menggunakan aplikasi C51 keil uVision, pembahasan dilakukan melalui potongan-potongan sebagai berikut. static char static char static char static char static char EXIST"; static char RANGE"; static char static char
code code code code code
ok_msg[] = "OK"; error_msg[] = "ERROR COMMAND"; error_port[] = "ERROR: PORT NUMBER"; error_assign[] = "ERROR: ASSIGN"; error_value_enter[] = "ERROR: VALUE NOT
code error_value_number[] = "ERROR: VALUE NOT IN code cmd_msg[]= "Enter Command:"; code aktc[]= "AKTC V1.0"; Gambar 3.13 Potongan 1 kode sumber
Pada gambar 3.13 ditunjukkan potongan kode sumber yang berisi definisi serangkaian karakter/konstanta statis yang akan digunakan untuk menjelaskan keberhasilan atau kegagalan mikrokontroller dalam mengeksekusi perintah yang dikirimkan oleh komputer melalui kanal serial. char lineinput[20]; char port; Gambar 3.14 Potongan 2 kode sumber Pada gambar 3.14 ditunjukkan potongan kode sumber yang berisi konstanta lineinput dengan tipe data array yang digunakan sebagai konstanta untuk menampung 1 baris perintah yang diterima mikrokontroller melalui kanal serial dan karakter port digunakan sebagai konstanta yang berisi penomeran kanal.
#include
#include "stdlib.h" Gambar 3.15 Potongan 3 kode sumber untuk memasukkan library Fakultas Teknologi Industri Universitas Mercu Buana
TUGAS AKHIR
60
initSerial() { SCON = 0x50; TMOD = 0x20; TH1 = 0xFD; TR1 = 1; TI = 1; } Gambar 3.16 Potongan 4 kode sumber Pada gambar 3.16 ditunjukkan potongan kode sumber yang digunakan sebagai fungsi dengan nama initSerial(). Fungsi tersebut berfungsi untuk mendefinisikan baudrate yang akan digunakan oleh kanal serial mikrokontroller. SCON diberikan nilai 0X50 mengindikasikan bekerja pada mode 1 dengan 8 bit UART dan mengaktifkan fungsi penerimaan. TMOD diberikan nilai 0X20 mengindikasikan bekerja pada timer 1 dengan mode 2 dan 8bit autoreload. TH1 diberikan nilai 0XFD mengindikasikan bekerja pada baudrate 9600bps. TR1 diset 1 untuk menjalankan timer1 dan TI diset 1 untuk mengirimkan karakter pertama pada UART.
char getchar() { while(!RI); RI = 0; return SBUF; } Gambar 3.17 Potongan 5 kode sumber Pada gambar 3.17 ditunjukkan potongan program yang digunakan sebagai fungsi untuk menunggu karakter pada pin Rx mikrokontroller dan memberikan karakter yang diterima buffer kanal serial jika terdapat karakter yang diterima. Jika indikasi karakter telah diterima, maka nilai RI=0 digunakan untuk mengaktifkan RX untuk dapat menerima data selanjutnya. Fakultas Teknologi Industri Universitas Mercu Buana
TUGAS AKHIR
61
void putchar(char ch) { while(!TI); TI = 0; SBUF = ch; } void put_newline() { putchar(0x0D); putchar(0x0A); } void print_string(char *ptr) { char ch; while((ch = *ptr++) != 0) { putchar(ch); } put_newline(); } Gambar 3.18 Potongan 6 kode sumber Pada gambar 3.18 ditunjukkan potongan program putchar() yang digunakan sebagai fungsi untuk mengirimkan karakter melalui kanal serial pin Tx mikrokontroller. Dan fungsi put_newline() yang digunakan untuk mengirimkan linefeed dan karakter enter melalui kanal serial pin Tx mikrokontroller. Sedangkan fungsi print_string() digunakan untuk mengirimkan beberapa karakter melalui kanal serial pin Tx mikrokontroller. void getlineinput() { unsigned char cnt; char ch; cnt = ch = 0; while(cnt < 19 && ch != 0x0D { ch = getchar(); if (ch != 0x0D) { lineinput[cnt++] = ch; //putchar(ch); } } lineinput[cnt] = 0; put_newline();} Gambar 3.19 Potongan 7 kode sumber Fakultas Teknologi Industri Universitas Mercu Buana
TUGAS AKHIR
62
Pada gambar 3.19 ditunjukkan potongan program getlineinput() yang digunakan sebagai fungsi untuk mendeteksi karakter akhir baris dan enter.
void action_port() { unsigned char value; int value_int; char *ptr = &lineinput; /* Cek karakter dan kirim error jika dijumpai masalah*/ /* cek karakter “P”*/ if (*ptr++ != 'P') {print_string(&error_msg); return; } /* check port */ if ((port = *ptr++) < '0' || port > '3') { print_string(&error_port); return; } /* check assign */ if (*ptr++ != '=') { print_string(&error_assign); return; } /* check value exist */ if (*ptr == 0) { print_string(&error_value_enter); return; } // convert to byte from string input value_int = atoi(ptr); if (value_int < 0 || value_int > 255) { print_string(&error_value_number); return; } /* convert to byte */ value = value_int; // assign value to port number if (port == '0') P0 = value; if (port == '1') P1 = value; if (port == '2') P2 = value; if (port == '3') P3 = value; // print ok print_string (&ok_msg); } Gambar 3.20 Potongan 8 kode sumber Pada gambar 3.20 ditunjukkan potongan program action_port() yang digunakan sebagai fungsi untuk melakukan aksi pengendalian kanal pararel mikrokontroller sesuai dengan perintah yang diterima melalui kanal serial mikrokontroller. Pada perancangan ini kanal pararel yang digunakan adalah pada
Fakultas Teknologi Industri Universitas Mercu Buana
TUGAS AKHIR
63
kanal 0. Perintah yang diterima terlebih dahulu akan diverifikasi formatnya, jika ditemui kesalah format perintah selanjutnya mikrokontroller akan mengirimkan kode kesalahannya. Dan jika format perintah yang diterima sudah benar/sesuai dengan
pengaturan
yang
telah
ditentukan
maka
mikrokontroller
akan
mengeksekusi perintah tersebut pada kanal pararel mikrokontroller dengan mengeluarkan data 8 bit yang diterima melalui kanal serial. void read_port() { char *ptr = &lineinput; /* evaluate string and send error if any exist */ /* check the 'P' character */ if (*ptr++ != 'R') {print_string(&error_msg); return; } /* check port */ if ((port = *ptr++) < '0' || port > '3') { print_string(&error_port); return; } // if if if if }
assign value to port number (port == '0') putchar(P0); (port == '1') putchar(P1); (port == '2') putchar(P2); (port == '3') putchar(P3); Gambar 3.20 Potongan 8 kode sumber Pada gambar 3.20 ditunjukkan potongan program read_port() yang
digunakan sebagai fungsi untuk membaca data 8bit kanal pararel mikrokontroller pada kanal 2. Pada perancangan ini kanal pararel yang digunakan adalah pada kanal 2. Perintah yang diterima terlebih dahulu akan diverifikasi formatnya, jika ditemui kesalah format perintah selanjutnya mikrokontroller akan mengirimkan kode kesalahannya. Dan jika format perintah yang diterima sudah benar/sesuai dengan pengaturan yang telah ditentukan maka mikrokontroller akan mengeksekusi
Fakultas Teknologi Industri Universitas Mercu Buana
TUGAS AKHIR
64
perintah tersebut pada kanal pararel mikrokontroller dengan mengirimkan data 8 bit melalui kanal serial.
inisial_port(){ char *ptr = &lineinput; /* evaluate string and send error if any exist */ /* check the 'I' character */ if (*ptr++ != 'I') {print_string(&error_msg); return; } /* check port */ if ((port = *ptr++) < '0' || port > '3') { print_string(&error_port); return; } // assign value to port number if (port == '0') {print_string(&aktc);return;} //print_string (&ok_msg); } Gambar 3.21 Potongan 10 kode sumber Pada gambar 3.21 ditunjukkan potongan program inisialisasi_port() yang digunakan sebagai fungsi untuk penginisialisasian perangkat mikrokontroller. Perintah yang diterima terlebih dahulu akan diverifikasi formatnya, jika ditemui kesalah format perintah selanjutnya mikrokontroller akan mengirimkan kode kesalahannya. Dan jika format perintah yang diterima sudah benar/sesuai dengan pengaturan yang telah ditentukan maka mikrokontroller akan mengeksekusi perintah tersebut pada kanal pararel mikrokontroller dengan mengirimkan identitas mikrokontroller melalui kanal serial. Pada kasus ini identitasnya adalah “AKTC v1.0”.
Fakultas Teknologi Industri Universitas Mercu Buana
TUGAS AKHIR
65
void main() { initSerial(); P0=0X00; while(1) { put_newline(); /* send command string */ /* if use with visual basic (remote program), please removed */ /*print_string(&cmd_msg); /* read line string from serial */ getlineinput(); /* action for port */ if(lineinput[0] == 'P') {action_port();} else if(lineinput[0] == 'R') {read_port();} else if(lineinput[0] == 'I') {inisial_port();} else {print_string(&error_msg);} } } Gambar 3.22 Potongan 11 kode sumber Akhirnya kita jumpai program utama yang ditunjukkan pada gambar3.22. Dan berikut adalah penjelasannya, mikrokontroller akan memulai aplikasinya dengan melakukan inisialisasi kanal serial dan mengeluarkan data 0 pada kanal pararel 0. Kemudian melakukan pengulangan pemanggilan fungsi getlineinput() dan komparasi terhadap karakter yang diterima melalui kanal serial, jika karakter pertama adalah ' P'kerjakan fungsi action_port() jika karakter pertama adalah ' R' kerjakan fungsi read_port() dan jika karakter pertama adalah I maka kerjakan fungsi inisialisasi_port() dan jika bukan salah satu dari 3 karakter tersebut kirim pesan error melalui kanal serial.
Fakultas Teknologi Industri Universitas Mercu Buana