Dasar Mikrokontroler AVR 5 Serial Port ATMega8535

Dasar Mikrokontroler AVR 5 Serial Port ATMega8535

USART (Universal Synchronous and Asynchronous Serial Receiver and Transmitter)

Blok Diagram USART terdiri dari 3 bagian yaitu:

–          Clock Generator yang terdiri dari synchronization logic, baud rate generator dan XCK pin (untuk mode synchronous)

–          Transmitter yang terdiri dari serial buffer, serial shift register, parity generator dan control logic yang mengatur format serial.

–          Receiver yang terdiri dari data recovery, parity checker, shift register dan serial buffer.

Berdasarkan clocknya USART ATMega8535 terbagi menjadi 4 mode yaitu:

  1. Normal Asynchronous
  2. Double Speed Asynchronous
  3. External Clock
  4. Synchrononous Clock Operation

Tampak pada gambar di atas bahwa baud rate dari internal clock diatur oleh Pre Scaler yang diberi nilai dari register UBRR dan untuk external clock diatur melalui XCK pin yang disinkronkan dengan osilator dan dikondisikan oleh Edge Detector.

Untuk perhitungan nilai baudrate digunakan rumus sebagai berikut

Insialisasi USART

Sebelum digunakan USART terlebih dahulu harus diinisialisasi, hal ini dilakukan dengan memberikan nilai-nilai awal pada register-register fungsi khusus yang mengatur USART. Untuk itu terlebih dahulu kita harus mengenali register-register tersebut.

Bit 7 – RXC: USART Receive Complete

Bit ini akan set pada saat ada data yang belum terbaca dan akan clear saat data telah terbaca. Bit ini juga akan clear apabila RXEN (RX Enable) dimatikan. Bit ini juga dapat membangkitkan Receive Complete Interrupt

Bit 6 – TXC: USART Transmit Complete

Bit ini akan set saat data yang ada di Transmit Shift Register terkirim keluar. Bit ini akan clear secara otomatis saat Transmit Complete Interrupt dieksekusi atau juga dapat dengan menuliskan logic 1 di posisi bit tersebut. Bit ini juga dapat membangkitkan Transmit Complete Interrupt

Bit 5 – UDRE: USART Data Register Empty

Flag ini mengindikasikan bahwa USART Data Register telah siap untuk menerima data baru. UDRE Flag juga dapat membangkitkan Data Register Empty Interrupt

Bit 4 – FE: Frame Error

Bit ini akan set apabila terjadi Framing error saat menerima data. Selalu tuliskan 0 pada bit ini saat menulis ke UCSRA

Bit 3 – DOR: Data OverRun

Bit ini akan set apabila terjadi OverRun yaitu kondisi di mana saat receive buffer penuh dan ada data baru yang akan masuk. Bit ini akan clear saat data di receive buffer dibaca. Selalu tuliskan 0 pada bit ini saat menulis ke UCSRA

Bit 2 – PE: Parity Error

Bit ini akan set apabila terdapat parity error saat menerima data dan kondisi parity checking UPM1=1. Bit ini akan clear saat receive buffer (UDR) dibaca. Selalu tuliskan 0 pada bit ini saat menulis ke UCSRA

Bit 1 – U2X: Double the USART Transmission Speed

Bit ini berfungsi untuk menggandakan kecepatan baudrate USART dengan menuliskan logika 1 pada bit ini maka baudrate akan dikali 2

Bit 0 – MPCM: Multi Processor Communication Mode

Bit ini berfungsi untuk komunikasi multiprocessor, apabila bit ini set maka data yang masuk di USART akan diabaikan apabila tidak memiliki informasi alamat yang sesuai

Bit 7 – RXCIE: RX Complete Interrupt Enable

Dengan menuliskan logika 1 pada bit ini maka RX Complete Interrupt akan aktif saat RXC Flag aktif dan Global Interrupt Flag di SREG aktif

Bit 6 – TXCIE: TX Complete Interrupt Enable

Dengan menuliskan logika 1 pada bit ini maka TX Complete Interrupt akan aktif saat TXC Flag aktif dan Global Interrupt Flag di SREG aktif

Bit 5 – UDRIE: USART Data Register Empty Interrupt Enable

Dengan menuliskan logika 1 pada bit ini maka Data Register Empty Interrupt akan aktif saat Data Register kosong dan Global Interrupt Flag di SREG aktif

Bit 4 – RXEN: Receiver Enable

Dengan menuliskan logika 1 pada bit ini maka Receiver di pin RXD akan aktif

Bit 3 – TXEN: Transmitter Enable

Dengan menuliskan logika 1 pada bit ini maka Transmitter di pin TXD akan aktif

Bit 2 – UCSZ2: Character Size

Bit ini akan dikombinasi dengan UCSZ1 dan UCSZ0 untuk mengatur ukuran data bit dalam satu frame pada transmitter atau receiver

Bit 1 – RX8: Receive Data Bit 8

Bit ini adalah data bit ke 9 pada komunikasi 9 bit dan akan terbaca lebih dahulu sebelum membaca low bit pada UDR

Bit 0 – TX8: Transmit Data Bit 8

Bit ini adalah bit ke 9 pada komunikasi 9 bit dan harus dituliskan terlebih dahulu sebelum menuliskan low bit pada UDR

Bit 7- URSEL: Register Select

Bit ini harus diset 1 pada saat akan menuliskan data pada UCSRC

Bit 6 – UMSEL: USART Mode Select

Bit ini berfungsi untuk mengatur mode USART, 0 = Asynchronous dan 1 = Synchronous

Bit 5:4 – UPM1:0 Parity Mode

Bit ini berfungsi untuk mengatur mode parity USART sesuai tabel berikut

Bit 3 – USBS: Stop Bit Select

Logika 0 pada bit ini untuk 1 stop bit dan logika 1 pada bit ini untuk 2 stop bit

Bit 2:1 – UCSZ1:0 Character Size

Bit ini dikombinasi dengan UCSZ2 pada UCSRB dan berfungsi untuk mengatur ukuran data dalam satu frame sesuai pada tabel berikut

Bit 0 – UCPOL: Clock Polarity

Bit ini berfungsi untuk mengatur polaritas XCK dan hanya digunakan pada mode Synchronous, untuk Mode Asynchronous sebaiknya dituliskan 0 pada bit ini.

Contoh program dibawah ini digunakan untuk komunikasi data serial asynchronous dengan baud rate 9600 bps. Karena menggunakan crystal 20 MHz maka agar diperoleh error terkecil maka digunakan mode Double Speed Asynchronous Operation dengan  perhitungan baudrate sebagai berikut:

Baud = fosc / (8 * (UBRR+1))

9600 = 20000000 / (8*(UBRR+1))

8*(UBRR+1) = 20000000/9600 = 2083,3

UBRR+1= 2083,3/8 = 260,4

UBRR = 260,4-1 = 259,4 atau dalam hexa 0x103

Oleh karena itu Register UBRRH diisi 01 dan UBRRL disi 03

Listing 4.1

#include<avr/io.h>

#include<util/delay.h>

 

#define FOSC 20000000                                              //Dari deklarasi ini akan diperoleh nilai

#define BAUD 9600                                                    //MYUBRR = 259 atau 0x103h

#define MYUBRR FOSC/8/BAUD-1                             //

 

void USART_INIT(unsigned int baud){

UBRRH=(unsigned char)(baud>>8);

UBRRL=(unsigned char)(baud);

UCSRA=0x02;

UCSRB=(1<<RXEN|1<<TXEN);

UCSRC=(1<<USBS|3<<UCSZ0|1<<URSEL);

}

void USART_Transmit(unsigned char data){

while(!(UCSRA&(1<<UDRE)));

UDR=data;

}

 

unsigned char USART_Receive (void){

while(!(UCSRA&(1<<RXC)));

return(UDR);

}

 

int main (void){

unsigned char data_serial;

USART_INIT(MYUBRR);

while(1){

data_serial=USART_Receive();

USART_Transmit(data_serial);

}

}

Pada program di atas, semua data yang diterima di USART Receiver (RXD) akan dikirimkan kembali ke USART Transmitter (TXD). Dengan menghubungkan port USART ATMega8535 ke DU-232 (Delta USB to Serial 232) maka semua data yang dikirimkan melalui Port USB PC lewat layar dump terminal akan ditampilkan kembali ke layar.

DELTA ELECTRONIC

Paulus Andi Nalwan, ST

Translate »