1.Komponen [kembali]




Arduino Uno







LED








BUzzer

Resistor





2. Rangkaian Simulasi [Kembali]








Pada rangkaian di atas ini kita akan membahas rangkaian komunikasi full duplex dimana komponen yag digunakan antara lain ada led arduino buzzer resistor dan led, lallu rangkai seperti gambar di atas ,buzzer dan led ini merupakan outputan dari master maupun slave,lalu untuk menjalankan rangkaian ini arduino pada master dan slave di beri listing program, pada master diberikan input pada buzzer dan led alu pada mster ini terdapat SPI  yang kecepatannya 2Mhz lalu pada void perulngan jika button yag dibaca high maka x nya aka 1 namun jika sebalik nya x sama dengan 0 dan jika 1 maka led dan buzzer akan menyala. Lalu pada slave juka diberikan sebuah listing program yang akan berhubungan pada master  dimana dia akan membaca SPI dari master dan akan menjadi on, dan jika pada master x=1 maka led nya akan menyala sedangkan 0 maka led yang terhubung dengan slave tidak akan menyala


3. Flowchart [Kembali]







4. Listing Program [Kembali]
Master
#include<SPI.h>                             //Library for SPI 
#define LED 7           
#define button 2
#define buzzer 4
int buttonvalue;
int x;
void setup ()

{
  Serial.begin(115200);                   //Starts Serial Communication at Baud Rate 115200 
  
  pinMode(button,INPUT);                //Sets pin 2 as input 
  pinMode(LED,OUTPUT);                    //Sets pin 7 as Output
  pinMode(buzzer, OUTPUT);                // Sets pin 7 as Output
  
  SPI.begin();                            //Begins the SPI commnuication
   SPI.setClockDivider(SPI_CLOCK_DIV8);    //Sets clock for SPI communication at 8 (16/8=2Mhz)
  digitalWrite(SS,HIGH);                  // Setting SlaveSelect as HIGH (So master doesnt connnect with slave)
}

void loop()
{
  byte Mastersend,Mastereceive;          

  buttonvalue = digitalRead(button);   //Reads the status of the pin 2

  if(buttonvalue == HIGH)                //Logic for Setting x value (To be sent to slave) depending upon input from pin 2
  {
    x = 1;
  }
  else
  {
    x = 0;
  }
  
  digitalWrite(SS, LOW);                  //Starts communication with Slave connected to master
  
  Mastersend = x;                            
  Mastereceive=SPI.transfer(Mastersend); //Send the mastersend value to slave also receives value from slave
  
  if(Mastereceive == 1)                   //Logic for setting the LED output depending upon value received from slave
  {
    digitalWrite(LED,HIGH);
    Serial.println("Master LED ON");
    digitalWrite(buzzer, HIGH);
    Serial.println("Master buzzer ON");
    delay(5000);
  }
  else
  {
   digitalWrite(LED,LOW);               //Sets pin 7 LOW
   Serial.println("Master LED OFF");
   digitalWrite(buzzer, LOW);
   Serial.println("Master buzzeR OFF");
  }
delay(50);

}

Slave 


#include<SPI.h>
#define LEDpin 7
#define buttonpin 2
volatile boolean received;
volatile byte Slavereceived,Slavesend;
int buttonvalue;
int x;
void setup()

{
  Serial.begin(9600);
  
  pinMode(buttonpin,INPUT);               // Setting pin 2 as INPUT
  pinMode(LEDpin,OUTPUT);                 // Setting pin 7 as OUTPUT
  pinMode(MISO,OUTPUT);                   //Sets MISO as OUTPUT (Have to Send data to Master IN 

  SPCR |= _BV(SPE);                       //Turn on SPI in Slave Mode
  received = false;

  SPI.attachInterrupt();                  //Interuupt ON is set for SPI commnucation
  
}

ISR (SPI_STC_vect)                        //Inerrrput routine function 
{
  Slavereceived = SPDR;         // Value received from master if store in variable slavereceived
  received = true;                        //Sets received as True 
}

void loop()
{ if(received)                            //Logic to SET LED ON OR OFF depending upon the value recerived from master
   {
      if (Slavereceived==1) 
      {
        digitalWrite(LEDpin,HIGH);
        Serial.println("Slave LED ON");
      }else
      {
        digitalWrite(LEDpin,LOW);          //Sets pin 7 as LOW LED OFF
        Serial.println("Slave LED OFF");
      }
      
      buttonvalue = digitalRead(buttonpin);  // Reads the status of the pin 2
      
      if (buttonvalue == HIGH)               //Logic to set the value of x to send to master
      {
        x=1;
        
      }else
      {
        x=0;
      }
      
  Slavesend=x;                             
  SPDR = Slavesend;                           //Sends the x value to master via SPDR 
  delay(500);
}
}



5.Video [kembali]









6.Kondisi [kembali]

Percobaan 2 

1.Apakah komunikasi yang digunakan simple,half,fullduplex dalam percobaa ini kita meggunakan komunikasi fullduplex karena dalam perobaan ini kedua pihak saling berbagi informasi dan berkomunikasi secara interaktif dalam waktu yang bersamaan

2. Jika serial begin pada slave diubah jadi 9609 dan yang di master tetap apa yang terjadi pada program?jika serial begin dislave diubah rangkaian tetap akan meyala karna serial begin ini hanya berfugsi mengirim data yang ada pada listing program terhdap hard arduini

3.Jekaskan fungsi clock speed atau clock devidr pada perobaan jika diubah ke 16 apa yang terjadi 

clock speed ini berfugsi sebagai banyaknya intruksi (kalkulasi tingkat rendah seperti aritmatika) dimana kecepatannya ini megukur jumlah siklus yang dijalankan kecepatannya ini mengukur jumlah siklus yang  di jalankan perdetik

7.Link download [kembali]

Video klik disini

rangkaian klik disini

Flowchart klik disini

Program arduino master klik disini

Program arduino slave klik disini

Tidak ada komentar:

Posting Komentar