Você está na página 1de 10

PRAKTIKUM MIKROKONTROLLER

AVR USART
Pada modul ini peserta praktikum diharapkan mampu membuat program serial
komunikasi pada mkrokontroller AVR

UMSELn1
0
0
1
1

UMSELn0
0
1
0
1

Mode
Asynchronous USART
Synchronous USART
(Reserved)
(1)
Master SPI ( MSPIM )

Gambar 55: Mode USART


UPMn1
0
0
1
1

UPMn0
0
1
0
1
Gambar 56: Mode Parity

Parity Mode
Disabled
Reserved
Enabled, Even Parity
Enabled, Odd Parity

USBSn
0
1

Stop Bits(s)
1-Bit
2-Bit
Gambar 57: Mode stop bit

UCSZn2
0
0
0
0
1
1
1
1

Baud
rate
[bps]

UCSZn1
UCSZn0
0
0
0
1
1
0
1
1
0
0
0
1
1
0
1
1
Gambar 58: ukuran data

f osc = 16.0000Mhz

f osc = 18.4320Mhz

Character Size
5-Bit
6-Bit
7-Bit
8-Bit
Reserved
Reserved
Reserved
9-Bit

f osc = 20.0000Mhz

U2Xn=0

U2Xn=1

U2Xn=0

U2Xn=1

U2Xn=0

U2Xn=1

UBRR

UBRR

UBRR

UBRR

UBRR

UBR
R

Error

Error

Error

Error

Error

Error

832

0.0%

479

0.0%

959

0.0%

520

0.0%

1041

0.0%

207

0.1%
0.2%

416

239

0.0%

479

0.0%

259

0.2%

520

0.0%

9600
14.4K

103
68

0.2%
0.6%

207
138

119
79

0.0%
0.0%

239
159

0.0%
0.0%

129
86

0.2%

25
173

0.2%

-0.2%

19.2K
28.8K

51
34

103
68

59
39

0.0%
0.0%

119
79

0.0%
0.0%

64
42

0.2%
0.9%

129
86

0.2%

38.4K
57.6K

25
16

0.2%
0.8%
0.2%
2.1%

0.1%
0.2%
0.1%
0.2%
0.6%

29
19

0.0%
0.0%

59
39

0.0%
0.0%

32
21

-1.4%
-1.4%

64
42

0.2%
0.9%

76.8K
115.2K

12
8

25
16

14
9

0.0%
0.0%

29
19

0.0%
0.0%

15
10

1.7%
-1.4%

32
21

-1.4%
-1.4%

230.4K

0.2%
3.5%
8.5%

0.2%
0.8%
0.2%
2.1%

0.0%

0.0%

8.5%

10

-1.4%

250K

0.0%

3.5%
0.0%

7.8%

0.0%

0.0%

0.0%

0.5M

0.0%

0.0%

7.8%

0.0%

0.0%

1
2Mbps

0.0%

1.152Mbps

2400

416

4800

1M

(1) 1Mbps

Max

51
34

2.304Mbps

1.250Mbps

PERALATAN YANG DIGUNAKAN


#includeEclipse
<avr/io.h>
Software
#include <stdlib.h>
Plugins
Eclipse9600
#defineAVR
BAUDRATE
Toolset
#defineGCC-AVR
VBAUDRATEcompiler
(F_CPU/ ((unsigned long) BAUDRATE*16)-1)
#define
BAUDH
VBAUDRATE
256
AVR devlopment board Xtal/ 16
Mhz barled port A, pushbuttun 1
#define BAUDL

-0.2%

2.5Mbps

Gambar 59: contoh perhitungan baudrate

1.
2.
3.
4.

-0.2%

BAUDRATE % 256

Void USARInit (void);

PERCOBAAN
1-USART
Volatile unsigned
char USARTGetChar(void);
Void USARTPutChar (unsigned char data);
Void USARTPutStr (char*s);
1.Void
Pasang
modul arduino
USARTBanner(void);
main (void)
2.IntJalankan
eclipse{

3. Isi kode berikut pada main.c


USARTInit ();
USARTBanner();

While (1) {
USARTPutChar(USARTGetChar());
}
}
Void USARTInit (void) {
UBRR0H = BAUDH;
UBRR0L = BAUDL;
UCSR0B = (1<<RXEN0) | (1<<TXEN0);
UCSR0C = (0<<USB0) | (3<<UCSZ00);
}
Volatile unsigned char USARTGetChar(void) {
While (!(UCSR0A & (1<<RXC0)));
Return UDR0;
}
Void USARTPutChar(unsigned char data) {
While (!(UCSR0A & (1<<UDRE0)))
;
UDR0=data;
}
Void USARTPutStr(char*s) {
Char i =0;
Char c;
While ((c=*(s+(i++)))!=0)
USARTPutChar(c);
}
Void USARTBanner (void) {
USARTPutStr(\n\r);
USARTPutStr(****************************************\n\r);
USARTPutStr(*******test usart******************\n\r);
USARTPutStr(****************************************\n\r);
}

4. Lihat hasilnya
Tugas
1. Sekarang ganti kode program mengguakan 2 stop bit, 8bit data tanpa parity
2. Sekarang ganti kode program menggunakan 1 stop bit, 8 bit data,parity odd

PERCOBAAN 2-Membuat library USART


1. Pasang modul arduino
2. Jalankan eclipse
3. Isi kode berikut pada main.c
#include <stdlib.h>
#include "usart.h"
int main(void){
USARTInit();
USARTBanner();
(1){
4. Isiwhile
kode berikut
pada usart.h
USARTPutChar(USARTGetChar());
}
}
/*
* usart.h
*
* Created on: May 25, 2016
*
Author: dian sekar
*/
#ifndef USART_H_
#define USART_H_
#define BAUDRATE 9600
#define VBAUDRATE (F_CPU/ ((unsigned long) BAUDRATE*16)-1)
#define BAUDH VBAUDRATE /256
#define BAUDL VBAUDRATE % 256
void
USARTInit(void);
5. Isi
kode berikut pada usart.c
volatile unsigned char USARTGetChar(void);
void USARTPutChar(unsigned char data);
void USARTPutStr(char*s);
void USARTBanner(void);
#endif
#endif /* USART_H_ */

/*
* usart.c
*
* Created on: May 25, 2016
*
Author: dian sekar
*/
#include "usart.h"
#include <avr/io.h>
void USARTInit(void){
UBRR0H=BAUDH;
UBRR0L=BAUDL;
UCSR0B=(1<<RXEN0) | (1<<TXEN0);
UCSR0C=(0<<USBS0) | (3<<UCZ00);
}
volatile unsigned char USARTGetChar(void){
while (!(UCSR0A & (1<<RXC0)))
;
return UDR0;
}
void USARTPutChar(unsigned char data){
while (!(UCSR0A & (1<<UDRE0)))
;
UDR0=data;
}
/*
void USARTPutStr(char*s){
* main.c
char i=0;
6. *Lihat hasilnya
char c;
* Created
May 25, 2016
whileon:
((c=*(s+(i++)))!=0)
*
Author: dian USARTPutChar(c);
sekar
*/
}
#includevoid
<stdio.h>
USARTBanner(void){
#include <stdlib.h>
USARTPutStr("\n\r");
#include <ctype.h>
USARTPutStr("**************************\n\r");
#include <avr/io.h>
USARTPutStr("*****test usart ******\n\r");
#include <util/delay.h>
USARTPutStr("**************************\n\r");
}
#define
UART_BAUD_RATE 9600
}
#define UART_BAUD_REGISTERS (((F_CPU/ (UART_BAUD_RATE*16UL)))-1)
int uart_putchar(char c, FILE*stream);
void usartInit(void);
int main(void)
{
float number = 123.45;
usartInit();
while(1)
{
fprintf(&mystdout, "**fprintf Test \n\r");
_delay_ms(500);
fprintf(&mystdout, "%f\n\r", number);
Pasang modul_delay_ms(500);
arduino
printf("Hello World\n\r");
Jalankan eclipse
_delay_ms(500);
printf("%f\n\r",
Isi kode berikut
pada main.c number);
_delay_ms(500);
}
return 1;

Percobaan 3-using USART printf


1.
2.
3.

}
int uart_putchar(char c, FILE *stream)
{
if (c=='\n')
uart _putchar('\r', stream);
loop_until_bit_is_set(UCSR0A,UDRE0);
UDR0 = c;
return 0;
}
void usartInit(void)
{
UCSR0B |= (1<<RXEN0) | (1<<TXEN0);
UCSR0C |= (0<<USBS0) | (1<<UCSZ00) | (1<<UCSZ01);
UBRR0L = UART_BAUD_REGISTERS;
stdout = &mystdout;
}

4. Tambahkan pada eclipse dibagian linker option WI,-u,vfprintf, -Iprintf_flt

Nama Kelompok

Laporan Sementara

ACC :

1. Dian Sekar R
2. M. Nurul Qomar

Analisa Tugas
1 Stop bit, 8 data, tanpa parity
Pada praktikum dengan mengatur seperti 1 stop bit data dan tanpa parity didapatkan
hasil sinyal pada oscilloscope
111 0 10101010 1
Data
sebelumnya

start

Data
Karakter U

1 stop
bit

Jarak antara kotak pada oscilloscope pada karakter adalah 1 ms.

1 Stop bit, 8 data, odd parity


Pada praktikum diatur dengan odd parity maka didapatkan hasil sinyal pada
oscilloscope
111 0 10101010 1 1
Data
sebelumnya

start

Data
Karakter U

Odd
parity

1 stop
bit

Jadi seolah olah data 1 pada oscilloscope menjadi lebih panjang karena dekat dengan
stop bit. Jarak antara kotak pada oscilloscope pada karakter yaitu 1 ms.

1 Stop bit, 8 data, even parity

Pada praktikum diatur dengan even parity maka didapatkan hasil sinyal pada
oscilloscope
111 0 10101010 0 1
Data
sebelumnya

start

Even
parity

Data
Karakter U

1 stop
bit

Dengan jarak kotak pada oscilloscope pada karakter yaitu 1 ms.

2 Stop bit, 8 data, odd parity


Pada praktikum dengan 2 stop bit dan odd parity didapatkan hasil sinyal pada
oscilloscope
111 0 10101010 1 11
Data
sebelumnya

start

Odd
parity

Data
Karakter U

2 stop
bit

2 Stop bit, 8 data, even parity


Pada praktikum dengan 2 stop bit dan even parity dihasillkan sinyal pada oscilloscope
111 0 10101010 0 11
Data
sebelumnya

start

Even
parity

Data
Karakter U

2 stop
bit

2 Stop bit, 8 data, tanpa parity


Pada praktikum dengan 2 stop bit dan tanpa parity dihasillkan sinyal pada oscilloscope
111 0 10101010
Data
sebelumnya

start

Gambar Praktikum :

11

Data
Karakter U

1 Stop bit, 8 data, tanpa parity

2 Stop bit, 8 data, tanpa parity

2 stop
bit

1 Stop bit, 8 data, even parity

1 Stop bit, 8 data, odd parity

