Anda di halaman 1dari 16

Aplikasi USART

Kendali Gerbang DAM dengan Mikrokontroller dan monitoring


Status DAM pada Visual Basic 6

By Indra Wahyudi / 1303121014
D3 A Teknik Elektro Industri PENS


Selain timer, fitur dan fasilitas yang terdapat dalam mikrokontroler AVR yang sering
digunakan adalah USART. USART (Universal Synchronous Asynchronous serial Receiver and
Transmitter) merupakan protokol komunikasi serial yang terdapat pada mikrokontroler AVR. Dengan
memanfaatkan fitur ini kita dapat berhubungan dengan dunia luar. Dengan USART kita bisa
menghubungkan mikrokontroler dengan PC, hape, GPS atau bahkan modem, dan banyak lagi
peralatan yang dapat dihubungkan dengan mikrokontroler dengan menggunakan fasilitas USART.
Komunikasi dengan menggunakan USART dapat dilakukan dengan dua cara yaitu dengan
mode sinkron dimana pengirim data mengeluarkan pulsa/clock untuk sinkronisasi data, dan yang
kedua dengan mode asinkron, dimana pengirim data tidak mengeluarkan pulsa/clock, tetapi untuk
proses sinkronisasi memerlukan inisialisasi, agar data yang diterima sama dengan data yang
dikirimkan. Pada proses inisialisasi ini setiap perangkat yang terhubung harus memiliki baud rate
(laju data) yang sama. Pada mikrokontroler AVR untuk mengaktifkan dan mengeset komunikasi
USART dilakukan dengan cara mengaktifkan register2 yang digunakan untuk komunikasi USART.
Register2 yang dipakai antara lain yaitu :
1. Register Data (UDR), menyimpan data yg dikirim dan diterima.
2. Register Control (UCSRA,UCSRB danUCSRC).
Penggunaan USART untuk komunikasi antar mikrokontroler adalah dengan menghubungkan
pin RX pada TX lawan dan pin TX pada RX lawan. Begitu pula jika mikrokontroler berkomunikasi
dengan PC. Akan tetapi, karena level teganan pada PC berbeda dengan mikrokontroler maka
dibutuhkan suatu rangkaian untuk menyesuaikannya. Biasanya digunakan rangkaian standar RS232
atau dikenal konektor RS232.


Gambar diatas merupakan salah satu contoh penggunaan USART pada Atmega 128 sebagai
Kendali Gerbang DAM dan monitoring Status DAM pada Visual Basic 6. Jadi USART berfungsi
menghubungkan antara Mikrokontroller Unit dengan software VB6 yang ada di PC atau laptop kita.
LCD pada MCU(Mikrokontroller Unit) berfungsi menampilkan nilai ketinggian air pada sensor sungai
dan sensor waduk. LED merah, hijau dan biru digunakan sebagai kode keamanan saja dan juga
Buzzer sebagai tanda keamaan saat sungai dan waduk telah full air dan banjir terjadi . Untuk meng
ON/OFF kan motor digunakan lah relay. Terdapat dua motor dalam program. Motor input yang
berfungsi untuk mengendalikan gerbang air DAM terbuka atau tertutup yang mengalir dari sungai ke
waduk. Dan motor output yang berfungsi mengendalikan gerbang air DAM terbuka atau tertutup
yang mengalir dari waduk ke sungai.
Jadi tujuan dari MCU ini adalah untuk penanggulangan otomatis ketinggian air sungai agar
tidak meluap saat terjadi hujan dan menyebabkan banjir yang kemudian akan mengalir ke
pemukiman warga. Selain mengotrol ketinggian air sungai, ketinggian waduk pun juga dijaga agar
tetap dapat menampung air luapan saat banjir.






Wiring diagram untuk simulasi proteus dari program diatas adalah sebagai berikut :

Gambar Wiring diagram pada proteus
Selain itu pada Chip Atmega 128 juga harus di klik dua kali dan di set sebagai berikut :

Setting tersebut bertujuan agar USART berfungsi sempurna dan dapat mentransmit data data ke
VB6.
Membuat Program CodeVision AVR
Untuk membuat program seperti diatas maka Chip, LCD, ADC, dan USART harus disetting
terlebih dahulu Code Wizzard AVR nya seperti dibawah ini :
1. Setting agar LCD dapat menampilkan fitur float, klik toolbar Project- configure- C Compiler

2. Setting Chip




3. Setting LCD pada PORTA




4. Setting ADC AVCC pin, clock 1000kHz, tanpa interrupts



5. Setting USART


Pada program ini USART disetting baud rate 9600, dengan mode asynchronous dan
communicarion parameters nya 8 Data, 1 Stop, No parity. Setelah CodeWizzard AVR sudah
disetting maka program C nya adalah :

