Home > Mikrokontroler, Tutorial > USART AVR

USART AVR

USART atau yang lebih dikenal dengan Universal Syncronous and Asyncronous Receiver Transmitter sangat handal dan berguna dalam berbagai project yang berhubungan dengan interface PC, misalnya program monitoring suhu ruangan menggunakan delphi, dan lain-lain. USART di ATMega8 memiliki beberapa fitur yaitu:

  • Full Duplex Operation with Independent Serial Receive and Transmit Registers);
  • Asynchronous or Synchronous Operation;
  • Master or Slave Clocked Synchronous Operation;
  • High Resolution Baud Rate Generator;
  • Data OverRun Detection;
  • Framing Error Detection;
  • Supports Serial Frames with 5, 6, 7, 8, or 9 Databits and 1 or 2 Stop Bits;
  • Odd or Even Parity Generation and Parity Check Supported by Hardware;
  • Multi-processor Communication Mode;
  • Double Speed Asynchronous Communication Mode;
  • Noise Filtering Includes False Start Bit Detection and Digital Low Pass Filter;
  • Three Separate Interrupts on TX Complete, TX Data Register Empty and RX Complete;

USART dipisahkan menjadi 3 bagian yaitu clock generator, Transmit, dan Receive. Mari kita bahas satu persatu:
1. Clock Generator
Clock generator tergantung pada mode data transfer, terdapat empat mode clock generator yang berbeda,yaitu:

  • normal asynchronous;
  • double speed asynchronous;
  • Master synchronous;
  • Slave synchronous.

Kebanyakan yang digunakan adalah asynchronous internal clock generator. Register Baud Rate (UBBR) digunakan dimana nilai yang diberikan untuk down counter. Setiap kali nilai down-counter mendekati nol, maka sebuah clock dibangkitkan. Kamu dapat menghitung berapa nilai UBRR yang akan kamu tulis tergantung dari baudrate yang kamu inginkan dan kecepatan dari MCU clock. Nilai UBBR dapat dihitung menggunakan formula: BAUD = fck/(16(UBBR+1)). Formula ini digunakan untuk Asynchronous normal mode jika menggunakan mode double speed maka formula yang digunakan adalah BAUD = fck/(8(UBBR+1)). Untuk lebih jelasnya mengenai double speed bisa dilihat sendiri di datasheet AVR🙂
Misalkan digunakan kecepatan MCU = 8 MHz dan baudrate yang diinginkan 9600, setelah dihitung menggunakan rumus diatas diperoleh nilai UBBR = 51.083333333, kita bulatkan UBBR = 51. Dengan nilai UBBR =51, maka nilai aktual boudrate adalah 9615, jika dibagi dengan 9600 diperoleh 1.0016 dan karena itu errornya adalah 0.16 %. Dengan error tersebut USART masih dapat bekerja tetapi tidak sempurna. Oleh karena itu biasanya digunakan kristal 7.3728 MHz sehingga akan memberikan nilai UBBR = 47 dan no error. Table yang menunnukkan variasi clock/baud dapat kamu temukan di datasheet AVR. Untuk mode Synchronous dan clock external melalui pin XCK dapat dilihat di datasheet🙂

2. USART Transmission
USART dapat melakukan transmit data dengan memberikan logika satu di bit TXEN ayng terdapat dalam register UCSRB. Operasi normal port akan diabaikan oleh USART. Ketika transmit sudah diaktifkan maka pin yang bersangkutan yaitu pinD1 tidak bisa digunakan dalam mode normal. Adapun program pada WinAVR yang menangani USART transmit sebagai berikut:
void USART_SendByte(uint8_t Data)
{
// Wait if a byte is being transmitted
while((UCSRA&(1<<UDRE)) == 0);
// Transmit data
UDR = Data;
}

3. USART Reception
USART Receiver dapat diaktifkan dengan memberikan logika satu pada bit RXEN yang terdapat dalam register UCSRB. Ketika USART receiver diaktifkan maka pin yang bersangkutan tidak bisa dioperasikan sebagai normal mode, pin yang dimaksud adalah pinD0. Berikut ini program WinAVR yang menangani USART Receive:
uint8_t USART_vReceiveByte()
{
// Wait until a byte has been received
while((UCSRA&(1<<RXC)) == 0) ;
// Return received data
return UDR;
}
Sebelum melakukan transfer data, maka ada beberapa hal yang perlu dipersiapkan yaitu baud rate, mode operasi dan format frame data yang akan dikirim. Antara receiver dan transmitter harus mempunyai setting yang sama. Data frame dari USART biasnya dimulai dengan bit START lalu di ikuti dengan data mulai dari 5 data sampai 9 data dan diakhiri dengan bit STOP bisa 1 atau 2 bit. Diantara data dan bit STOP biasanya ditambahkan parity sebanyak 1 bit. Parity berfungsi sebagai error cek dengan pilihan no parity, even, or odd parity.
Berikut ini diberikan contoh program USART:

  1. include
  2. include

// Define baud rate

  1. define USART_BAUD 115200ul
  2. define USART_UBBR_VALUE ((F_CPU/(USART_BAUD<>8);

UBRRL = (uint8_t)USART_UBBR_VALUE;
// Set frame format to 8 data bits, no parity, 1 stop bit
UCSRC = (0<<USBS)|(1<<UCSZ1)|(1<<UCSZ0);
// Enable receiver and transmitter
UCSRB = (1<<RXEN)|(1<<TXEN);
}
void USART_vSendByte(uint8_t u8Data)
{
// Wait if a byte is being transmitted
while((UCSRA&(1<<UDRE)) == 0);
// Transmit data
UDR = u8Data;
}
uint8_t USART_vReceiveByte()
{
// Wait until a byte has been received
while((UCSRA&(1<<RXC)) == 0);
// Return received data
return UDR;
}
int main(void)
{
uint8_t u8Data;
// Initialise USART
USART_vInit();
// Send string
USART_vSendByte(‘S’);
// Repeat indefinitely
for(;;)
{
// Echo received characters
u8Data = USART_vReceiveByte();
USART_vSendByte(u8Data);
}
}

Salam Hangat
Dayat Kurniawan

Categories: Mikrokontroler, Tutorial
  1. No comments yet.
  1. No trackbacks yet.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: