Saturday, 13 June 2015

Komunikasi Serial Antar 2 Mikrokontroller

Salam Kapasitorr!!!
Pada postingan kali ini kita akan belajar mengenai komunikasi serial antar 2 mikrokontroller. Sebelum kita lanjut, ada baiknya kita tahu terlebih dahulu arti dari komunikasi serial. Komunikasi serial adalah metode pengiriman data dimana data yang dikirim satu per satu. Jenis komunikasi yang akan kita gunakan adalah USART (Universal Syncronous Asyncronous Receiver Transmitter). Maksud dari USART tersebut, kita bisa menggunakan 2 mode yaitu mode Syncrounous dan mode Asyncronous. Perbedaannya terletak pada sumber clocknya. Jika pada syncronous, sumber clocknya harus sama jadi diperlukan PIN yang bertindak sebagai Clock. Pin - pin tersebut adalah RXD, RXD, XCK. Sedangkan pada Asyncronous hanya diperlukan 2 Pin saja yaitu RXD & TXD.  


Langsung ke bagian setting programnya. Berikut hal - hal yang harus dilakukan untuk mengaktifkan fitur USART.

Note :
1. Receiver dan Transmitter diconteng karena kita akan menerima dan mengirim data.
2. Baudrate adalah kecepatan pengiriman data. Satuannya BPS (Bit Per Second).
3. 8 Data, 1 Stop, No Parity artinya :

  1. 8 Data : Jumlah data yang akan dikirim dan  diterima.
  2. 1 Stop : Setelah pengiriman data selesai dilakukan 1 kali stop. 
  3. No Parity : Tidak ada pengecekan data. 
Oia jgn lupa menggunakan LCD ya untuk melihat data yang diterima itu benar ato ga.

Berikut contoh program master dan slavenya. 

Master : 


  1. #include <mega8535.h>

  2. // Alphanumeric LCD Module functions
  3. #asm
  4.    .equ __lcd_port=0x15 ;PORTC
  5. #endasm
  6. #include <lcd.h>

  7. // Standard Input/Output functions
  8. #include <stdio.h>

  9. #include <delay.h>
  10. char get_RX;
  11. char data[20];

  12. // Declare your global variables here

  13. void main(void)
  14. {

  15. // USART initialization
  16. // Communication Parameters: 8 Data, 1 Stop, No Parity
  17. // USART Receiver: On
  18. // USART Transmitter: On
  19. // USART Mode: Asynchronous
  20. // USART Baud Rate: 9600
  21. UCSRA=0x00;
  22. UCSRB=0x18;
  23. UCSRC=0x86;
  24. UBRRH=0x00;
  25. UBRRL=0x47;


  26. // LCD module initialization
  27. lcd_init(16);

  28. while (1)
  29.       {
  30.       // Place your code here
  31.         putchar('A'); 
  32.         
  33.         get_RX = getchar();
  34.         
  35.         sprintf(data,"%c", get_RX);
  36.         lcd_gotoxy(0,0);
  37.         lcd_puts(data);

  38.       };
  39. }  



Slave :


  1. #include <mega8535.h>  
  2. #include <delay.h>

  3. // Alphanumeric LCD Module functions
  4. #asm
  5.    .equ __lcd_port=0x15 ;PORTC
  6. #endasm
  7. #include <lcd.h>

  8. // Standard Input/Output functions
  9. #include <stdio.h>   

  10. char data[16];
  11. char RX;


  12. // Declare your global variables here

  13. void main(void)
  14. {

  15. // USART initialization
  16. // Communication Parameters: 8 Data, 1 Stop, No Parity
  17. // USART Receiver: On
  18. // USART Transmitter: On
  19. // USART Mode: Asynchronous
  20. // USART Baud Rate: 9600
  21. UCSRA=0x00;
  22. UCSRB=0x18;
  23. UCSRC=0x86;
  24. UBRRH=0x00;
  25. UBRRL=0x47;

  26. // Analog Comparator initialization
  27. // Analog Comparator: Off
  28. // Analog Comparator Input Capture by Timer/Counter 1: Off
  29. ACSR=0x80;
  30. SFIOR=0x00;

  31. // LCD module initialization
  32. lcd_init(16);

  33. while (1)
  34.       {
  35.       // Place your code here

  36.         RX = getchar();
  37.         
  38.         sprintf(data,"%c", RX);
  39.         lcd_gotoxy(0,0);
  40.         lcd_puts(data);
  41.         
  42.         putchar ('B');

  43.       };
  44. }   
Berikut video simulasinya :



Sekian postingan kali ini, semoga bermanfaat!! 
Salam Kapasitorr!!


No comments:

Post a Comment