Escolar Documentos
Profissional Documentos
Cultura Documentos
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 )
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
-0.2%
2.5Mbps
1.
2.
3.
4.
-0.2%
BAUDRATE % 256
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{
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
/*
* 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;
}
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;
}
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
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.
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
start
Odd
parity
Data
Karakter U
2 stop
bit
start
Even
parity
Data
Karakter U
2 stop
bit
start
Gambar Praktikum :
11
Data
Karakter U
2 stop
bit
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
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.