Anda di halaman 1dari 18

PRAKTIKUM INTERFACE

PEER TO PEER COMMUNICATION RS-232


BETWEEN PC AND MICROCONTROLLER

Dosen Pengampu :
Eka Prasetyono, S.ST,MT
Disusun oleh :
BRAMASTO ADI NUGROHO
NRP. 1310131042

TEKNIK ELEKTRO INDUSTRI


DEPARTEMEN ELEKTRONIKA
POLITEKNIK ELEKTRONIKA NEGERI SURABAYA
2015/2016

I. TUJUAN
1. Mahasiswa mengerti dan dapat mengaplikasikan bahasa pemrograman C# dengan
Visual Studio
2. Mahasiswa mampu mendesain tampilan antarmuka komputer dengan Visual Studio
3. Mahasiswa mampu membuat komunikasi peer to peer via RS-232 antara PC dengan
Mikrokontroller
II. DASAR TEORI
Framework .NET adalah suatu komponen windows terintegrasi yang dibuat dengan
tujuan untuk mendukung pengembangan berbagai macam jenis aplikasi serta untuk dapat
menjalankan berbagai macam aplikasi generasi mendatang termasuk pengembangan
aplikasi Web Services XML.
Framework .NET didisain untuk dapat memenuhi beberapa tujuan berikut ini :
Untuk menyediakan lingkungan kerja yang konsisten bagi bahasa pemrograman yang
berorientasi objek ( object-oriented programming - OOP )
Untuk menyediakan lingkungan kerja di dalam mengeksekusi kode yang dapat
meminimaliasi proses software deployment dan menghindari konflik penggunaan
versi software yang dibuat.
Untuk menyediakan lingkungan kerja yang aman dalam hal pengeksekusian kode,
termasuk kode yang dibuat oleh pihak ketiga ( third party).
Untuk menyediakan lingkungan kerja yang dapat mengurangi masalah pada
persoalan performa dari kode atau dari lingkungan interpreter nya.
Ada dua komponen utama dalam .NET Framework yaitu CLR (Common Language
Runtume) dan FCL (.NET Framework Class Library).
Common Language Runtime (CLR) adalah pondasi utama dari Framework .NET.
CLR merupakan komponen yang bertanggung jawab terhadap beberapa tugas,
seperti mengatur managemen memory, melakukan eksekusi kode, melakukan
verifikasi terhadap keamanan kode, menentukan hak akses dari kode, melakukan
kompilasi kode, dan berbagai tugas lainnya. Dengan adanya komponen CLR ini, maka
aplikasi berbasis .NET biasa juga disebut dengan managed code, sedangkan aplikasi di
luar .NET disebut dengan un-managed code.
Pada .NET ada dua tahap kompilasi yang dilakukan, pertama CLR akan
melakukan kompilasi kode-kode aplikasi kita menjadi bahasa assembly MSIL
(Microsoft Intermediate Language), kedua ketika aplikasi dieksekusi compiler yang lain
yang bernama JIT (Just-in-time compiler) yang juga salah satu kompenen dalam CLR
untuk menterjemahkan MSIL kedalam bahasa mesin yang disesuaikan dengan
platformnya.
Sekilas Pemrograman C#
Pada tahun 2000 Microsoft meluncurkan bahasa pemrograman baru yang diberi
nama C# Programming Language. C# dikembangkan oleh Microsoft oleh tim yang
dipimpin oleh Anders Hejlsberg dan Scott Wiltamuth. C# memiliki kesamaan bahasa
dengan C, C++, dan Java, sehingga memudahkan developer yang sudah terbiasa
dengan bahasa C untuk menggunakannya, C# mengambil fitur-fitur terbaik dari
ketiga bahasa tersebut dan juga menambahkan fitur-fitur baru. C# adalah bahasa
pemrograman Object Oriented dan memiliki class library yang sangat lengkap yang
berisi prebuilt component sehingga memudahkan programer untuk men-develop
program lebih cepat. C# juga distandarkan oleh Ecma International pada bulan
desember 2002. Dengan C# dapat dibuat bermacam aplikasi seperti aplikasi console,
aplikasi windows form, aplikasi Web, aplikasi Web services, dan aplikasi untuk mobile
device. Jadi cukup belajar satu bahasa saja tapi sudah dapat digunakan untuk
mengembangkan berbagai macam aplikasi.

Sekilas Tentang Visual Studio


Microsoft Visual Studio adalah sebuah integrated development environment (IDE) yang
digunakan untuk mengembangkan sebuah konsol dan graphical user interface yang
meliputi Windows Forms, website, web application, dan web service, desktop application
dsb. untuk semua platform yang didukung oleh platform Microsoft Windows, Windows
Mobile, Windows CE, .NET Framework, NET Compact Framework dan Microsoft
Silverlight.
Visual Studio mendukung beberapa macam bahasa pemrograman built-in yang
diantaranya adalah C/C++ (via Visual C++), VB.NET (via Visual Basic.NET), C# (via
Visual C#), dan F# (Visual Studio 2010). Bahasa pemrograman lain seperti M, Phyton
dan Ruby juga didukung dengan menginstall language service yang diinstal secara
terpisah. Visual Studio juga mendukung XML/XSLT, HTML/XHTML, JavaScript dan
CSS.Microsoft menyediakan edisi "Express" yang dapat didownload secara gratis bagi
para developer yang ingin belajar membuat aplikasi pada platform-platform Microsoft.
Visual Studio Profesional Edition 2012, 2010, 2008 ,dan 2005 yang menyediakan fiturfitur tambahan yang lebih lengkap dapat dibeli atau diperoleh secara gratis melalui
program Microsoft DreamSpark.
START PAGE VISUAL STUDIO 2015

merupakan tampilan awal dari Visual Studio Express 2012. Pada halaman ini kita dapat
menemukan button-button atau link-link penting yang akan memudahkan kita untuk
memulai pekerjaan seperti link untuk membuat proyek dan solution baru, link untuk
membuka proyek yang akhir-akhir ini sedang dikerjakan, serta link untuk membuka
panduan tentang cara mengembangkan aplikasi pada Visual Studio.
USER INTERFACE
1 Solution Explorer
Kita menggunakan Solution Explorer untuk mengelola solution atau untuk
membuka bagian-bagian dari proyek yang berbeda. Untuk membuka Solution
Explorer pilih View Solution Explorer, atau tekan CTRL + ALT L, atau
ketik Solution Explorer pada jendelaQuick Launch. Solution Explorer dapat
kita gunakan untuk menambah, menyalin, atau menghapus proyek atau item pada
solution.

2 Toolbox
Toolbox menampilkan ikon untuk kontrol yang dapat kita tambahkan ke dalam proyek
Visual Studio.Untuk membuka Toolbox, klik Toolbox pada menu View.Toolbox
secara default terletak pada bagian kiri jendela Visual Studio.

Menu bar & Tool bar


Menu bar menyediakan seluruh fungsi yang dapat digunakan pada Visual Studio.
Fungsi-fungsi tersebut terklasifikasi melalui kriteria tertentu dan dapat diakses melalui
menu-menu tersendiri seperti File, Edit, Project, Build, dsb.Sedangkan Toolbar
dibawahnya menampilkan fungsi yang sering digunakan dalam proses pengerjaan
proyek. Secara default Toolbar mengandung fungsi standar seperti tombol open, save,
undo, redo serta run project.

Designer & Code Editor


Designer & Code Editor merupakan workspace dalam mengembangkan aplikasi pada
Visual Studio. Code Editor adalah tempat kita melakukan aktivitas penulisan
program, sedangkan Designer Editor menampilkan tampilan halaman yang sedang
kita kerjakan.Dengan menggunakan Designer Editor kita dapat melakukan drag-anddrop untuk memudahkan kita dalam melakukan proses desain user interface pada
aplikasi
yang
sedang
dikembangkan.
Untuk
membuka Designer
Editor pilih Designer pada menu view atau dengan menekan Shift+F7. Untuk
membuka Code Editor pilih Code pada menu View atau dengan
menekan Ctrl+Alt+0.

5 Error List
Terletak pada bagian bawah Visual Studio terdapat Error
List. Error List memiliki fungsi menampilkan segala error &
warning yang ada pada program yang sedang dikerjakan. Untuk
menampilkannya, pilih Error List pada menu View atau dengan
menekan tombol Ctrl+W, E.

Mikrokontroller ARM STM32F407VG


ARM STM32F407VG adalah prosesor dengan arsitektur set instruksi 32bit RISC
(Reduced Instruction Set Computer) yang dikembangkan oleh ARM Holdings. ARM
merupakan singkatan dari Advanced RISC Machine (sebelumnya lebih dikenal dengan
kepanjangan Acorn RISC Machine). Beberapa fitur yang disediakan oleh prosessor ini
adalah sebagai berikut:
a. Memori
1) Memori flash sampai 1Mb.
2) SRAM sampai 192+4 Kbyte termasuk 64 Kbyte didalam CCM (Core Coupled
Memory) data RAM
3) Flexyble static memory controller yang mendukung Compact flash, SRAM,
PSRAM, memori NOR dan memori NAND.
b. Interface LCD secara parallel pada mode 8080/6800
c. Daya rendah
1) Sleep, stop dan mode standby
2) VBAT supply untuk RTC, 2032 bit backup registers + optional 4 KB backup
SRAM
d. 312-bit, 2.4 MSPS A/D converters: sampai 24 channel dan 7.2 MSPS pada triple
interleaved mode
e. 212-bit D/A converter
f. Mencapai 17 timer: up to twelve 16-bit and two 32-bit timer sampai 168 MHz,
kenaikan sampai 4 IC/OC/PWM atau penghitung pulsa dan quadrature (incremental)
untuk input encoder.
g. Mencapai 140 I/O port dengan kemampuan interupt

1) Mencapai 136 fast I/Os sampai 84 MHz


2) Mencapai 138 5 V-tolerant I/Os
h. Mencapai 15 communication interfaces
1) Mencapai 3 I2C interfaces (SMBus/PMBus)
2) Mencapai 4 USARTs/2 UARTs (10.5 Mbit/s,ISO 7816 interface, LIN, IrDA,
modem control)
3) Mencapai 3 SPIs (37.5 Mbits/s), 2 dengan muxed full-duplex I2S untuk achieve
audio class accuracy menggunakan internal audio PLL atau external clock
4) 2 CAN interfaces (2.0B Active)
5) SDIO interface
i. Advance konectivitas
1) USB 2.0 full-speed device/host/OTG controller dengan on-chip PHY
2) USB 2.0 high-speed/full-speed device/host/OTG controller dengan dedicated
DMA, on-chip full-speed PHY and ULPI
3) 10/100 Ethernet MAC dengan dedicated DMA: yang mendukung IEEE
1588v2 hardware, MII/RMII

Blok Diagram ARM STM32F407 VG

USART ON STM32F407VG

Komunikasi adalah pertukaran informasi antara dua perangkat atau lebih. Komunikasi
pada perangkat elektronik pada dasarnya dibagi menjadi dua yaitu komunikasi paralel
dan komunikasi serial. Pada modul ini dibahas tentang komunikasi serial
menggunakan mikrokontroler STM32F407VG mode asinkron (Universal
Asynchronous Receiver Transmitter/UART). Komunikasi serial adalah proses
pengiriman/penerimaan data satu bit pada satu waktu. Jika ada banyak data yang
dikirim, maka dikirimbergantian satu persatu seperti pada gambar dibawah ini.

Komunikasi serial menggunakan sedikit kabel untuk berkomunikasi. Secara teoritis,


komunikasi serial berjalan lebih lambat dari pada komunikasi paralel. Namun pada
kenyataannya komunikasi serial pada kasus tertentu (misalkan kabel penghantar yang
sangat panjang) akan lebih cepat dan tingkat keakuratan data lebih baik dari pada
komunikasi paralel.
Mode transmisi serial terbagi menjadi dua yaitu :
1. Asynchronous Data Transfer
Transfer data dikatakan asinkron, jika bit-bit data tidak disinkronkan dengan sebuah
jalur clock. Terdapat tiga kabel yang mendukung komunikasi yaitu Rx, Tx, Gnd.
2. Synchronous Data Transfer
Transfer data dikatakan sinkron jika bit-bit data disinkronkan dengan sebuah jalur
clock. Terdapatempatkabel yang mendukung komunikasi yaitu Rx, Tx, Clock, Gnd.
Data dikirim secara serial ditunjukkan pada gambar 2. Mikrokontroler STM32F407VG
dilengkapi dengan Universal Synchronous Asynchronous Receiver Transmitter
(USART) yang berfungsi untuk proses konversi antara data berbentuk paralel dan
serial. Masing-masing USART berisi sebuah shift register.

STM32F407VG mendukung komunikasi searah synchronous, komunikasi single-wire,


Local Interconnection Network (LIN), Smartcard Protocol dan Infrared Data
Association (IrDa) spesifikasi SIR ENDEC, dan operasi modem (CTS/RTS).
STM32F407VG juga menawarkan komunikasi multiprosesor. STM32F407VG
mempunyai enam buah USART yang masing-masing mempunyai fitur-fitur berbeda.
USART yang akan digunakan harus disesuaikan dengan kebutuhan dan tingkat
efisiensi. Tabel 1 menunjukkan perbandingan fitur yang dimiliki masing-masing
USART dan APB mapping pada STM32F407VG.

Tabel Perbandingan USART pada STM32F407VG

Beberapa GPIO digunakan secara bersama dengan periperal USART. STM32F407VG


menawarkan fleksibilitas dalam memilih GPIO yang digunakan untuk periperal
USART. Misalkan, USART1 dapat diaktifkan pada PA9-PA10,atau PB6-PB7. Karena
pada board STM32F407VG Discovery PA9-PA10 digunakan untuk user LED,maka
dapat diganti ke PB6 PB7. STM32F407V mendukung hardware flow control pada
beberapa USART. Hardwareflowcontrol disalurkan pada pin RTS dan CTS. Tabel 2
menunjukkan pemetaan port untuk alternate function USART yang tidak berbenturan
dengan fungsi lain pada board STM32F407V Discovery.
Tabel Pemetaan Port USART pada STM32F407VG

Format USART
Format data USART ditunjukkan pada gambar 3. Setiap paket data serial yang
dikirim terdiri dari start bit, data frame, parity, dan stopbit. Wordlength dapat dipilih
diantara 8 atau 9 bit melalui pemrograman pada register USART_CR1. Pin Tx berada
pada kondisi low pada saat start bit dan high pada saat stop bit. Idle character
ditunjukkan sebagai keseluruhan frame berlogika high, termasuk stop bit, dan diikuti
start bit paket data serial selanjutnya yang berisi data. Break character ditunjukkan
oleh penerimaan logika low selama periode frame. Pada akhir break frame, pengirim
menyertakan 1 atau 2 stop bits (bit berlogika high) untuk mengetahui start bit.
Setiap karakter diproses oleh start bit yang berlogika low selama satu periode bit.
Karakter diakhiri oleh sejumlah stop bit yang dapat dikonfigurasi. Jumlah stopbits
yang disediakan oleh USART adalah 0.5, 1, 1.5 dan 2 stop bit.
Baudrate adalah kecepatan pengiriman data (bit per detik). Pengirim dan
penerima harus mempunyai baudrate yang nilainya sama agar tidak terjadi salah
penerjemahan data Nilai baudrate yang umum adalah 1200, 2400, 4800, 9600, 19200,
38400, 57600, 115200 bps.

MengirimData
Selama transmisi USART, data register digeser keluar dengan LSB pertama
melalui pin TX. Register USART_DR bertindak sebagai buffer( TDR) antara bus
internal dan transmit shift register. Bit TXE di-set oleh hardware, menunjukkan bahwa
data sudah dipindah dari TDR ke shift register dan transmisi data sudah dimulai. TDR
dikosongkan dan data berikutnya dapat ditulis ke register USART_DR tanpa menimpa
data sebelumnya. Flag ini akan membangkitkan interupsi jika bit TXEIE di-set.
Menerima Data
USART dapat menerima data 8 bit atau 9 bit tergantung dari konfigurasi bit-M
dalam register USART_CR1. Ketika sebuah karakter diterima, bit RXNE di-set. Ini
menunjukkan bahwa isi dari shift register dipindah ke RDR. Dengan kata lain, data
telah diterima dan dapat dibaca. RXNE akan otomatis di-clear ketika software
membaca register USART_DR. Flag RXNE dapat juga di-clear dengan menuliskan
nol pada bit ini. Flag ini akan membangkitkan interupsi bila bit RXNEIE di-set.
Interupsi serial
USART interrupt events terhubung pada vektor interupsi yang ditunjukkan pada
gambar dibawah. Berikut adalah even-even yang dapat memicu interupsi.
Selama transmisi data : Transmisi komplit, Clear to Send atau Transmit Data
Register Empty Interrupt.
Selama menerima data : Idle Line detection, Overrun error, Receive Data Register
Not Empty, Parity Error, LIN Break Detection, Noise Flag (hanya pada komunikasi
multi buffer) dan Framing Error (hanya pada komunikasi multi buffer)
Even memicu sebuah interupsi jika Enable Control Bit yang bersangkutan di-set. Tabel
dibawah ini menunjukkan kontrol bit yang dapat diaktifkan.

III.

IV.

ALAT DAN BAHAN


Visual Studio 2013 / 2015
MDK ARM Keil V5
USB to Serial RS-232
Serial RS-232 to RJ-11
Modul Mikrokontroller ARM STM32F407VGT6
RANGKAIAN PERCOBAAN

V. LANGKAH PERCOBAAN
1 Hubungkan PC dengan Modul ARM STM32F407VG menggunakan kabel RS-232.
Cek pada Device Manager pengalamatan kabel tersebut, misal : COM1.
2 Buka software Pengirim yang telah dibuat sebelumnya. Contoh :

3
4
5
6

VI.

Pastikan Program yang telah diketik pada Keil sudah terdownload pada Modul Arm.
(Program Terlampir)
Pada software Pengirim, pilih Port terlebih dahulu. Misal : COM1. Klik Open.
Tekan salah satu Tombol ON yang terdapat pada Relay 1 Relay 8.
Relay yang terdapat pada Modul Mikrokontroler akan menyala. Begitu pula
sebaliknya jika tombol OFF ditekan.

PROGRAM
FORM PENGIRIM
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;
using System.IO.Ports;
namespace Pengirim
{
public partial class Form1 : Form
{
string baca;
public Array myport;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
foreach (string s in System.IO.Ports.SerialPort.GetPortNames())
{
comboBox1.Items.Add(s);
}
Close.Enabled = false;
Open.Enabled = true;
}
private void Open_Click(object sender, EventArgs e)
{
if (comboBox1.Text!="")
{
serialPort1.PortName = comboBox1.Text;
serialPort1.Open();
//timer1.Enabled = true;
Close.Enabled = true;
Open.Enabled = false;
}
else if (comboBox1.Text=="")
{
MessageBox.Show("Harap Pilih PORT!");
}
comboBox1.Enabled = false;
}
private void Close_Click(object sender, EventArgs e)

serialPort1.Close();
Close.Enabled = false;
Open.Enabled = true;
//timer1.Enabled = false;
comboBox1.Enabled = true;

}
private void send_Click(object sender, EventArgs e)
{
if (textBox1.Text!="")
{
serialPort1.Write(textBox1.Text);
}
else if (textBox1.Text=="")
{
MessageBox.Show("Format belum diisi!");
}
}
private void button1_Click(object sender,
{
if (button1.Text == "ON")
{
serialPort1.Write("*W03011#");
label4.BackColor = Color.Yellow;
button1.Text = "OFF";
}
else if (button1.Text == "OFF")
{
serialPort1.Write("*W03010#");
label4.BackColor = Color.White;
button1.Text = "ON";
}
}
private void button4_Click(object sender,
{
if (button4.Text == "ON")
{
serialPort1.Write("*W03021#");
label5.BackColor = Color.Yellow;
button4.Text = "OFF";
}
else if (button4.Text == "OFF")
{
serialPort1.Write("*W03020#");
label5.BackColor = Color.White;
button4.Text = "ON";
}
}
private void button6_Click(object sender,
{
if (button6.Text == "ON")
{
serialPort1.Write("*W03031#");
label6.BackColor = Color.Yellow;
button6.Text = "OFF";
}
else if (button6.Text == "OFF")
{
serialPort1.Write("*W03030#");
label6.BackColor = Color.White;
button6.Text = "ON";
}
}
private void button8_Click(object sender,
{
if (button8.Text == "ON")
{
serialPort1.Write("*W03041#");
label7.BackColor = Color.Yellow;
button8.Text = "OFF";

EventArgs e)

EventArgs e)

EventArgs e)

EventArgs e)

}
else if (button8.Text == "OFF")
{
serialPort1.Write("*W03040#");
label7.BackColor = Color.White;
button8.Text = "ON";
}

}
private void button16_Click(object sender,
{
if (button16.Text == "ON")
{
serialPort1.Write("*W03051#");
label11.BackColor = Color.Yellow;
button16.Text = "OFF";
}
else if (button16.Text == "OFF")
{
serialPort1.Write("*W03050#");
label11.BackColor = Color.White;
button16.Text = "ON";
}
}
private void button14_Click(object sender,
{
if(button14.Text == "ON")
{
serialPort1.Write("*W03061#");
label10.BackColor = Color.Yellow;
button14.Text = "OFF";
}
else if (button14.Text == "OFF")
{
serialPort1.Write("*W03060#");
label10.BackColor = Color.White;
button14.Text = "ON";
}
}
private void button12_Click(object sender,
{
if (button12.Text == "ON")
{
serialPort1.Write("*W03071#");
label9.BackColor = Color.Yellow;
button12.Text = "OFF";
}
else if (button12.Text == "OFF")
{
serialPort1.Write("*W03070#");
label9.BackColor = Color.White;
button12.Text = "ON";
}
}
private void button10_Click(object sender,
{
if (button10.Text == "ON")
{
serialPort1.Write("*W03081#");
label8.BackColor = Color.Yellow;
button10.Text = "OFF";
}
else if (button10.Text == "OFF")
{
serialPort1.Write("*W03080#");
label8.BackColor = Color.White;
button10.Text = "ON";
}
}

EventArgs e)

EventArgs e)

EventArgs e)

EventArgs e)

private void Form1_FormClosing(object sender, FormClosingEventArgs e)


{

}
}

serialPort1.Close();

PROGRAM MIKROKONTROLER
#include "stm32f4xx_hal.h"
#include "lcd_character.h"
#include "stdlib.h"
#define RX_BUFFER_SIZE 16
UART_HandleTypeDef huart1;
uint8_t rx_buffer[RX_BUFFER_SIZE];
uint8_t rx_data, datasend[]={"OK\n"};
unsigned int rx_index;
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_USART1_UART_Init(void);
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_USART1_UART_Init();
HAL_UART_Receive_IT(&huart1,&rx_data,1);
lcd_init(); //Inisialisasi LCD
while (1)
{
int ch, myadd,add_data;
char buffer[5];
myadd = 3;
lcd_gotoxy(0,0);
lcd_putchar(rx_buffer[0]);
lcd_putchar(rx_buffer[1]);
lcd_putchar(rx_buffer[2]);
lcd_putchar(rx_buffer[3]);
lcd_putchar(rx_buffer[4]);
lcd_putchar(rx_buffer[5]);
lcd_putchar(rx_buffer[6]);
lcd_putchar(rx_buffer[7]);
if(rx_buffer[0]=='*' && rx_buffer[7]=='#')
{
if(rx_buffer[1]=='W'||rx_buffer[1]=='w')
{
sprintf(buffer,"%c%c",rx_buffer[2],rx_buffer[3]);
add_data = atoi(buffer);
if(add_data == myadd)
{
sprintf(buffer,"%c%c", rx_buffer[4], rx_buffer[5]);
ch = atoi(buffer);
if(ch == 1)
{
if(rx_buffer[6]=='1') HAL_GPIO_WritePin(GPIOE, GPIO_PIN_0,GPIO_PIN_SET);

if(rx_buffer[6]=='0') HAL_GPIO_WritePin(GPIOE, GPIO_PIN_0,GPIO_PIN_RESET);


}
else if(ch == 2)
{
if(rx_buffer[6]=='1') HAL_GPIO_WritePin(GPIOE, GPIO_PIN_1,GPIO_PIN_SET);
if(rx_buffer[6]=='0') HAL_GPIO_WritePin(GPIOE, GPIO_PIN_1,GPIO_PIN_RESET);
}
else if(ch == 3)
{
if(rx_buffer[6]=='1') HAL_GPIO_WritePin(GPIOE, GPIO_PIN_2,GPIO_PIN_SET);
if(rx_buffer[6]=='0') HAL_GPIO_WritePin(GPIOE, GPIO_PIN_2,GPIO_PIN_RESET);
}
else if(ch == 4)
{
if(rx_buffer[6]=='1') HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3,GPIO_PIN_SET);
if(rx_buffer[6]=='0') HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3,GPIO_PIN_RESET);
}
else if(ch == 5)
{
if(rx_buffer[6]=='1') HAL_GPIO_WritePin(GPIOE, GPIO_PIN_4,GPIO_PIN_SET);
if(rx_buffer[6]=='0') HAL_GPIO_WritePin(GPIOE, GPIO_PIN_4,GPIO_PIN_RESET);
}
else if(ch == 6)
{
if(rx_buffer[6]=='1') HAL_GPIO_WritePin(GPIOE, GPIO_PIN_5,GPIO_PIN_SET);
if(rx_buffer[6]=='0') HAL_GPIO_WritePin(GPIOE, GPIO_PIN_5,GPIO_PIN_RESET);
}
else if(ch == 7)
{
if(rx_buffer[6]=='1') HAL_GPIO_WritePin(GPIOE, GPIO_PIN_6,GPIO_PIN_SET);
if(rx_buffer[6]=='0') HAL_GPIO_WritePin(GPIOE, GPIO_PIN_6,GPIO_PIN_RESET);
}
else if(ch == 8)
{
if(rx_buffer[6]=='1') HAL_GPIO_WritePin(GPIOE, GPIO_PIN_7,GPIO_PIN_SET);
if(rx_buffer[6]=='0') HAL_GPIO_WritePin(GPIOE, GPIO_PIN_7,GPIO_PIN_RESET);
}
}
}
}
}
}
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
HAL_UART_Receive_IT(&huart1,&rx_data,1);
if(rx_data == '*' || rx_data==RX_BUFFER_SIZE)
rx_index = 0;
rx_buffer[rx_index] = rx_data;
rx_index++;
}
void SystemClock_Config(void)
{
RCC_OscInitTypeDef RCC_OscInitStruct;
RCC_ClkInitTypeDef RCC_ClkInitStruct;
__PWR_CLK_ENABLE();
__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
RCC_OscInitStruct.HSEState = RCC_HSE_ON;

RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
RCC_OscInitStruct.PLL.PLLM = 8;
RCC_OscInitStruct.PLL.PLLN = 336;
RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
RCC_OscInitStruct.PLL.PLLQ = 4;
HAL_RCC_OscConfig(&RCC_OscInitStruct);
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1
|RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;
HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5);
HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);
HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);
/* SysTick_IRQn interrupt configuration */
HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
}
void MX_USART1_UART_Init(void)
{
huart1.Instance = USART1;
huart1.Init.BaudRate = 9600;
huart1.Init.WordLength = UART_WORDLENGTH_8B;
huart1.Init.StopBits = UART_STOPBITS_1;
huart1.Init.Parity = UART_PARITY_NONE;
huart1.Init.Mode = UART_MODE_TX_RX;
huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
huart1.Init.OverSampling = UART_OVERSAMPLING_16;
HAL_UART_Init(&huart1);
}
void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
/* GPIO Ports Clock Enable */
__GPIOE_CLK_ENABLE();
__GPIOH_CLK_ENABLE();
__GPIOD_CLK_ENABLE();
__GPIOB_CLK_ENABLE();
GPIO_InitStruct.Pin = GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5
|GPIO_PIN_6|GPIO_PIN_7|GPIO_PIN_0|GPIO_PIN_1;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3
|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FAST;
HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
}

VII.

ANALISA

Format data yang digunakan sebagai berikut :


Format
Karakter ke Buffer

*
1
0

W M M C
2 3 4 5
1 2 3 4

C
6
5

D
7
6

#
8
7

Keterangan :
M
= Address Mikrokontroler
C
= Channel
D
= Data : 1 = ON, 0 = OFF
if(rx_buffer[0]=='*' && rx_buffer[7]=='#')
Merupakan proses seleksi pertama dari format data yang diterima oleh Mikro.
Statement diatas akan mengecek apakah pada format data yang dikirim diawali dengan
tanda * (Bintang) dan diakhiri dengan tanda # (Pagar) atau tidak. Apabila bernilai
salah, maka program tidak akan melanjutkan ke instruksi selanjutnya. Statement diatas
sekaligus mengecek apakah format data yang dikirim lengkap atau tidak. Karena *
terletak pada buffer ke-0 dan # terletak pada buffer ke-7, maka banyaknya karakter
pada format data adalah 8 buah karakter.
if(rx_buffer[1]=='W'||rx_buffer[1]=='w')
Statement diatas akan mengecek apakah karakter kedua dari format data yang diterima
adalah huruf W (Kapital) atau w (Non Kapital)
sprintf(buffer,"%c%c",rx_buffer[2],rx_buffer[3]);
Statement diatas berfungsi untuk memasukkan isi dari buffer[2] dan buffer[3] ke
dalam variabel buffer Misal : Jika buffer[2] = 0 dan buffer[3] = 1, maka pada
variabel buffer berisi 1. Buffer 2 dan 3 merupakan alamar dari mikrokontroler.
add_data = atoi(buffer);
statement atoi berfungsi merubah tipe data character ke integer. Isi dari variabel buffer
adalah karakter dan hendak di masukkan ke dalam variabel add_data yang bertipe
data integer. Sehingga dalam hal ini memerlukan adanya konversi dari char ke int.
if(add_data == myadd)
Proses seleksi apakah alamat mikrokontroler yang dituju sesuai dengan
mikrokontroller yang digunakan . Jika bernilai benar, akan dilanjutkan ke statement
berikutnya.
sprintf(buffer,"%c%c", rx_buffer[4], rx_buffer[5]);
Statement diatas berfungsi untuk memasukkan isi dari buffer[4] dan buffer[5] ke
dalam variabel buffer Misal : Jika buffer[4] = 0 dan buffer[5] = 2, maka pada
variabel buffer berisi 2. Buffer 4 dan 5 merupakan channel atau nomor relay yang
digunakan.
ch = atoi(buffer);
statement atoi berfungsi merubah tipe data character ke integer. Isi dari variabel buffer
adalah karakter dan hendak di masukkan ke dalam variabel ch yang bertipe data
integer. Sehingga dalam hal ini memerlukan adanya konversi dari char ke int.
if(ch == 1)

