Komunikasi tiga mikrokontroler, satu master dua slave menggunakan serial usart

Komunikasi tiga mikrokontroler, satu master dua slave menggunakan serial usart merupakan lanjutan dari posting sebelumnya yang berbicara mengenai komunikasi dua mikrokontroler menggunakan serial usart. Tidak beda jauh dengan posting sebelumnya tapi kali ini jumlah slavenya yaitu dua buah. Satu mikrokontroler yaitu avr atmega 32 sebagai master bertugas hanya mengirim data atau sebagai transmitter, sedangkan dua mikro yang lain masing-masing avr atmega8 sebagai slave bertugas hanya menerima data atau sebagai receiver. Dalam percobaan ini master mengirim data string yaitu “aku “,”musbikhin”,”==========” secara serial serta data serial tersebut ditampilkan juga pada LCD yang terhubung dengan PORTC, data yang dikirimkan oleh master dapat dilihat pada virtual terminal.

Saat data dikirim master maka seluruh slave menerima semua data tersebut tapi hanya memproses data yang telah ditentukan, disini saat slave menerima karakter ‘a’ maka led yang terhubung dengan slave1 maka akan berkedip. Sedangkan pada saat slave menerima karakter ‘b’ maka led yang terhubung dengan slave2 akan berkedip.
Rangkaian totalnya adalah sebagai berikut :

Berikut setting pada masternya :


Dan ini adalah setting pada masing-masing slavenya :

Sedangkan pada sisi programnya, setting pada codewizard pada codevision avr adalah berikut ini.
1.    Pada sisi master

 

 

 

 

 

 

 

 

 

 

Berikut program dan keterangannya :

#include <mega32.h>
#include <delay.h>
// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x15 ;PORTC
#endasm
#include <lcd.h>

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

// Declare your global variables here

void main(void)
{
unsigned char var1[]=”aku “;
unsigned char var2[]=”musbikhin “;
unsigned char var3[]=” ======== “;

// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: Off
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud Rate: 9600
UCSRA=0x00;
UCSRB=0x08;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x4D;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

// LCD module initialization
lcd_init(16);

while (1)
{
// Place your code here
printf(“%s”,var1);//Mengirim string “aku ”
delay_ms(100);
printf(” %s”,var2);//Mengirim string “musbikhins”
delay_ms(100);
printf(” %s”,var3);//Mengirim string “===========”
delay_ms(100);

/* Program untuk menampilkan pada lcd */
lcd_clear();
delay_ms(100);
lcd_gotoxy(0,0);
lcd_puts(var1);

lcd_gotoxy(0,1);
lcd_puts(var2);

delay_ms(100);
lcd_clear();
delay_ms(100);
lcd_gotoxy(0,0);
lcd_puts(var3);
lcd_gotoxy(0,1);
lcd_puts(var3);

};
}

2.    Pada sisi slave

 

 

 

 

 

 

 

 

 

 

Berikut program dan keterangannya :

Pada slave 1 :

#include <mega8.h>
#include <stdio.h>
#include <delay.h>
// Declare your global variables here

void main(void)
{
unsigned char input1;
// Port C initialization
// Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State6=1 State5=1 State4=1 State3=1 State2=1 State1=1 State0=1
PORTC=0x7F;
DDRC=0x7F;

// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: Off
// USART Mode: Asynchronous
// USART Baud Rate: 9600
UCSRA=0x00;
UCSRB=0x10;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x4D;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

while (1)
{
// Place your code here
input1= getchar();
if(input1 == ‘a’)    // Jika menerima data serial berupa karakter ‘a’
{
// Place your code here
PORTC =~ PORTC;      //Lampu led berkedap kedip
delay_ms(100);
}

};
}

Pada Slave 2 :

#include <mega8.h>
#include <stdio.h>
#include <delay.h>
// Declare your global variables here

void main(void)
{
unsigned char input1;
// Port C initialization
// Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State6=1 State5=1 State4=1 State3=1 State2=1 State1=1 State0=1
PORTC=0x7F;
DDRC=0x7F;

// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: Off
// USART Mode: Asynchronous
// USART Baud Rate: 9600
UCSRA=0x00;
UCSRB=0x10;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x4D;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

while (1)
{
// Place your code here
input1= getchar();
if(input1 == ‘b’)    // Jika menerima data serial berupa karakter ‘b’
{
// Place your code here
PORTC =~ PORTC;      //Lampu led berkedap kedip
delay_ms(100);
}

};
}

Dan inilah hasil dari simulasi Komunikasi tiga mikrokontroler, satu master dua slave menggunakan serial usart pada proteus :

Mungkin ini yang dapat saya berikan kalau ada pertanyaan bisa langsung komentar di bawah, bila saya bisa saya akan jawab, bila belum tahu harap maklum y, newbie 🙂

Tinggalkan Balasan