ANALISA :
UART atau Universal Asynchronous Receiver Transmitter adalah protokol
komunikasi dua arah yang umum digunakan dalam pengiriman data serial antara device
satu dengan yang lainnya. UART biasanya digunakan berupa sirkuit terintregasi yang
digunakan untuk komunikasi serial pada computer atau port serial peripheral. Sebagai
contoh lainnya seperti praktikum yang telah dilakukan yaitu komunikasi antar
mikrokontroler dengan computer maupun komunikasi mikro satu dengan mikro
lainnya. UART menggunakan mode asynchronous dimana dalam pengiriman data,
clock antara pengirim(Tx) dan penerima(Rx) harus sama karena paket data tiap bit
mengandalkan clock tersebut.
Sedangkan, pengertian dari USART atau Universal Synchronus Asynchronous
Receiver Transmitter adalah komunikasi serial yang fleksibilitas tinggi, yang dapat
digunakan untuk melakukan transfer data baik antar mikrokontroler maupun dengan
modul-modul eksternal termasuk PC yang memiliki fitur UART.Sebuah USART mirip
dengan universal asynchronous receiver / transmitter (UART), karena masing-masing
mendukung dan memberikan komunikasi serial.Namun, UART hanya mendukung
komunikasi serial asynchronous. USART memungkinkan transmisi data baik secara
syncrhronous maupun asyncrhronous, sehingga dengan memiliki USART pasti
kompatibel dengan UART.
Jika pada mode asyncrhronous masing-masing peripheral memiliki sumber
clock sendiri, maka pada mode syncrhronous hanya ada satu sumber clock yang
digunakan secara bersama-sama. Dengan demikian, secara hardware untuk mode
asyncrhronous hanya membutuhkan 2 pin yaitu TXD dan RXD, sedangkan untuk mode
syncrhronousharus 3 pin yaitu TXD, RXD dan XCK.
Terdapat beberapa register yang harus di aktifkan ketika pengaksesan USART,
yaitu dapat dilihat sbb :

AVR
UDR
UCSRA
UCSRB
UCSRC
UBRRH

UBRRL

R
TX
Register

Register Data :
menyimpan data yg
Register
Status
(bit 2 ~ bit 7)
dikirim dan
diterima

Register Control (bit 0 ~ bit 1)

Register 8 bit UBRRH


dan 8 bit UBRRL

Pada register UCSRB terdapat UCZn2 yang merupakan register control untuk
menentukan ukuran data, pada register UCSRC terdapat UCZn1 dan UCZn0 yang
merupakan sambungan dari UCZn2. Pada praktikum kita menggunakan ukuran data 8
bit maka kita set UCSZ2:UCSZ1:UCSZ0 = 011 (sesuai pada table 58).
Kita juga harus menentukan beberapa mode yang ada di register control, seperti
mode USART, mode Parity, mode stop bit. Semua mode tersebut dikontrol pada
register control di UCSRC. Dengan table yang sudah ada pada laporan pendahuluan
diatas.
Kita juga bisa menggunakan Register UCSRB dalam menggunakan USART,
namun disertai dengan proses interrupt dimana Global Interrupt Flag harus diclearkan
(dan interupsi dinonaktifkan secara global) ketika melakukan inisialisasi.
Pada hasil praktikum dibuat mode dengan menggunakan 1bit dan 2bit stop bit,
dan membandingkannya dengan melihat sinyal pada oscilloscope. Saat sebuah data
diberikan kepada UART untuk transmisi Asynchronous, "Bit Start" berlogika 0
ditambahkan pada setiap awal data yang akan ditransmisikan. Setelah Bit Start, bit
individu dari data yang dikirim, dengan sinyal bit terkecil yang pertama dikirim . Pada
praktikum, kita gunakan bit dengan ukuran 8bit. Dengan mode parity , odd parity dan
even parity. Bit parity merupakan biner yang ditambahkan untuk meyakinkan bahwa
jumlah bit yang dikirimkan mempunyai angka satu yang selaku genap atau ganjil atau
parity merupakan kode pengoreksi kesalahan(error correcting code).

KESIMPULAN :
1. UART menggunakan mode asynchronous, sedangkan USART memungkinkan
transmisi data baik secara syncrhronous maupun asyncrhronous.
2. Kelebihan UART yaitu, hanya menggunakan satu clock dalam mengirim data
sehingga hanya membutuhkan satu kabel transmisi maka data dapat dikirimkan.
Kelemahannya, UART rawan tehadap hal kecepatannya dan jarak transmisi.
3. Secara hardware untuk mode asyncrhronous hanya membutuhkan 2 pin yaitu TXD
dan RXD, sedangkan untuk mode syncrhronousharus 3 pin yaitu TXD, RXD dan
XCK.
4. Pada pengaksesan USART dan UART maka diperlukan kesepakatan dalam hal
mengirim dan menerima data dengan menggunakan Start Bit - Data Mode parity
Stop Bit.

Você também pode gostar