USART pada Mikrokontroler AVR

Selain timer, fitur dan fasilitas yang terdapat dalam mikrokontroler AVR yang sering digunakan adalah USART. USART (Universal Synchronous Asynchronous serial Receiver and Transmitter) merupakan protokol komunikasi serial yang terdapat pada mikrokontroler AVR. Dengan memanfaatkan fitur ini kita dapat berhubungan dengan “dunia luar”. Dengan USART kita bisa menghubungkan mikrokontroler dengan PC, hape, GPS atau bahkan modem, dan banyak lagi peralatan yang dapat dihubungkan dengan mikrokontroler dengan menggunakan fasilitas USART.

Komunikasi dengan menggunakan USART dapat dilakukan dengan dua cara yaitu dengan mode sinkron dimana pengirim data mengeluarkan pulsa/clock untuk sinkronisasi data, dan yang kedua dengan mode asinkron, dimana pengirim data tidak mengeluarkan pulsa/clock, tetapi untuk proses sinkronisasi memerlukan inisialisasi, agar data yang diterima sama dengan data yang dikirimkan.  Pada proses inisialisasi ini setiap perangkat yang terhubung harus memiliki baud rate (laju data) yang sama. Pada mikrokontroler AVR untuk mengaktifkan dan mengeset komunikasi USART dilakukan dengan cara mengaktifkan register2 yang digunakan untuk komunikasi USART. Register2 yang dipakai antara lain:

UDR : merupakan register 8 bit yang terdiri dari 2 buah dengan alamat yang sama, yang digunakan sebagai tempat untuk menyimpan data yang akan dikirimkan (TXB) atau tempat data diterima (RXB) sebelum data tersebut dibaca.

UCSRA: merupakan register 8 bit yang digunakan untuk mengendalikan mode komunikasi USART dan untuk membaca status yang sedang terjadi pada USART.

Bit RXC [status]—> akan “1” bila ada data di UDR (RXB) yang belum terbaca. Dapat digunakan untuk sumber interupsi, dengan mengeset RXCIE

Bit TXC[status]—> akan “1” bila ada data di UDR (TXB) yang sudah dikirimkan. Dapat digunakan untuk sumber interupsi, dengan mengeset TXCIE

Bit UDRE[status]—>akan “1” bila UDR siap untuk menerima data baru.

Bit U2X[kendali]—> diisi “1” bila kecepatan transmisi data ingin dinaikkan 2kali.

Bit MPCM[kendali]—>digunakan bila ingin menggunakan komunikasi multiprosesor.

UCSRB: merupakan register 8 bit yang digunakan untuk mengendalikan mode komunikasi USART dan untuk membaca status yang sedang terjadi pada USART.

Bit RXCIE[kendali]—>digunakan untuk mengaktifkan interupsi yang bersumber dari RXC.

Bit TXCIE[kendali]—>digunakan untuk mengaktifkan interupsi yang bersumber dari TXC.

Bit UDRIE[kendali]—>digunakan untuk mengaktifkan interupsi yang bersumber dari UDRE.

Bit RXEN[kendali]—>digunakan untuk mengaktifkan receiver.

Bit TXEN[kendali]—>digunakan untuk mengaktifkan transmitter.

Bit UCSZ2[kendali]—>digunakan untuk menentukan panjang data yang dikirim dalam sekali. Digunakan bersama2 dengan UCSZ1,UCSZ0 pada UCSRC.

Bit RXB8[status]—>digunakan sebagai penampung data ke 9 pada penerimaan data dengan 9 bit

Bit TXB8[status]—>digunakan sebagai penampung data ke 9 pada transmisi data dengan 9 bit

UCSC: merupakan register 8 bit yang digunakan untuk mengendalikan mode komunikasi USART dan untuk membaca status yang sedang terjadi pada USART.

Bit URSEL[kendali]—>digunakan untuk memilih register pada UCSRC dan UBRRH. Dua register ini memiliki alamat yang sama, sehingga untuk proses penulisan memerlukan bantuan URSEL. Bila URSEL=1, maka register yang diisi adalah UCSRC, sedangkan bila URSEL=0, register yang diisi adalah UBRRH. Tidak semua mikrokontroler AVR memiliki URSEL, karena ada yang memiliki register UBRRH dan UCSRC yang beda alamat

Bit UMSEL[kendali]—>bila “1”, maka mode yang dipilih adalah asinkron, “0”=sinkron

Bit USBS[kendali]—>bila “1”, maka stop bit berjumlah 2 bit

Bit UCSZ1,UCSZ0[kendali]—>bersama2 UCSZ2 digunakan untuk menentukan jumlah bit yang akan dikirimkan dalam sekali pengiriman data.

UBRRL,H: merupakan register 16 bit yang digunakan untuk mengatur laju data (baud rate) pada saat mode komunikasi asinkron.

Contoh USART untuk komunikasi asinkron antara mikrokontroler ATMEGA8535 dengan PC lewat hyperterminal dengan baud rate 19200 bps, 8 bit data, 1 bit stop, dengan menggunakan kristal 11,0592 MHz, adalah seperti dibawah ini:

.include”m8535def.inc”
.def    tmp            = r16
.def    txbyte            = r17
.def    rxbyte            = r18
.equ    fclock            = 11059200
.equ    baud_rate        = 19200
.equ    ubbr_value        = (fclock / (16*baud_rate)) – 1

.org    0x0000
rjmp    main

main:
ldi    tmp,low(ramend)
out    spl,tmp
ldi    tmp,high(ramend)
out    sph,tmp
ldi    r16,0xff
out     ddrb,r16
out     PORTB,r16

rcall    init_usart
cbi    portb,0

