Jumat, 30 September 2011

Tutorial Komunikasi Serial dengan AVR GCC / winAVR (Tutorial Serial Communication with AVR GCC / winAVR)

Berikut ini saya akan memberikan tutorial untuk mengirimkan data serial dari mikrokontroler ke komputer dan menerima data serial dari komputer ke mikrokontroler, menggunakan bahasa C dengan compiller AVR GCC atau winAVR.

Rangkaian skematik untuk IC MAX232 sebagai pengkonversi tegangan antara mikrokontroler dan port serial komputer, sebagai berikut:
max232


Listing programnya dengan winAVR atau AVRGCC sbb:

a) Mengirimkan data ke komputer
  1. #include<util/delay.h>
  2. #include<stdlib.h>
  3. #include<avr/io.h>
  4. #include<avr/pgmspace.h>
  5. #include<avr/interrupt.h>
  6. #define F_CPU 8000000UL
  7. #define USART_BAUDRATE 9600
  8. #define BAUD_PRESCALE (((F_CPU/(USART_BAUDRATE*16UL)))-1)
  9. void initserial()
  10. {
  11. // Aktifkan transmitter dan receiver
  12. UCSRB |= (1 << RXEN) | (1 << TXEN);
  13. // Ukuran karakter sebesar 8 bit
  14. UCSRC |= (1 << URSEL) | (1 << UCSZ0) | (1 << UCSZ1);
  15. // Load 8-bit yang lebih rendah dari nilai baud rate ke byte rendah dari UBRR register
  16. UBRRL = BAUD_PRESCALE;
  17. // Load 8-bit yang lebih atas dari nilai baud rate ke byte tinggi dari UBRR register:
  18. UBRRH = (BAUD_PRESCALE >> 8);
  19. }
  20. void uart_putc(unsigned char c)
  21. {
  22. while(!(UCSRA & (1 << UDRE)));
  23. UDR = c;
  24. }
  25. void uart_puts (char *s)
  26. {
  27. while (*s) {
  28. uart_putc(*s);
  29. s++;
  30. }
  31. }
  32. int main()
  33. {
  34. unsigned char tempserial;
  35. initserial();
  36. for(;;)
  37. {
  38. if (bit_is_set(UCSRA,RXC))
  39. {
  40. uart_puts(“Test Serial\r”);
  41. _delay_ms(5000);
  42. uart_puts(“Mengirim data ke komputer”);
  43. _delay_ms(5000);uart_putc(13);
  44. uart_putc(10);
  45. }
  46. }
  47. }

b) Menerima data dari komputer

Program utama int main() diganti sbb:
  1. int main()
  2. {
  3. unsigned char tempserial;
  4. initserial();
  5. DDRB=0x00;
  6. uart_puts("Test Serial Menerima Data\r");
  7. uart_putc(13);
  8. uart_putc(10);
  9. for(;;)
  10. {
  11. if (bit_is_set(UCSRA,RXC))
  12. {
  13. tempserial=UDR;
  14. UDR = tempserial;
  15. //Data yang diterima dikirimkan kembali ke port serial
  16. }
  17. }
  18. }
Untuk menampilkan data serial secara langsung dari mikrokontroler ke komputer dapat digunakan Hyperterminal. Caranya dengan pilih Start All Programs Accessories Communications Hyperterminal.

Jika Hyperterminal baru pertama kali dibuka, maka akan muncul pengaturan lokasi, diisi bebas.

Setelah itu akan muncul gambar sbb:
Tuliskan nama Hyperterminal bebas dan pilih gambar telepon merah dan kuning. Kemudian pilih COM yang terhubung dengan kabel serial, misalnya COM1.
hyperterm
Lakukan pengaturan komunikasi serial dengan baud rate (bits per second) 9600, data bits 8, parity none, stop bits 1, flowcontrol none.

Jika komunikasi serial berhasil maka pada Hyperterminal akan ditampilkan tulisan yang dikirim dari mikrokontroler ke komputer.

Terkadang terjadi kegagalan dengan komunikasi serial karena kesalahan pengaturan fuse bit, jika memakai crystal internal 8MHz maka lakukan pengaturan fuse bit untuk crystal 8MHz, jika menggunakan crystal external 11,0592MHz maka lakukan pengaturan fuse bit external 11,0592MHz.

Tempat Jual Komponen dan Elektronik.
-ayuchan-