Tutorial Komunikasi Serial
Tutorial Komunikasi Serial
MAKALAH MIKROKONTROLER
USART
NAMA
: Rizkia Pratama
NRP
: 1303121044
KELAS
: 2 D3 ELIN B
MICROCONTROLLER
USART
(Universal Synchronous and Asynchronous serial Receiver and
Transmitter)
A. Pengertian
USART (Universal Synchronous and Asynchronous serial Receiver
and Transmitter) merupakan salah satu perangkat yang digunakan
untuk melakukan komunikasi serial dari mikrokontroler ATMega 128.
Berikut adalah bagian dari mikrokontroler sebagai berikut :
2 Independent
Full Duplex
Synchronous and Asynchronous
5,6,7,8,9 data bits + 1,2 stop bits
Even or Odd Parity , Parity check v HW
Interrupts : TX Compete, TX DRE, RX complete
MICROCONTROLLER
Dan berikut adalah blok diagram dari USART ATMega128 :
MICROCONTROLLER
Dan berikut adalah setting registry USART
USART0
Keterangan
Receiver
Transmitter
Untuk
:Untuk
data
menerima
serial
secara
interrupt
Tx Interrupt
:Untuk mengirimkan
data
serial
secara
interrupt
Baud Rate :Untuk
kecepatan
Communication Parameters :
8Data
1 Stop
No Party
= Tanpa pemeriksaan
Mode Asynchronous
= pengiriman/ penerimaan
data secara
MICROCONTROLLER
USART1
Keterangan
Receiver
Transmitter
Untuk
:Untuk
data
menerima
serial
secara
interrupt
Tx Interrupt
:Untuk mengirimkan
data
serial
secara
interrupt
Baud Rate :Untuk
kecepatan
Communication Parameters :
8Data
1 Stop
No Party
= Tanpa pemeriksaan
Mode Asynchronous
= pengiriman/ penerimaan
data secara
MICROCONTROLLER
#ifndef TXB8
#define TXB8 0
#endif
Politeknik Elektronika Negeri Surabaya | Jln.Raya ITS
MICROCONTROLLER
#ifndef UPE
#define UPE 2
#endif
#ifndef DOR
#define DOR 3
#endif
#ifndef FE
#define FE 4
#endif
#ifndef UDRE
#define UDRE 5
#endif
#ifndef RXC
#define RXC 7
#endif
MICROCONTROLLER
#define DATA_REGISTER_EMPTY (1<<UDRE)
#define RX_COMPLETE (1<<RXC)
((status
&
(FRAMING_ERROR
PARITY_ERROR
DATA_OVERRUN))==0)
return data;
}
}
#pragma used-
MICROCONTROLLER
UDR1=c;
}
#pragma used-
// USART1 initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART1 Receiver: On
// USART1 Transmitter: On
// USART1 Mode: Asynchronous
// USART1 Baud Rate: 9600
UCSR1A=0x00;
UCSR1B=0x18;
UCSR1C=0x06;
UBRR1H=0x00;
UBRR1L=0x33;
MICROCONTROLLER
B. Permasalahan
Buatlah monitoring arus, tegangan dan duty cycle dari sistem
dibawah ini :
BOOST
BATTERY
CONVERTER
Current
Mosfet Switching by PWM
Voltage
MCU ATMEGA
128
COM 4
USART0
ADC0
COM 5
Incre
ase
Decr
ease
MICROCONTROLLER
C. Penyelesaian
1. Untuk
menyelesaikan
permasalahan
tersebut,
kita
perlu
MICROCONTROLLER
Lalu
pada
kotak
dialog
AVR
Chip
Type
pilihlah
AT90,
MICROCONTROLLER
Ada beberapa fitur yang akan kita aktifkan pada percobaan ini
antara lain Chip, PORT, Alphanumeric LCD, ADC, PWM dan USART-0.
Langkah awal adalah kita setting tab Chip sbb :
A. Tab Chip
Pada bagian ini digunakan untuk melakukan setting jenis chp
mkrokontroler dan frekuensi clock yang akan digunakan, yatu
chip ATMega 128.
Keterangan :
1. Chip
Digunakan
: ATMega128
untuk memilih jenis
mikrokontroler
yang
akan
chip
digunakan.
akan
mentrigger
dibangkitkan
mikrokontroler.
untuk
Frekuensi
agar
bisa
membuat
domain
MICROCONTROLLER
3. Program Type
: Application
Digunakan
untuk
memilih
jenis
pada
registry
input
maupun
bit
yang
akan
output
pada
Modulation)
PORTE.1
(Rx)
dan
PORTE.0
digunakan
(Tx)
untuk
dan
output
MICROCONTROLLER
// 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=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
PORTC=0x00;
DDRC=0x00;
// 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;
Politeknik Elektronika Negeri Surabaya | Jln.Raya ITS
MICROCONTROLLER
// 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;
C. Tab ADC
Digunakan
untuk
mengatur
setting
registry
agar
bisa
referensi
yang
masuk
ke
chip
frekuensi
dari
MICROCONTROLLER
dengan prescaler. Misal System
Clock
MHz.
dengan
adalah
8 MHz
=1 MHz .
8
digunakan
untuk
menampilkan
data
Alphanumeric
LCD
MICROCONTROLLER
Untuk
mengaktifkan
fture LCD
2. Controller Type
Jenis LCD yang
support
digunakan
Selector
digunakan
atau
menulis
data
dari D0 D7.
6. E
Enable
: untuk
mengaktifkan
MICROCONTROLLER
// D6 - PORTA Bit 6
// D7 - PORTA Bit 7
// Characters/line: 20
lcd_init(20);
E. Tab Timers
Pada percobaan kal ini, saya menggunakan Pulse Width Modulation
(PWM) dengan Timer0 dengan mode Phase Correct PWM untuk
pengaturan switching Mosfet pada Boost Converter. Setting-nya adalah
sebagai berikut :
Keterangan :
1.Clock Source
Untuk memilih tipe clock mikrokontroler
2.Clock Value
Melakukan setting untuk nilai clock value
hasil
pembagian
prescaler
3.Mode
Untuk
memiliih
antara
jenis
Fclk
PWM
dengan
yang
F. USART
MICROCONTROLLER
Pada bagan ini USART digunakan untuk melakukan komunika
serial dari CVAVR ke Visual Basic
Keterangan
Receiver
Transmitter
Untuk
:Untuk
data
menerima
serial
secara
interrupt
Tx Interrupt
:Untuk mengirimkan
data
serial
secara
interrupt
Baud Rate :Untuk
kecepatan
Communication Parameters :
8Data
1 Stop
No Party
= Tanpa pemeriksaan
Mode Asynchronous
= pengiriman/ penerimaan
data secara
G. Program C
#include <mega128.h>
#include <delay.h>
// Alphanumeric LCD functions
#include <alcd.h>
MICROCONTROLLER
// Standard Input/Output functions
#include <stdio.h>
#define ADC_VREF_TYPE 0x40
#define up PINB.0;
#define down PINB.1;
// 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;
}
void main()
{
float tegangan,arus,dutycycle;
unsigned char buff[20];
int
nilai[]={25.6,51.2,76.8,102.4,128,153.6,179.2,204.8,230.4,256,281.6,
307.2,332.8,358.4,384,409.6,435.2,460.8,486.4};
int i=0;
PORTB = 0x00;
DDRB = 0x10;
// 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;
// ADC initialization
// ADC Clock frequency: 1000.000 kHz
// ADC Voltage Reference: AVCC pin
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x83;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 1000.000 kHz
Politeknik Elektronika Negeri Surabaya | Jln.Raya ITS
MICROCONTROLLER
// Mode: Phase correct PWM top=0xFF
// OC0 output: Non-Inverted PWM
ASSR=0x00;
TCCR0=0x62;
TCNT0=0x00;
OCR0=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;
// 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)
{
tegangan=(float)read_adc(0)*250/1023;
arus=(float)read_adc(1)*10/1023;
lcd_gotoxy(0,0);
lcd_putsf("TEGANGAN :
V");
lcd_gotoxy(0,1);
lcd_putsf("ARUS
:
A");
lcd_gotoxy(11,0);
// putchar('#');
sprintf(buff,"%3.2f",tegangan);
lcd_puts(buff);
lcd_gotoxy(11,1);
// putchar('@');
sprintf(buff,"%3.2f",arus);
lcd_puts(buff);
if(PINB.0==1)
{
OCR0 = nilai[i];
dutycycle=(float)OCR0/512*100;
lcd_clear();
lcd_gotoxy(0,2);
lcd_putsf("Dutycycle:
%");
lcd_gotoxy(10,2);
sprintf(buff,"%3.2f",dutycycle);
lcd_puts(buff);
delay_ms(10);
Politeknik Elektronika Negeri Surabaya | Jln.Raya ITS
MICROCONTROLLER
i++;
}
if(PINB.1==1)
{
i--;
OCR0 = nilai[i];
dutycycle=(float)OCR0/512*100;
lcd_clear();
lcd_gotoxy(0,2);
lcd_putsf("Dutycycle :
%");
lcd_gotoxy(10,2);
sprintf(buff,"%3.2f",dutycycle);
lcd_puts(buff);
delay_ms(10);
}
printf("%3.2f@%3.2f#%3.2f$\r",tegangan,arus,dutycycle);
delay_ms(100);
}
}
>>Pemrograman Proteus
Setelah menyelesaikan program di codevision avr, kita coba
membuat simulasi pada Software Proteus 7.8. Langkahnya
adalah sebagai berkut :
Doubleklik icon ISIS pada desktop seperti dibawah ini :
MICROCONTROLLER
MICROCONTROLLER
Lalu pada pilhan program files, klik ikon folder dan akan
tampil pilihan sebagai berikut :
MICROCONTROLLER
MICROCONTROLLER
MICROCONTROLLER
Kemudian
sekarang
kita
bisa
membuat
listing
MICROCONTROLLER
End Sub
4. Klk 2 kali pada icon telepon
Isikan code sebagai berikut :
Private Sub MSComm1_OnComm()
a = a & MSComm1.Input
If InStr(a, vbCr) Then
Label1 = a
tegangan = InStr(Label1.Caption, "@")
If tegangan > 0 Then
Label2 = Mid$(Label1.Caption, 1, tegangan - 1) '***
tegangan
End If
arus = InStr(Label1.Caption, "#")
If tegangan > 0 Then
Label3 = Mid$(Label1.Caption, tegangan + 1, arus tegangan - 1) '*** arus
End If
Label3 = Mid$(Label1.Caption, tegangan + 1, 4)
dutycycle = InStr(Label1.Caption, "$")
Label4 = Mid$(Label1.Caption, arus + 1, 4) '*** dutycycle
a = ""
End If
End Sub
5. Klk 2 kali pada icon timer
Isikan code sebagai berikut :
Private Sub Timer_Timer()
If tegangan >= 230 Then
Shape1.FillColor = vbRed
Else
Shape1.FillColor = vbGreen
End If
If arus >= 5 Then
Shape2.FillColor = vbRed
Else
Shape2.FillColor = vbGreen
End If
End Sub
Dan setelah itu, pada timer, lakukan setting sebagai
berikut :
Politeknik Elektronika Negeri Surabaya | Jln.Raya ITS
MICROCONTROLLER
Isikan
nilai
interval
100 ms
MICROCONTROLLER
MICROCONTROLLER
MICROCONTROLLER
Jalankan Simulasi proteus, maka akan ditampilkan nilai Arus, Tegangan, dan
DutyCycle
Dan berikut adalah tampilan Output hasil komunikasi serial antara CVAVR dan
VB. Hasil Output akan menampilkan Serial data input, voltage, current dan
dutycycle
Politeknik Elektronika Negeri Surabaya | Jln.Raya ITS
MICROCONTROLLER