Proses seleksi channel atau nomor relay yang akan digunakan.


if(rx_buffer[6]=='1') HAL_GPIO_WritePin(GPIOE, GPIO_PIN_0,GPIO_PIN_SET);
Apabila data (karakter ke-7) berisi 1, maka mikrokontroler akan mengaktifkan relay.
if(rx_buffer[6]=='0') HAL_GPIO_WritePin(GPIOE, GPIO_PIN_0,GPIO_PIN_RESET);
Apabila data (karakter ke-7) berisi 0, maka mikrokontroler akan menonaktifkan relay.

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)


{
}
Fungsi interrupt pada USART.
HAL_UART_Receive_IT(&huart1,&rx_data,1);
Statement HAL pada USART untuk mengaktifkan penerimaan data. Data yang
diterima sebanyak 1 karakter, disimpan pada variabel rx_data, dan yang digunakan
adalah USART1

if(rx_data == '*' || rx_data==RX_BUFFER_SIZE)


rx_index = 0;
Jika USART menerima karakter * atau jika variabel rx_data bernilai 16 (penuh), maka
rx_index akan dikembalikan pada nilai 0.
rx_buffer[rx_index] = rx_data;
Isi dari variabel rx_data dimasukkan ke dalam variabel rx_buffer[rx_index]
rx_index++;
nilai rx_index akan bertambah 1.

VIII. KESIMPULAN
Salah satu tool untuk membuat User Interface adalah Visual Studio dengan
menggunakan bahasa C#
Komunikasi peer to peer antara dua hardware dapat menggunakan komunikasi serial
menggunakan RS-232. Saat pembuatan Form perlu ditambahkan serialport sebagai
syarat jika ingin menggunakan komunikasi serial.
Format data antara Software Pengirim dan program pada mikrokontroler harus sama.
Begitu pula dengan setting parameter komunikasi.

Anda mungkin juga menyukai