Stopwatch interfacing C# dengan komunikasi serial Atmega 8535

23
DAFTAR ISI DAFTAR ISI.................................................1 BAB I......................................................2 PENDAHULUAN................................................2 BAB II.....................................................3 PEMBAHASAN.................................................3 2.1. Program.............................................3 2.1.1. Program Pada Mikrokontroller....................3 2.1.2. Program C#......................................6 2.2. Analisa Program....................................11 2.2.1 Program AVR.....................................11 2.2.2. Program Aplikasi C#............................13 BAB III...................................................17 KESIMPULAN................................................17 1

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

3

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

if (PINA.2 == 0) // Reset

{ putchar ('C');

delay_ms(2000);

}

};

}

7

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

9

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