List of Projects using Atmega Microcontroller with ... - ATMega32 AVR
Stopwatch interfacing C# dengan komunikasi serial Atmega 8535
-
Upload
independent -
Category
Documents
-
view
1 -
download
0
Transcript of Stopwatch interfacing C# dengan komunikasi serial Atmega 8535
DAFTAR ISI
DAFTAR ISI.................................................1BAB I......................................................2PENDAHULUAN................................................2BAB II.....................................................3PEMBAHASAN.................................................32.1. Program.............................................32.1.1. Program Pada Mikrokontroller....................32.1.2. Program C#......................................6
2.2. Analisa Program....................................112.2.1 Program AVR.....................................112.2.2. Program Aplikasi C#............................13
BAB III...................................................17KESIMPULAN................................................17
1
BAB I
PENDAHULUAN
Komunikasi serial adalah komunikasi yang
pengiriman datanya per-bit secara berurutan dan
bergantian. Pada projek ini komunikasi serial dilakukan
antara mikrokontroller dengan dextop melalui C#.
Mikrokontroller dihubungkan dengan kabel serial atau
USB TTL supaya bisa terkoneksi dengan dextop.
Pada projek ini menggunakan program dengan basis
bahasa C++ yang dikembangkan yakni C#. C# sendiri juga
mendapat beberapa fitur fitur yang terdapat dalam
bahasa program lainnya seperti delphi, java, dan juga
visual basic. C# merupakan bahasa program yang lebih
sederhana dan lebih mudah dipelajari.
Cara menggunakan USB TTL adalah dengan
menghubungkan pin Rx USB TTL dengan pin Tx
mikrokontroller dan pin Tx USB TTL dengan pin Rx
mikrokontroller. USB TTL juga diberikan sumber Vcc dan
Gnd.
2
BAB II
PEMBAHASAN2.1. Program
2.1.1. Program Pada Mikrokontroller
Mikrokontroller merupakan otak dari projek ini.Modul bluetooth akan berkomunikasi denganmikrokontroller menggunakan mode UART. Pada codewizard, USART disetting dimana yang diaktifkan adalahTX, yaitu transmitter karena dalam projek inimikrokontroller berfungsi untuk mengirim data ke C#.Pada konfigurasi chip, chip yang digunakan adalahMikrokontroller dan clocknya 11,0592 MHz.
Berikut ini adalah program di AVR :
#include <mega8535.h>
// Standard Input/Output functions
#include <stdio.h>
#include <delay.h>
// Declare your global variables here
void main(void)
{
4
// Declare your local variables here
// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In
Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T
State2=T State1=T State0=T
PORTA=0x00;
DDRA=0xFF;
// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: Off
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud Rate: 9600
UCSRA=0x00;
UCSRB=0x08;
UCSRC=0x86;
5
UBRRH=0x00;
UBRRL=0x47;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1:
Off
ACSR=0x80;
SFIOR=0x00;
while (1)
{
if (PINA.0 == 0) // Stopwatch
{ putchar ('A');
delay_ms(2000);
}
if (PINA.1 == 0) // Stop
{putchar ( 'B');
delay_ms(2000);
}
6
2.1.2. Program C#
Untuk pemrograman dengan menggunakan Visual Studio
dan bahasa yang digunakan yakni C#. Dengan membuat
menggunakan windows form, sehingga tampilannya seperti
aplikasi.
Langkah pertama adalah membuat projek baru dengan
cara klik file > new > Project > Bahasa yang ingin
digunakan (Visual C#) > Windows Form Application.
Kemudian isikan nama project dan location. Setelah
nama projek dan location ditulis maka secara otomatis
program yang dibuat akan tersimpan di folder target
dari location yang dituliskan.
Langkah selanjutnya adalah membuat tampilan
aplikasi yang akan kita gunakan. Disini kita bisa
bebas membuat bentuk template aplikasi yang akan kita
gunakan.dalam tampilan ini kita mengincludekan fitur
fitur seperti timer, serial port, button, textbox dan
lainnya. Tampilan aplikasi yang dibuat adalah sebagai
berikut :
8
Setelah tampilan aplikasi dibuat barulah kita
menulikan program yang akan dibuat. Agar lebih
mudahnya, kita cukup mengklik button atau fitur tadi
jika ingin diberi program. Contohnya untuk button
disconnect sebagai berikut.
Ini saat button di klick 2x :
private void button2_Click(object sender, EventArgs e) { }
Setelah itu barulah kita isikan perintah dalam kurung
kurawal tersebut, sehingga menjadi seperti berikut :
private void button2_Click(object sender, EventArgs e) { try { //—tutup serial port— serialPort.Close(); //—menampilkan status dari serial port dan // enable/disable -kan tombol— label3.Text = serialPort.PortName + " disconnected."; button1.Enabled = true; button2.Enabled = false; } catch (Exception ex) { MessageBox.Show(ex.ToString());
} }
Untuk program keseluruhannya adalah sebagai berikut :
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;
10
using System.Text;using System.Threading.Tasks;using System.Windows.Forms;
namespace Bismillah{ public partial class Form1 : Form { public Form1() { InitializeComponent(); }
private void Form1_Load(object sender, EventArgs e) { serialPort.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(DataReceived); string[] portNames = System.IO.Ports.SerialPort.GetPortNames(); for (int i = 0; i <= portNames.Length - 1; i++) { comboBox1.Items.Add(portNames[i]); } button2.Enabled = false; }
private void button1_Click(object sender, EventArgs e) { if (serialPort.IsOpen) { serialPort.Close(); } try { //—mengatur beberapa parameter untuk koneksi serial // port— serialPort.PortName = comboBox1.Text; serialPort.BaudRate = 9600; serialPort.Parity = System.IO.Ports.Parity.None; serialPort.DataBits = 8; serialPort.StopBits = System.IO.Ports.StopBits.One; //—buka serial port— serialPort.Open(); //—menampilkan status dari serial port dan // enable/disable -kan tombol— label3.Text = comboBox1.Text + " connected."; button1.Enabled = false; button2.Enabled = true;
11
} catch (Exception ex) { MessageBox.Show(ex.ToString()); } }
private void eventLog1_EntryWritten(object sender, System.Diagnostics.EntryWrittenEventArgs e) {
}
private void button2_Click(object sender, EventArgs e) { try { //—tutup serial port— serialPort.Close(); //—menampilkan status dari serial port dan // enable/disable -kan tombol— label3.Text = serialPort.PortName + " disconnected."; button1.Enabled = true; button2.Enabled = false; } catch (Exception ex) { MessageBox.Show(ex.ToString()); } } private void DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) { //—memanggil delegasi untuk mengambil data yang diterima— richTextBox1.BeginInvoke(new myDelegate(updateTextBox)); }
public delegate void myDelegate(); public void updateTextBox() { //—menambahkan data pada TextBox control— richTextBox1.AppendText(serialPort.ReadExisting()); richTextBox1.ScrollToCaret(); richTextBox1.ToString();
12
} int jam, menit, detik, ms = 0; private void timer1_Tick(object sender, EventArgs e) { label2.Text = jam + " : " + menit + " : " + detik + " : "+ ms.ToString(); ms++;
if (ms > 16) { detik++; ms = 00; }
else { ms++; }
if (detik > 59) { menit++; detik = 00; }
if (menit > 59) { jam++; menit = 00; } } string A, B, C; private void richTextBox1_TextChanged(object sender, EventArgs e) {
if (richtextbox = A) { timer1.Start(); } if (richtextbox = B) { timer1.Stop(); } if (richtextbox = C) { ms = 00; detik = 00; menit = 00;
13
jam = 00; label2.Text = jam + " : " + menit + " : " + detik + " : " + ms;
} }
}}
Setelah program aplikasi selesai,maka kita dapat
menjalankan program yang telah dibua tadi dengan cara
menekan ctrl + F5, atau menekan start debug pada menu
DEBUG. Berikut ini tampilan dari aplikasi Stopwatch
menggunakan C# yang telah diDEBUG dan telah
diconnectkan ke mikrokontroller :
14
2. 2 Analisa Program
2.2.1 Program AVR
Berikut ini akan dijelaskan tentang fungsi dari program-program yang dituliskan di AVR. Untuk header dari program :
#include <mega8535.h>, yang digunakan adalah mikrokontroller ATMega 8535.
#include <stdio.h> , header ini muncul secara otomatis ketika USART diaktifkan, jadi library stdio diperlukan dalam penerimaan atau pengiriman data.
#include <delay.h> , untuk memanggil library delay sehingga pada AVR bisa diprogramkan waktu tunda.
Untuk fungsi port-port pada mikrokontroller dituliskanprogram sebagai berikut :
PORTA=0x00;
DDRA=0xFF;
Artinya port A pada chip akan difungsikan sebagai output aktif low.
UCSRA=0x00;
UCSRB=0x10;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x47;
Coding ini menunjukkan bahwa yang diaktifkan
adalah receiver (Rx) mode Asynchronous dengan parameter
8 bit, 1 stop, no parity dan baudrate-nya adalah 9600.
15
Dengan demikian, secara hardware untuk mode
asyncrhronous hanya membutuhkan 2 pin yaitu TXD dan
RXD. Kemudian yang perlu diperhatikan dalam penggunaan
krystal adalah krystal yang digunakan haruslah yang
memiliki frekensi 11,0592 MHz agar eror dari komuniksi
ini sama dengan 0.
Selanjutnya disikan program sebagai berikut :
while (1)
{
if (PINA.0 == 0) // Stopwatch
{ putchar ('A');
delay_ms(2000);
}
if (PINA.1 == 0) // Stop
{putchar ( 'B');
delay_ms(2000);
}
if (PINA.2 == 0) // Reset
16
{ putchar ('C');
delay_ms(2000);
}
};
Maksud dari program ini adalah sebagai berikut :
Saat Push Button1 ditekan maka pada PINA.0 akan
mengirim data character ‘A’, Delay pengiriman adalah
2000ms. Saat Push Button1 ditekan maka pada PINA.1 akan
mengirim data character ‘B’, Delay pengiriman adalah
2000ms. Saat Push Button1 ditekan maka pada PINA.2 akan
mengirim data character ‘C’, Delay pengiriman adalah
2000ms. Jadi TXD akan mengirim data dari mikro ke RXD
USB TTL dalam bentuk karakter ‘A’ , ‘B’, ‘C’. Karakter
untuk mengaktifkan Stopwatch, karakter B untuk Stop,
dan C untuk mereset stopwatch.
2.2.2. Program Pada C#
Berikut ini akan dijelaskan tentang fungsi dari program-program yang dituliskan di Visual Studio. Untukheader dari program :using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;
17
Coding tersebut akan otomatis terinput ke program saat kita telah membuat form baru.private void Form1_Load(object sender, EventArgs e) { serialPort.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(DataReceived); string[] portNames = System.IO.Ports.SerialPort.GetPortNames(); for (int i = 0; i <= portNames.Length - 1; i++) { comboBox1.Items.Add(portNames[i]); } button2.Enabled = false; }
Merupakan coding yang kita gunakan secara generaldalam Form, ini juga berfungsi untuk memilih COM berapayang ready untuk di Connect ke C#, saat debug, danready untuk connect, kita dapat memilih COM mana yangakan digunakan sebagai komunikasi, tombol disconnecttidak akan bisa diclick setelah tombol connect telahaktif.private void button1_Click(object sender, EventArgs e) { if (serialPort.IsOpen) { serialPort.Close(); } try { //—mengatur beberapa parameter untuk koneksi serial // port— serialPort.PortName = comboBox1.Text; serialPort.BaudRate = 9600; serialPort.Parity = System.IO.Ports.Parity.None; serialPort.DataBits = 8; serialPort.StopBits = System.IO.Ports.StopBits.One; //—buka serial port— serialPort.Open(); //—menampilkan status dari serial port dan // enable/disable -kan tombol— label3.Text = comboBox1.Text + " connected."; button1.Enabled = false;
18
button2.Enabled = true; } catch (Exception ex) { MessageBox.Show(ex.ToString()); } }
Ini merupakan coding saat tombol connect ditekan.Serial port akan aktif, sehingga serial komunikasidapat terjadi. Saat connect, baudrate yang digunakanyakni 9600 dan data bit 8, label 3 akan menuliskan COMyang digunakan + “connected” artinya COM telahterhubung ke C#. Button connect tidak akan digunakandan button disconnect akan dapat digunakan. Jika adaerror atau selain dari yang diprogramkan akanmemunculkan messagebox.
private void button2_Click(object sender, EventArgs e) { try { //—tutup serial port— serialPort.Close(); //—menampilkan status dari serial port dan // enable/disable -kan tombol— label3.Text = serialPort.PortName + " disconnected."; button1.Enabled = true; button2.Enabled = false; } catch (Exception ex) { MessageBox.Show(ex.ToString()); } }
ini merupakan coding saat button disconnectditekan. Saat button disconnect ditekan serial portakan close, sehingga komunikasi serial akan terputus.Label 3 akan menampilkan status bahwa COM yang telahterhubung menjadi disconnect. Button connect yangnonaktif menjadi bisa diaktifkan.
19
private void DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) { //—memanggil delegasi untuk mengambil data yang diterima— richTextBox1.BeginInvoke(new myDelegate(updateTextBox)); }
public delegate void myDelegate(); public void updateTextBox() { //—menambahkan data pada TextBox control— richTextBox1.AppendText(serialPort.ReadExisting()); richTextBox1.ScrollToCaret(); richTextBox1.ToString();
}
Saat menerima data dari mikrokontroller datatersebut akan ditampilkan ke dalam richtextbox. Datatersebut akan dapat update jika diberi data terusmenerus tanpa henti. Dan dapat kita scroll jika telahmelebihi pada tampilan richtexbox. Data yang diterimaakan diubah menjadi type data String.
int jam, menit, detik, ms = 0; private void timer1_Tick(object sender, EventArgs e) { label2.Text = jam + " : " + menit + " : " + detik + " : "+ ms.ToString(); ms++;
if (ms > 100) { detik++; ms = 00; }
else { ms++; }
20
if (detik > 59) { menit++; detik = 00; }
if (menit > 59) { jam++; menit = 00; } }
Dengan variabel data bertype Integer, yakni jam,menit, detik, dan ms. Ini merupakan coding untukstopwatch aktif. Stopwatch diaktifkan dengan fiturtimer yang diset dengan coding yang kita buat. Tampilanawal pada label 2 (tempat waktu yang akan berubah)yakni 0 : 0 : 0 : 0. Saat timer1 ini aktif variabel msakan mulai aktif dengan pewaktu 0 hingga 100, denganfrekuensi yang telah diatur pada settingan timer1.Setelah ms lebih dari 100 akan menambah nilai varibeldetik sementara nilai ms akan looping dan mengulangdari 0 – 100 lagi. Setelah nilai detik lebih dari 59nilai menit akan bertambah begitu juga dengan jam.
string A, B, C; private void richTextBox1_TextChanged(object sender, EventArgs e) {
if (richtextbox = A) { timer1.Start(); } if (richtextbox = B) { timer1.Stop(); } if (richtextbox = C) {
21
ms = 00; detik = 00; menit = 00; jam = 00;
label2.Text = jam + " : " + menit + " : " + detik + " : " + ms;
} }
Coding ini untuk kontrol stopwatch. Ekspektasinyasaat PB1 ditekan akan mengirim character A dan pada C#A yang ditampilkan pada richtextbox yang telahdikonversi ke type string akan mengaktifkan timer1. PB2ditekan akan mengirim character B dan pada C# B yangditampilkan pada richtextbox yang telah dikonversi ketype string akan mengstop stopwatch timer1. PB3 ditekanakan mengirim character C dan pada C# C yangditampilkan pada richtextbox yang telah dikonversi ketype string akan mereset label2 yang berperan sebagaistopwatch menjadi 0 : 0 : 0 : 0. Namun pada saat inisaat PB1 aktif maka timer 1 akan aktif dan saat PB2aktif tidak akan terjadi apa apa walau pun data B yangditerima ditampilkan pada richtexbox begitu juga untukPB3.
BAB III
KESIMPULAN
Komunikasi serial dextop dengan mikrokontroller
dengan menggunakan bahasa C#, mikrokontroller sebagai
22
pengirim data dan dextop sebagai penerima dengan
bantuan USB TTL. Untuk mengconnectkan perlu menekan
button connect terlebih dahulu.
Untuk program C# nya dapat diperhatikan fungsi
khusus seperti serial port dan timer yang ada pada
toolbox C#. settingan serial port harus diperhatikan
agar sama dengan setingan yang akan digunakan pada
mikrokontroller. Seperti baudrate yang digunakan dan
data bit yang diterima. Program C# ini berfunsi sebagai
receiver dari data yang dikirimkan mikrokontroller
Mikrokontroller pada projek ini berfungsi untuk
pengirim data yang PB1 digunakan sebagai pengirim
character ‘A’. Character A berfungsi untuk menghidupkan
stopwatch. PB2 digunakan sebagai pengirim character
‘B’. Character B berfungsi untuk mematikan stopwatch.
PB3 digunakan sebagai pengirim character ‘C’. Character
C berfungsi sebagai reset stopwatch.
23