Page 1
Tutorial Antarmuka Mikrokontroler dan Komputer dengan Visual Basic (Interface Microcontroller and Computer with Visual Basic)
Visual Basic dapat digunakan untuk aplikasi akuisisi data dengan
database dan chart, absen, menerima dan mengirim data, yang semuanya
terhubung dengan port serial. Sebelum mengembangkan aplikasi lebih
jauh, sekarang saya akan memberikan tutorial cara menampilkan data
yang diterima pada port serial dengan Visual Basic.
Data dikirimkan melalui mikrokontroler ke port serial komputer melalui
IC MAX232 yang berfungsi sebagai pengubah level tegangan TTL dari
mikrokontroler menjadi level tegangan RS232 pada port serial komputer,
dan sebaliknya untuk mengubah dari tegangan RS232 menjadi tegangan
TTL mikrokontroler. Rangkaiannya seperti ini:
Untuk pemrograman mikrokontroler saya menggunakan Bascom AVR,
untuk mengirimkan data serial perintahnya adalah print, jika
menggunakan CodeVision perintahnya adalah printf. Hal paling penting
yang harus diperhatikan pada komunikasi serial ini adalah besarnya
Baud Rate yang digunakan, biasanya adalah 9600 bps.
Listing program dengan Bascom AVR yang akan ditampilkan pada Visual
Basic ini sbb:
'=======================================
'Tes Port Serial
'Wahyu Rahmaniar
'Technologination
'=======================================
Page 2
$regfile = "m32def.dat"
$crystal = 11059200
$baud = 9600
Do
Print "Tes Port Serial"
Wait 1
Print "By Technologination"
Wait 1
Print "Wahyu Rahmaniar"
Wait 1
Loop
Sebelum dicoba ke Visual Basic, jika rangkaian sudah siap maka kita
ujicoba terlebih dahulu ke Hyperterminal. Buka Start --> All Programs --
> Accessories --> Communications --> HyperTerminal. Maka akan tampil
seperti ini:
Beri nama bebas, misalnya "Serial".
Tetapi jika pada komputer Anda HyperTerminal baru pertama kali
digunakan, maka yang akan muncul adalah form pengaturan
HyperTerminal, kemudian isi Country/region dan Area code bebas.
Selanjutnya setelah klik OK, tampil pengaturan koneksi sbb:
Page 3
Pilih COM Port atau Connect using yang digunakan, jika menggunakan
DB9 biasa COM1 atau COM2, dan jika menggunakan kabel konverter
DB9 to USB maka cek port yang digunakan pada Device Manager.
Setelah itu klik OK, maka akan tampil form pengaturan COM Properties:
Isi pengaturan sesuai dengan gambar diatas, yaitu Bits per second atau
Baud rate 9600, Data bits 8, Parity None, Stop Bits 1, dan Flow control
None.
Klik Apply atau OK, jika koneksi sudah benar maka akan ditampilkan
data yang dikirimkan dari mikrokontroler sbb:
Page 4
Koneksi port serial sudah beres, selanjutnya kita buat tampilan Visual
Basic nya, buka software Visual Basic, dan pilih Standar EXE kemudian
Open, maka akan tampil form utama VB seperti ini:
Kemudian letakkan satu Label, dua ComboBox, satu TextBox, dua
CommandButton, dan satu Timer pada Form1 tsb.
Page 5
Pada Visual Basic 6 ini, untuk mengakses port serial dengan
menggunakan MSCOMM yang dapat ditambahkan dengan cara, klik
kanan pada ToolBar dan pilih Components:
Kemudian cari Microsoft Comm Control 6, dan klik Apply:
Page 6
dan tambahkan MsComm tersebut pada Form1:
Kemudian susun semua komponen pada Form1 tersebut menjadi seperti
ini:
Page 7
Lakukan pengaturan pada properties sbb:
- Untuk mengubah warna background, klik pada Form1 dan pilih
Properties --> BackColor.Untuk mengganti tulisan ganti Caption,
misalnya menjadi Tes Port Serial.
- Pada properties Label, isi tulisan Caption menjadi Tes Port Serial,
Alignment --> Centre, BackStyle --> 0-Transparent. Pada tampilan ini
saya menggunakan Font --> MS Sans Serif --> regular --> 14.
- Pada Combo1 ganti Text menjadi 9600, dan pada Combo2 ganti Text
menjadi COM1.
- Pada TextBox, hapus tulisan pada Text, pilih Multiline --> True,
ScrollBars --> 2-Vertical, dan agar tulisannya seperti Hyperterminal,
ganti Font menjadi Terminal --> Regular --> 14.
- Pada Command1, ganti (Name) --> cmdConnect dan Caption --
>Connect. Pada Command2, ganti (Name) --> cmdDisconnect dan
Page 8
Caption --> Disconnect. Font yang saya gunakan adalah MS Sans Serif --
> Regular --> 10.
- Pada Timer1 beri nilai interval 1000, yang berarti 1000 milisecond atau
1 detik.
Biasakanlah untuk memberi nama CommandButton dengan awalan cmd,
Label dengan awalan lbl, dan TextBox dengan awalan txt, tujuannya
untuk mempermudah pengenalan jika program yang dibuat terdiri dari
banyak CommandButton, Label, dan TextBox.
Kemudian simpan dengan pilih, File --> Save Project AS.
Jika pengaturan sudah selesai, maka tampilan Form1 menjadi seperti ini:
Klik pada bagian dalam Form yang berwarna, sehingga muncul tulisan
sbb:
Page 9
Kemudian isikan dengan listing program berikut:
Private Sub Form_Load()
With Combo1
.AddItem "COM1"
.AddItem "COM2"
.AddItem "COM3"
.AddItem "COM4"
.AddItem "COM5"
.AddItem "COM6"
.AddItem "COM7"
.AddItem "COM8"
.AddItem "COM9"
End With
With Combo2
.AddItem "2400"
.AddItem "4800"
.AddItem "9600"
.AddItem "19200"
.AddItem "38400"
.AddItem "56600"
End With
Timer1.Enabled = False
cmdConnect.Enabled = True
cmdDisconnect.Enabled = False
End Sub
Program diatas berarti akan dijalankan ketika form di load, atau ketika
program VB Tes Port Serial ini dibuka.
Klik pada cmdConnect sehingga muncul tulisan sbb:
Page 10
dan ketikkan listing program sbb:
Private Sub cmdConnect_Click()
Dim port As Integer
On Error GoTo errcode
Select Case Combo1.ListIndex
Case -1
port = 1
Case 0
port = 1
Case 1
port = 2
Case 2
port = 3
Case 3
port = 4
Case 4
port = 5
Case 5
port = 6
Case 6
port = 7
Case 7
port = 8
Case 8
port = 9
End Select
If MSComm1.PortOpen = False Then
MSComm1.CommPort = port
MSComm1.RThreshold = 1
MSComm1.InputLen = 40
MSComm1.Settings = Combo2.List(Combo2.ListIndex) &
Page 11
",N,8,1"
MSComm1.PortOpen = True
cmdConnect.Enabled = False
cmdDisconnect.Enabled = True
End If
Exit Sub
errcode:
MsgBox "Port Salah !", vbOKOnly, "Peringatan"
Combo1.SetFocus
End Sub
Program diatas akan dijalankan ketika button Connect diklik, yang
berarti jika pemilihan port yang digunakan benar maka port serial akan
terbuka atau True, dan jika salah maka akan tampil peringatan "Port
Salah!".
InputLen adalah banyaknya data yang diterima port serial pada sekali
pengiriman, diberi nilai semaksimal mungkin, misalnya 40 karakter.
Settings adalah pengaturan komunikasi serial, baud rate didapatkan dari
pemilihan nilai pada Combo2, N adalah Parity None, 8 adalah Data bits,
dan 1 adalah Stop bits, sama seperti pengaturan pada HyperTerminal
yang telah dijelaskan sebelumnya.
Jika port serial sudah terhubung maka cmdConnect disabled dan
cmdDisconnect enabled.
atau bisa juga untuk deteksi port secara otomatis sbb:
Private Sub cmdConnect_Click()
Dim port As Integer
On Error Resume Next
For port = 1 To 20
If MSComm1.PortOpen = False Then
MSComm1.CommPort = port
Combo1.ListIndex = (MSComm1.CommPort) - 1
MSComm1.RThreshold = 1
Page 12
MSComm1.InputLen = 40
MSComm1.Settings = Combo2.List(Combo2.ListIndex) &
",N,8,1"
MSComm1.PortOpen = True
cmdConnect.Enabled = False
cmdDisconnect.Enabled = True
End If
Next
Exit Sub
End Sub
Kalau deteksi secara otomatis, COM Port tidak perlu dipilih, yang harus
dipilih baud rate nya saja, lalu nanti tampilan Combo Box untuk COM
Port sesuai dengan hasil deteksi.
Klik pada cmdDisconnect dan ketikkan listing program sbb:
Private Sub cmdDisconnect_Click()
If MSComm1.PortOpen = True Then
MSComm1.PortOpen = False
End If
cmdConnect.Enabled = True
cmdDisconnect.Enabled = False
End Sub
Jika port serial terputus, maka cmdConnect enabled, cmdDisconnect
disabled, dan Timer1 non aktif.
Klik pada MsComm1 dan ketikkan listing program sbb:
Private Sub MSComm1_OnComm()
Dim buffer As String
Dim temp As String
buffer = MSComm1.Input
Page 13
If buffer <> "" Then
With Text1
.SelStart = Len(.Text)
.SelText = buffer
End With
End If
End Sub
Buffer merupakan variabel yang akan menerima data dari port serial
atau MsComm1.Input, jika data tidak kosong atau "", maka pada
Textbox1 ditambahkan baris setiap menerima data.
Klik pada Timer dan ketikkan listing program sbb:
Private Sub Timer1_Timer()
MSComm1_OnComm
End Sub
yang berarti akan memanggil sub program MsComm1_OnComm sebagai
pengambilan data serial, setiap interval waktu timer, yaitu 1 detik.
Pengaturan interval waktu pengambilan data ini bisa dilakukan dengan
program VB dengan timer seperti ini, tetapi bisa juga tidak menggunakan
timer dan menerima interval waktu yang sudah diatur pada
mikrokontroler.
Jika tidak ingin menggunakan Timer dari VB, alias Timer sesuai dengan
data pengiriman mikrokontroler, maka sub program Timer tidak perlu
dipakai.
Sekarang, program antarmuka untuk menampilkan data port serial sudah
selesai, jangan lupa di save. Kemudian lakukan ujicoba, ingat saat ujicoba
jangan mengaktifkan HyperTerminal, karena port serial tidak bisa dipakai
bersamaan.
Jalankan program, pilih COM yang digunakan, misalnya COM1, lalu Baud
rate sesuai dengan program Bascom AVR diatas adalah 9600, dan klik
Connect.
Maka akan tampil data yang dikirimkan dari mikrokontroler tsb sbb:
Page 14
Jika menerima data dari mikrokontroler ke Visual Basic sudah
dimengerti, sekarang kita coba untuk mengirim data dari visual basic ke
mikrokontroler.
Tambahkan dua buah CommandButton beri nama cmdTes (caption =
"Konfirmas") dan cmdKirim (caption = "Kirim"), dan satu TextBox dengan
nama txtdata, seperti ini:
Page 15
Tambahkan program berikut pada Private Sub Form_Load():
cmdKirim.Enabled = False
cmdTes.Enabled = False
dan tambahkan program berikut pada Private Sub cmdConnect_Click()
cmdKirim.Enabled = True
cmdTes.Enabled = True
Klik pada cmdTes dan ketikkan:
Private Sub cmdTes_Click()
MSComm1.Output = "X" & Chr$(13)
End Sub
yang berarti, VB akan mengirimkan karakter "X" atau x besar melalui port
serial.
Klik pada cmdKirim dan ketikkan:
Private Sub cmdKirim_Click()
Page 16
MSComm1.Output = txtdata.Text & Chr$(13)
MSComm1_OnComm
End Sub
yang berarti VB akan mengirimkan tulisan pada TextBox txtdata melalui
port serial.
Program Bascom AVR nya diubah menjadi seperti ini:
'=======================================
'Tes Port Serial
'Wahyu Rahmaniar
'Technologination
'=======================================
$regfile = "m32def.dat"
$crystal = 11059200
$baud = 9600
Dim Char As String * 10
Mulai:
Do
Char = Inkey()
If Char = "X" Then
Print "Respon OK"
Gosub Terima_data
Else
Print "Tes Port Serial"
Wait 1
Print "By Technologination"
Wait 1
Print "Wahyu Rahmaniar"
Wait 1
End If
Loop
Terima_data:
Page 17
Do
Char = Inkey()
Input Char Noecho
Print "Data yang dikirim: " ; Char
If Char = "X" Then
Goto Mulai
End If
Loop
Jika kita meng-klik button Konfirmasi pada VB maka akan dikirimkan
karakter "X", dan diterima oleh bascom dengan perintah inkey(), jika
bascom menerima "X" maka mikrokontroler akan mengirimkan tulisan
"Respon OK" ke VB, jika VB menampilkan "Respon OK" juga maka data
pada TextBox txtdata dapat diisi kemudian klik button Kirim. Data tsb
diterima oleh mikrokontroler dan dikirimkan kembali ke port serial
dengan tulisan "Data yang dikirimkan: " (txtdata).
Untuk kembali ke program awal menerima data dari mikrokontroler, klik
kembali button Konfirmasi. Hasilnya sbb:
Page 18
data yang dikirim adalah "ayuchan", kemudian diterima kembali oleh VB
menjadi: "Data yang diterima: ayuchan".
Source code program Bascom AVR dan Visual Basic ini dapat
didownload disini.
Tambahan, cara untuk menampilkan data per textbox dari tiga
parameter.
Caranya, tambahkan sebuah textbox dengan nama Text2.text. Kemudian
di copy dan paste pada form, jika ada peringatan:
"You already have a control name "Text2". Do you want to create a
control array?"
maka pilih yes, dan setiap copy dari Text2 menjadi nilai array berurutan,
perhatikan Properties --> Index.
Biasanya array dimulai dari nilai 0, ambil Text2.Text dengan nilai array 1
sampai 3, kemudian susun seperti ini:
Page 19
Pada Text2.Text ini font yang saya gunakan sama seperti pada
Text1.Text, yaitu Terminal --> regular --> 14, dengan Alignment --> 2-
Center.
Ubah sub program Mscomm1_OnComm() menjadi:
Private Sub MSComm1_OnComm()
Dim buffer As String
Dim temp As String
Dim pisah() As String
Dim i As Integer
If MSComm1.CommEvent = comEvReceive Then
buffer = MSComm1.Input
pisah = Split(buffer, Chr$(13))
Page 20
On Error Resume Next
If buffer <> " " Then
With Text1
.SelStart = Len(.Text)
.SelText = buffer
End With
For i = 1 To 3
If i < 4 Then
Text2(i).Text = CStr(pisah(i))
End If
Next i
Else
buffer = " "
End If
End If
End Sub
Split berfungsi sebagai pemisah data berdasarkan suatu karakter
tertentu, contoh diatas dipisahkan jika ada chr(13) atau enter, dan setiap
data yang dipisahkan menjadi satu data array, yang kemudian
ditempatkan pada array Text2.Text.
Pada bagian ini : Text2(i).Text = CStr(pisah(i)), jika datanya
string, ubah menjadi string (CSTR), jika double sebaiknya ubah menjadi
double (CDBL), karena akan mempengaruhi penyimpanan data yang
nanti akan dijelaskan pada postingan berikutnya.
Pada program bascom, untuk pengiriman datanya diubah menjadi:
Print "Tes Port Serial"
Print "By Technologination"
Print "Wahyu Rahmaniar"
Data dikirimkan tanpa delay, agar ditampilkan pada masing-masing array
Text2.Text secara berurutan. Data dikirimkan setiap enter atau chr(13)
alias dipisahkan dengan enter atau chr(13).
Page 21
Hasilnya seperti ini: