TP Modul 3 Percobaan 2 Kondisi 3





 1. Kondisi[Kembali]

Percobaan 1 Kondisi 2 

Ubah boud rate pada Master menjadi menjadi 34500

2. Rangkaian Simulasi[Kembali]

Sebelum dijalankan



Setelah dijalankan




3. Listing Program[Kembali]

-----------------------------------------------------------------------------------------------------------
//MASTER
#include<SPI.h>                             //Library for SPI
#define LED 7          
#define ipbutton 2
int buttonvalue;
int x;
void setup (void)
{
  Serial.begin(34500);                   //Starts Serial Communication at Baud Rate 34500
  pinMode(ipbutton,INPUT);                //Sets pin 2 as input
  pinMode(LED,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(void)
{
  byte Mastersend,Mastereceive;          
  buttonvalue = digitalRead(ipbutton);   //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);              //Sets pin 7 HIGH
    Serial.println("Master LED ON");
  }
  else
  {
   digitalWrite(LED,LOW);               //Sets pin 7 LOW
   Serial.println("Master LED OFF");
  }
  delay(500);
}


//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(115200);
  pinMode(buttonpin,INPUT);               // Setting pin 2 as INPUT
  pinMode(LEDpin,OUTPUT);                 // Setting pin 7 as OUTPUT
  pinMode(MISO,OUTPUT);                   //Sets MISO as OUTPUT (Have
  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);         //Sets pin 7 as HIGH LED ON
        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);
}
}
-----------------------------------------------------------------------------------------------------------

4. Video[Kembali]




5. Prinsip Kerja [Kembali]

Pada rangkaian percobaan, terdapat arduino master dan arduino slave, button, led, dan resistor. Pada rangkaian ini digunakan prinsip SPI yaitu serial synchronous dengan kecepatan tinggi. Terdapat 4 jalur penting, yaitu MOSI, MISO, SCLK, dan SS. MOSI saat master maka pinnya sebagai output, namun pada slave pinnya input. MISO saat master maka pinnya sebagai input, namun pada slave pinnya output. SCLK sebagai clock saat master untuk ouput dan saat slave untuk input. SS yaitu master yang memilih slave yang akan dikirimkan datanya. 

Selanjutnya untuk program master pada SPI.setClockDivider sebagai mengatur clock. Pada keadaan void set up untuk digitalWrite sebagai menunjukkan nilai SS dengan kondisi high. Nilai button dalam keadaan high. Pada keadaan void loop terdapat byte master pengirim dan penerima. Nilai button dengan digitalRead. Saat digitalWrite SS kondisi low, master pengirim ditandai dengan x, master penerima didapat dari nilai master pengirim. LED akan menyala dalam keadaan high dan akan mati dalam keadaan low.

Untuk program sleve, pada keadaan void set up _BV untuk menghidupkan slave dan SPIInterrupct akan mengintruksikan untuk hidup. Slavereceived itu SPDR. Pada keadaan void loop slavereceived bernilai 1. LED akan menyala dalam keadaan high dan akan mati dalam keadaan low. Nilai button digitalRead. Slavesend dengan nilai x dan SPDR sama dengan Slavesend.

Jika baud rate pada master dan slave berbeda, maka led tidak akan menyala.


6. Link Download[Kembali]

HTML Klik disini
Video Klik disini
File Rangkaian Proteus Klik disini
File Program Arduino Master Klik disini
File Program Arduino Slave Klik disini
Library Arduino Klik disini
Datasheet Arduino Klik disini
Datasheet LED Klik disini
Datasheet Button Klik disini

Tidak ada komentar:

Posting Komentar

Entri yang Diunggulkan

  BAHAN PRESENTASI UNTUK MATAKULIAH  ELEKTRONIKA OLEH: Rindina Armysa 2010953029 Dosen Pengampu: Dr. Ir. Darwison Referensi:    Robert L. Bo...