Baca dulu posting :
- Komunikasi USART Mode Asinkron.
- Komunikasi USART : TTL - RS232.
Setelah membuat hardwarenya, sekarang tinggal Codingnya.
Saya hanya akan membahas penggunaan USART secara umum dengan protokol 9600,8N1 : Baud Rate 9600 bps (bit per second), 8 data bits, No Parity, 1 Stop bits.
Untuk penggunaan USART pada mikrokontroller AVR ATmega8535 diperlukan inisialisasi. Ada 2 cara inisialisasi yang dapat digunakan yaitu dengan menggunakan CodeWizardAVR dan dengan membuat fungsi sendiri.
Inisialisasi CodeWizardAVR
Konfigurasi gambar disamping adalah konfigurasi dasarnya tanpa interupsi dan single speed. Yang perlu diperhatikan yaitu nilai persentase Baud Rate Error-nya. Nilai-nilai kristal (Xtall) tertentu akan menghasilkan error yang cukup besar pada nilai baudrate tertentu, dan batas maksimal error yang diperbolehkan adalah 1 %.
Dengan penggunaan CodeWizardAVR, jika melebihi batas masimal huruf-nya akan berwarna merah seperti ini : Baud Rate Error: 1,4%.
Langkah-langkah Coding USART Asinkron pada AVR ada di Memulai CoViAVR (CodeVisionAVR).
Inisialisasi dengan CodeWizardAVR baik digunakan jika komunikasi yang anda inginkan hanya menggunakan 1 Baud Rate saja dan tidak berubah-ubah. Bagaimana jika ingin mengganti Baud Rate sedangkan programnya sudah panjang dan tidak ingin memulai dari awal lagi ? yaitu cukup dengan mengubah nilai-nilai inisialisasi USART seperti berikut :
- Klik Toolbar CodeWizardAVR.
- Rubah nilai Baud Rate yang diinginkan atau nilai lainnya.
- Klik File - Program Preview dan copy paste nilai-nilai untuk inisialisasi USART-nya.
Inisialisasi Dengan Fungsi
Inisialisasi dengan fungsi lebih fleksibel dibandingkan inisialisasi dengan CodeWizardAVR karena Fungsi ini dapat digunakan untuk mengubah nilai Baudrate disaat yang anda inginkan tanpa perlu mengubah coding yang telah ada.
Misalkan dengan menekan keypad A maka baudrate yang digunakan 4800 kbps, keypad B 9600 kbps, atau pada event-event tertentu sehingga baudrate berubah secara otomatis, dst.
Akan tetapi untuk cara ini, programmer setidaknya harus memahami beberapa register-register penting yang akan digunakan untuk komunikasi serial USART. Pada setiap register saya hanya akan bahas beberapa bit pada register tersebut.
Beberapa register yaitu :
http://extremeelectronics.co.in
- UDR : USART Data Register
Register 8 bit terdiri dari 2 buah register dan bukan 1 register, 1 register untuk proses membaca data USART yang diterima (reciever buffer) dan 1 register untuk menyimpan data yang akan dikirimkan (transmit buffer). Hal inilah yang menyebabkan mengapa USART pada AVR adalah full duplex yaitu dapat melakukan pengiriman dan penerimaan data secara bersamaan.
- UBRR : Baud rate register.
Register 16 bit sehingga dibagi menjadi 2 yaitu bit0 - bit7 UBRRL dan bit8 - bit15 UBRRH. Register ini digunakan untuk menyimpan nilai kecepatan transmisi data. Nilai Baud rate pada UBRR didapatkan dengan rumus UBRR=(fosc/16xBaudrate) - 1 (asinkron kecepatan normal). Hal yang harus diingat adalah UBRR bernilai 16 bit sehingga menggunakan tipe data unsigned integer bukannya float dan juga hasil perhitungan dengan pembulatan kebawah bukan keatas (jika float), hal ini untuk mencegah error pada komunikasi data.
- UCSRA : USART Control dan Status Register A.
- Bit 7 RXC : sebagai flag (tanda) bahwa penerimaan data1 byte telah selesai dan data bisa dibaca pada register UDR.
- Bit 6 TXC : sebagai flag (tanda) bahwa pengiriman data1 byte telah selesai dan data selanjutnya bisa diberikan pada register UDR.
- Bit 7 RXCIE : mengatur interupsi penerimaan data serial. Nilai awal 0 dan akan bernilai 1 jika RXC = 1.
- Bit 6 TXCIE : mengatur interupsi pengiriman data serial. Nilai awal 0 dan akan bernilai 1 jika TXC = 1.
- Bit 4 RXEN : mengaktifkan penerimaan RX.
- Bit 3 TXEN : mengaktifkan pengiriman TX.
- Bit 2 UCSZ2 : menentukan panjang karakter yang akan dikirimkan. Register ini digunakan bersamaan dengan register UCSZ0 dan UCSZ1 yang terdapat pada register UCSRC. Akan dibahas dibawah.
- Bit 7 URSEL : karena UCSRC dan UBRRH memakai alamat yang sama maka fungsi bit ini adalah memutuskan register mana yang akan "ditulis". Jika bernilai 1 maka data akan ditulis ke UCSRC dan jika bernilai 0 maka data akan ditulis di UBRRH.
- Bit 6 UMSEL : menentukan apakah komunikasi sinkron atau asinkron. Bernilai 0 maka komunikasi asinkron dan jika bernilai 1 maka komunikasi sinkron.
- Bit 3 USBS : Usart Stop Bit Select jika bernilai 0 maka stop bit-nya 1 dan jika bernilai 1 stop bit-nya 2.
- Bit 2 UCSZ1 dan bit 1 UCSZ0 : bersamaan dengan UCSZ2 menentukan panjang bit yang akan digunakan. Umumnya 8 bit tetapi anda bisa memilih 5,6,7,8, atau 9 bit.
Gambar di samping adalah fungsi untuk komunikasi USART.
Selamat mencoba.
;)