TP1 M3 Up Uc




1. Kondisi
[Kembali]

Ubah button menjadi saklar SPST
 
2. Gambar Rangkaian Simulasi [Kembali]

 
3. Video [Kembali]






4. Prinsip Kerja [Kembali]

Pada percobaan kali ini, komunikasi yang digunakan pada rangkaian adalah komunikasi Serial Periferal Interface (SPI). dimana pada komunikasi SPI digunakan 2 arduino, yang mana satu untuk Mater dan yang lainnya untuk Slave. dimana pada SPI pada transmisi datanya tipe full duplex, dimana data bisa dikirim dari dua arah, baik dari master ke slave maupun slave ke master secara bersamaan.  dimana untuk mengaktifkan rangkaian pada komunikasi SPI ini, dibutuhkannya 4 pin pada kedua arduino saling terhubung, yaitu pin MISO,MOSI, SCLK, dan SS. Pada percobaan ini, kondisi yang digunakan adalah menggunakan saklar SPST sebagai pengganti pushbutton, dimana saklar SPST berfungsi sebagai saklar input dari master dan slave yang logikanya akan dikirimkan ke master dan slave. dimana ketika saklar berlogika 1, maka LED pada master/ slave (tergantung MISO dan MOSI) akan hidup, dan sebaliknya, jika saklar berlogika 0, maka LED pada master/ slave (tergantung MISO dan MOSI) akan mati.

lalu pada arduino dimasukkan program sebagai berikut :

MASTER 

#include<SPI.h>             //Library for SPI

#define LED 7               // Deklarasi pin 7 terhubung ke LED

#define ipbutton 2          // Deklarasi pin 2 terhubung ke saklar SPST

int buttonvalue;

int x;

void setup (void)           // perintah didalamnya dieksekusi hanya sekali


{

  Serial.begin(115200);    //Starts Serial Communication at Baud Rate 115200

 

  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(100);

}
 
 
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 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);         //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(100);

}

}
 
 
Ketika  program sudah dimasukkan ke dalam arduino, maka rangkaian akan berjalan sesuai dengan prinsip
kerja dan program yang sudah diamasukkan ke arduino 
 
5. Link Download [Kembali]

Download Datasheet LED