/*****************************************************
This program was produced by the
CodeWizardAVR V2.05.3 Standard
Automatic Program Generator
Copyright 1998-2011 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com

Project : Anti Banjir
Version :
Date : 22/04/2014
Author : Indra Wahyudi
Company : EEPIS
Comments:


Chip type : ATmega128
Program type : Application
AVR Core Clock frequency: 8,000000 MHz
Memory model : Small
External RAM size : 0
Data Stack size : 1024
*****************************************************/

#include <mega128.h>
#include <delay.h>


// Alphanumeric LCD functions // inisialisasi LCD
#include <alcd.h>

// Standard Input/Output functions
#include <stdio.h>

#define ADC_VREF_TYPE 0x40 //inisialisasi ADC
#define lred PORTC.3
#define lblue PORTC.4
#define lgreen PORTC.5
#define motor PORTC.6
#define alarm PORTC.7
#define out PORTC.2
// Read the AD conversion result
unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCW;
}

// Declare your global variables here

void main(void)
{
// Declare your local variables here
float sungai,waduk;
unsigned char aman[20];
unsigned char buff[20];

// 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=0x00;

// Port B 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
PORTB=0x00;
DDRB=0x00;

// Port C initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out
Func0=Out
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTC=0x00;
DDRC=0xFF; // PORTC digunakan sebagai output LED, Buzzer dan Motor sehingga harus
diset 0xFF

// Port D 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
PORTD=0x00;
DDRD=0x00;

// Port E 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
PORTE=0x00;
DDRE=0x00;

// Port F 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
PORTF=0x00;
DDRF=0x00;

// Port G initialization
// Func4=In Func3=In Func2=In Func1=In Func0=In
// State4=T State3=T State2=T State1=T State0=T
PORTG=0x00;
DDRG=0x00;

// konfigurasi register register dari USART
// USART0 initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART0 Receiver: On
// USART0 Transmitter: On
// USART0 Mode: Asynchronous
// USART0 Baud Rate: 9600
UCSR0A=0x00;
UCSR0B=0x18;
UCSR0C=0x06;
UBRR0H=0x00;
UBRR0L=0x33;

// USART1 initialization
// USART1 disabled
UCSR1B=0x00;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

// ADC initialization
// ADC Clock frequency: 1000,000 kHz
// ADC Voltage Reference: AVCC pin
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x83;

// SPI initialization
// SPI disabled
SPCR=0x00;

// TWI initialization
// TWI disabled
TWCR=0x00;

//INISIALISASI LCD
// Alphanumeric LCD initialization
// Connections are specified in the
// Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
// RS - PORTA Bit 0
// RD - PORTA Bit 1
// EN - PORTA Bit 2
// D4 - PORTA Bit 4
// D5 - PORTA Bit 5
// D6 - PORTA Bit 6
// D7 - PORTA Bit 7
// Characters/line: 20
lcd_init(20);

while (1)
{

sungai=(float)read_adc(0)*5/1023; //membaca sensor dari ADC 0. Angka 5 merupakan
maximum ketinggian sungai dan 1023 merupakan max dari variable resistor

waduk=(float)read_adc(1)*15/1023; //membaca sensor dari ADC 1. Angka 15
merupakan maximum ketinggian waduk dan 1023 merupakan max dari variable resistor
lcd_gotoxy(0,0);
lcd_putsf("Ket sungai:");
lcd_gotoxy(0,1);
lcd_putsf("Ket Waduk : ");
lcd_gotoxy(13,0);
sprintf(buff,"%3.2f",sungai); // menampilkan nilai pembacaan ADC 0 pada LCD
lcd_puts(buff);
lcd_gotoxy(13,1);
sprintf(buff,"%3.2f",waduk); // menampilkan nilai pembacaan ADC 1 pada LCD
lcd_puts(buff);
printf("%3.2f%3.2f\r",sungai,waduk); // printf berfungsi mengirim data ke USART dan
agar VB6 dapat menerima data

lcd_gotoxy(18,0);
lcd_putsf("M");
lcd_gotoxy(18,1);
lcd_putsf("M");
delay_ms(100);

if (sungai<=3.5 && waduk<12)
{
motor=0;
out=0;
lgreen=1;
lred=0;
lblue=0;
alarm=0;
lcd_gotoxy(0,2);
lcd_putsf("Status: Aman ");
lcd_gotoxy(0,3);
lcd_putsf("Gb DAM: Tertutup ");
// aman = 'Aman';
printf("%3.2f%3.2fTertutupAman\r",sungai,waduk);
delay_ms(100);
//printf("Aman\r\n");
}

if (sungai<=3.5 && waduk>=12)
{
motor=0;
out=1;
lgreen=1;
lred=0;
lblue=0;
alarm=0;
lcd_gotoxy(0,2);
lcd_putsf("Status: Aman ");
lcd_gotoxy(0,3);
lcd_putsf("Gb DAM: OUT ");
printf("%3.2f%3.2fOUT Aman\r",sungai,waduk); // mengirim ke USART, data update
setelah if (sungai<=3.5 && waduk>=12) terpenuhi
delay_ms(100);
}

if (sungai>3.5 && waduk<12)
{
motor=1;
out=0;
lgreen=1;
lred=0;
lblue=0;
alarm=0;
lcd_gotoxy(0,2);
lcd_putsf("Status: Aman ");
lcd_gotoxy(0,3);
lcd_putsf("Gb DAM: Terbuka ");
printf("%3.2f%3.2fTerbuka Aman\r",sungai,waduk);
delay_ms(100);
}

if (sungai>3.5 && waduk>=12&& waduk<= 14)
{
motor=1;
out=0;
lgreen=0;
lred=0;
lblue=1;
alarm=0;
lcd_gotoxy(0,2);
lcd_putsf("Status: Waspada ");
lcd_gotoxy(0,3);
lcd_putsf("Gb DAM: Terbuka ");
printf("%3.2f%3.2fTerbuka Waspada\r",sungai,waduk);
delay_ms(100);
}

if (sungai>3.5 && waduk>14)
{
motor=1;
out=0;
lgreen=0;
lred=1;
lblue=0;
alarm=1;
lcd_gotoxy(0,2);
lcd_putsf("Status: Banjir, LARI");
lcd_gotoxy(0,3);
lcd_putsf("Gb DAM: Terbuka ");
printf("%3.2f%3.2fTerbuka Banjir, Lari !!\r",sungai,waduk);
delay_ms(100);
}
}
}