loop:
ldi    zl,low(2*msg)
ldi    zh,high(2*msg)
load:
lpm
mov    txbyte,r0
cpi    txbyte,0
breq    done
rcall    usart_tx
inc    zl
rjmp    load

done:
rjmp    done

;=============
; usart init
;=============
;=====================================
; konfigurasi usart
;=====================================
init_usart:
ldi    tmp,high(ubbr_value)    ; Set baud rate
out     UBRRH, tmp
ldi    tmp,low(ubbr_value)
out     UBRRL, tmp
ldi     tmp, (1<<RXEN)|(1<<TXEN); Enable Receiver and Transmitter
out     UCSRB,tmp
ldi     tmp, (1<<URSEL)|(3<<UCSZ0); Set frame format: 8data, 1stop bit
out     UCSRC,tmp
ret

;=====================
; usart transmit data
;=====================
usart_tx:
sbis     UCSRA,UDRE    ; Wait for empty transmit buffer
rjmp     usart_tx
out     UDR,txbyte    ; Put data into buffer, sends the data
ret

;======================
; usart receive data
;======================
usart_rx:
sbis     UCSRA, RXC    ; Wait for data to be received
rjmp     usart_rx
in     rxbyte, UDR    ; Get and return received data from buffer
ret

msg:
.db    “********** Welcome to ATMEGA8535 USART Test **********”,13,10,0

Pada program diatas untuk mengetahui apakah mikrokontroler bisa komunikasi dengan PC, bisa dilihat dengan bantuan hyperterminal. Agar bisa komunikasi, maka pada hyperterminal perlu mengeset baud rate seperti pada gambar dibawah:

Setelah mengeset, maka akan muncul layar seprti pada gambar dibawah:

Sebelum ada perangkat yang terdeteksi maka hyperterminal akan terus scanning baud rate sampai ditemukan komunikasi dengan baud rate yang sesuai. Bila mikrokontroler yang dipakai mengeluarkan data dengan baud rate yang sesuai dengan PC, maka akan mengeluarkan text seperti pada gambar dibawah:

Perlu diperhatikan, seringkali kita lupa untuk mengeset fusebit pada mikrokontroler, sehingga walaupun program sudah benar, namun pada hyperterminal tidak tertampil text seperti pada program. Untuk dapat berkomunikasi dengan menggunakan kristal 11.0592 MHz, maka fusebit yang digunakan adalah seperti pada gambar dibawah:

10 Balasan ke USART pada Mikrokontroler AVR

  1. mega mengatakan:

    Numpang tanya,
    Berdasarkan datasheet 8535 terdapat Multi-processor Communication Mode, apakah bisa satu master berkomunikasi ke beberapa slave (misal 4 slave), setting hardware adalah Tx master terhubung dengan Rx Slave (4 buah Rx slave), dan ini komunikasi satu arah saja, yaitu dari master ke slave.

    Terimakasih.

    bisa, coba baca postingan saya mengenai “komunikasi multiprosesor pada mikrokontroler AVR”, hanya saja, pada komunikasi multiprosesor ini hanya satu arah saja, dan bisa menangani slave sampai dengan 255.

  2. mega mengatakan:

    Ya kemarin buru2 post koment, eh ternyata udah ada. Penjelasannya sudah cukup lengkap, Terimakasih banyak.

    Salam.

  3. kyo mengatakan:

    mas, om, pak..
    nanya ya..
    kl dari matlab/simulink pengen ngirim data(float) ke avr, terus datanya diolah di avr, lalu hasilnya dibalikin ke matlab lagi, tau gak ya caranya?

    maaf belum pernah buat interface dari avr ke matlab maupun sebaliknya, tapi pernah ada temen yang ngirim data dari LPT (port paralel) untuk diolah di matlab, dia tinggal nyari library nya di internet

  4. kyo mengatakan:

    ok
    thanx

  5. adil mengatakan:

    mas saya mo tanya.
    klo usart di hyperteminal; satu huruf aja yang tampil. itu juga bukan huruf yang kita ketik.
    klo tau pemecahannya boleh tau apa masalahnya . terima kasih

    aku pernah ngalami masalah seperti itu. itu terjadi karena baud rate antara PC dan mikrokontroler tidak sama

  6. aditya mengatakan:

    mau nanya source code komunikasi multiprosesor mikro dengan mikro dengan bahasa C, soalnya saya pake codevision, tolong dikirim ke email saya ya mas. terima kasih bantuannya

  7. aditya mengatakan:

    jika mau ngirim data mikro to mikro secara serial dengan resolusi 10 bit bgaimana ….. mohon penjelasannya….atau kirim ke email saya…. terima kasih atas bantuannya

  8. agung mengatakan:

    saya menggabungkan ATmega 8535 dengan modem tcm3105, tapi masih binggung rangkaiannya.mohon bantuannya..atau kirim via email saya.trimakasih atas bantuannya

  9. and21 mengatakan:

    bos, saya mw buat project interfacing atMEGA8 dengan EG-T10 GPS Receiver Module MCX..

    cuma untuk mulai membuat codingnya bingung..ada saran kira2 yang harus saya pelajari apa?

    trims

    maaf untuk sementara belum bisa jawab karena belum pernah main2 pake GPS😀, tapi pernah ada temen yang pake GPS dengan mikro atmega8 untuk penentuan koordinat kapal, dia hanya menggunakan port UART, dan selebihnya hanya masalah protokolnya saja.

  10. dim24 mengatakan:

    bang. .
    cara mengirim data gambar ke mikon caranya bagaimana ?
    beserta contoh source codenya bang. kirim ke email . .terimakasih. .

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: