UART atau Universal Asynchronous Receiver Transmitter adalah protokol komunikasi yang umum digunakan dalam pengiriman data serial antara device satu dengan yang lainnya. Sebagai contoh komunikasi antara sesama mikrokontroler atau mikrokontroler ke PC. Dalam pengiriman data, clock antara pengirim dan penerima harus sama karena paket data dikirim tiap bit mengandalkan clock tersebut. Inilah salah satu keuntungan model asynchronous dalam pengiriman data karena dengan hanya satu kabel transmisi maka data dapat dikirimkan. Berbeda dengan model synchronous yang terdapat pada protokol SPI (Serial Peripheral Interface) dan I2C (Inter-Integrated Circuit) karena protokol membutuhkan minimal dua kabel dalam transmisi data, yaitu transmisi clock dan data. Namun kelemahan model asynchronous adalah dalam hal kecepatannya dan jarak transmisi. Karena semakin cepat dan jauhnya jarak transmisi membuat paket-paket bit data menjadi terdistorsi sehingga data yang dikirim atau diterima bisa mengalami error.

Namun, bukan error tersebut yang saya maksud. Ada error satu lagi yang disebabkan oleh paket bit data yang tidak pas dengan clock dari mikrokontroler. Paket bit data ini bergantung dari nilai baud rate dengan satuan bit per sekon. Untuk bisa mengetahui mengapa error tersebut bisa terjadi terlebih dahulu kita mengetahui format data dari UART.

Gambar di atas saya kutip dari datasheet AVR. Pada pengiriman data UART terdapat beberapa parameter yang dapat diatur yaitu start bit, parity bit, dan stop bit. Pengaturan ini harus sama antara pengirim dan penerima karena jika tidak maka data tidak akan diterima. Data yang dikirim adalah data berukuran 8 bit atau 1 byte. Jika ditambah dengan 3 parameter diatas maka total bit data yang dikirim adalah 11 bit. Dari format data inilah setiap data yang terbaca dapat diterjemahkan menjadi bit-bit yang merepresentasikan data tertentu.

Sebenarnya tidak semua terdapat error dalam pengiriman data UART. Terjadinya error hanya terjadi ketika kita menggunakan clock mikrokontroler untuk nilai tertentu saja. Pada paket data UART, clock yang dikirimkan bergantung dari nilai baud rate. Karena protokol ini universal, maka baud rate yang ada adalah nilai-nilai tetap yang tidak bisa diubah ubah dari kisaran nilai 110 sampai 11059200 bps (bit per sekon) atau lebih. Semakin cepat clock yang digunakan mikrokontroler/mikroprosesor maka baud rate akan semakin cepat juga.

Umumnya baud rate yang digunakan dalam pengiriman data antar mikrokontroler adalah 9600 bps. Karena dengan kecepatan pengiriman data ini sudah cukup. Kita akan menghitung error pada mikrokontroler dengan clock 11.059200 MHz. Sehingga register UBRR harus bernilai,

$UBRR=\frac{fosc}{16.BAUD-1}$

Sehingga nilai UBRR adalah 71. Sedangkan jika kita menggunakan clock yang berbeda yaitu 8 MHz, maka nilai register UBRR adalah 51.083. Nah inilah yang menyebabkan error pada pengiriman data UART. Kita akan coba menghitung error yang terjadi dengan membandingkan baudrate aktual dengan baudrate sebenarnya. Karena tipe data register UBRR bukan float maka nilai 51.083 dibulatkan menjadi 51. Sehingga kita dapat menghitung nilai aktual dari baud rate.

$BAUD=\frac{fosc}{(16.(UBRR+1))}$

Diperoleh nilai baud rate-nya adalah 9615.38 bps. Dengan membandingkan nilai baud rate awal yaitu 9600 bps maka kita dapat menghitung error tersebut

$\% error=\frac{BAUD_{aktual}-BAUD_{awal}}{BAUD_{awal}} .100\%$

Maka nilai persen error yang diperoleh adalah 0.160%. Hasil yang sama jika kita menggunakan AVR Calculator (coba di sini)

Nampaknya nilai error yang terjadi sangat kecil dan untuk terjadi error pada data yang dikirim juga akan jarang. Ya, untuk data-data yang tidak banyak ini tidak menjadi masalah yang berarti. Coba bayangkan untuk kasus di atas jika data yang dikirim sejumlah 8 Kbyte maka kemungkinan data error adalah sekitar 13 byte. Apa jadinya jika data yang dikirimkan adalah berupa data .hex untuk memory flash mikrokontroler. Bayangkan saja? Semoga bermanfaat.

download versi pdf