Membuat program Visual Basic 6
1. Desain terlebih dahulu form nya seperti berikut


2. Tambahkan juga component MSComm dan Timer


3. Code program VB6 nya

Dim data, kata As String deklarasi variabel yang digunakan
Dim sungai, waduk As Variant deklarasi variabel yang digunakan
Dim nilai As Integer deklarasi variabel yang digunakan


Private Sub Command1_Click() saat command 1 di klik/ tombol connect
If MSComm1.PortOpen = False Then MSComm1.PortOpen = True
Command1.Enabled = False
Command2.Enabled = True


End Sub

Private Sub Command2_Click() saat command2 di klik/tombol disconnect
If MSComm1.PortOpen = True Then MSComm1.PortOpen = False
Command1.Enabled = True
Command2.Enabled = False
End Sub

Private Sub Command3_Click() saat command3 d klik/tombol exit
If MSComm1.PortOpen = True Then MSComm1.PortOpen = False
Unload Me
End Sub



Private Sub Form_Load()
saat form pertama kali d load maka akan melakukan perintah sesuai program dibawah
Command2.Enabled = False
With MSComm1
.InputLen = 1
.RThreshold = 1
.Settings = "9600,n,8,1"
.CommPort = Text3.Text
End With
End Sub



Private Sub MSComm1_OnComm()
mscomm menerima data dari USART Mikrokontroller
data = data + MSComm1.Input
If InStr(data, vbCr) Then
Label6.Caption = Mid$(data, 1, 4)
Label10.Caption = Mid$(data, 5, 5)
Label11.Caption = Mid$(data, 10, 8)
Label9.Caption = Mid$(data, 18, 25)
sungai = Val(Label6.Caption)
waduk = Val(Label10.Caption)
data = ""
End If
End Sub



Private Sub Timer1_Timer()
Perubahan warna shape sesuai nilai variable sungai
If sungai <= 3.5 And waduk < 12 Then
Shape1.FillColor = vbGreen
ElseIf sungai <= 3.5 And waduk >= 12 Then
Shape1.FillColor = vbGreen
ElseIf sungai > 3.5 And waduk < 12 Then
Shape1.FillColor = vbGreen
ElseIf sungai > 3.5 And waduk >= 12 And waduk <= 14 Then
Shape1.FillColor = vbBlue
ElseIf sungai > 3.5 And waduk > 14 Then
Shape1.FillColor = vbRed
End If
End Sub


Ketika desain proteus, program C pada codevision, dan program VB6 siap maka untuk
mensimulasikan masih butuh software tambahan sebagai virutal port. Disini digunakan Virtual Serial
Port Driver Eltima Software sebagai pembuat virtual PORT nya.


Tanda merah menunjukkan virtual port yang terhubung. Setelah semua siap maka program aplikasi
USART siap untuk di simulasikan. Berikut adalah hasil simulasinya :
1. Kondisi belum di nyalakan dan belum terkoneksi


2. Sudah terkoneksi dan buzzer berbunyi karena level ketinggian air sungai dan waduk telah
melewati batas maksimal.

Anda mungkin juga menyukai