Laporan Akhir 1 Modul 3

Laporan Akhir Percobaan 2

Komunikasi SPI


1. Kondisi[KEMBALI]

Kondisi yang dipilih sesuai dengan modul praktikum.

2. Alat dan Bahan[KEMBALI]

a. Alat

Project Board

Jumper

USB Arduino

b. Bahan

LED Merah (Output)

Resistor 220 Ohm

Button Push (input)

c. Komponen Lain

Arduino Uno

3. Rangkaian Percobaan[KEMBALI]

Rangkaian Percobaan 2

4. Prinsip Kerja[KEMBALI]

Rangkaian diatas terdiri dari 2 buah arduino, 2 buah LED merah, 2 buah button, dan 4 buah resistor 220 Ohm. Rangkaian bekerja dengan memanfaatkan komunikasi SPI, yaitu dengan menghubungkan pin 10-13 masing-masing arduino. Arduino 1 didefinisikan sebagai MASTER dan arduino 2 didefinisikan sebagai SLAVE. Buzzer 1 dihubungkan ke pin 7 MASTER dan button 1 dihubungkan ke pin 2. Sedangkan buzzer 2 dihubungkan ke pin 7 SLAVE dan button 2 dihubungkan ke pin 2. Masing-masing pin buzzer dinyatakan sebagai output dan button sebagai input. Saat button 1 ditekan, arus akan mengalir ke pin 2 MASTER. Arus akan diteruskan oleh MASTER ke SLAVE melalui saluran pada pin MISO (pin 12). Arus akan dikeluarkan pada pin 7 SLAVE yang terhubung ke LED 2. LED 2 akan menyala dengan delay 200ms sesuai yang diprogramkan.

Saat button 2 ditekan, arus akan mengalir ke pin 2 SLAVE. Arus akan diteruskan oleh SLAVE ke MASTER melalui saluran pada pin MOSI (pin 11). Arus akan dikeluarkan pada pin 7 MASTER yang terhubung ke LED 1. LED 1 menyala dengan delay 200ms. Berikut program arduino:

//SPI MASTER (ARDUINO)

//SPI COMMUNICATION BETWEEN TWO ARDUINO 

//CIRCUIT DIGEST

#include<SPI.h>                             //Library for SPI
#define LED 7          
#define ipbutton 2
int buttonvalue;
int x;

void setup (void)
{
  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(200);
}

//Slave Arduino Code:

//SPI SLAVE (ARDUINO)

//SPI COMMUNICATION BETWEEN TWO ARDUINO 

//CIRCUIT DIGEST

//Pramoth.T

#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(200);
}
}

5. Video Praktikum[KEMBALI]


6. Analisa[KEMBALI]

a. Apa yang terjadi jika pin MISO dilepas?

Jawab: Pin MISO (Master Input Slave Output) berfungsi untuk transmisi data dari MASTER ke SLAVE. Saat MASTER mendapatkan input, data ditransmisikan ke SLAVE melalui saluran pada pin MISO untuk ditampilkan pada outputnya. Bila pin MISO dilepas, maka transmisi data dari MASTER ke SLAVE tidak dapat dilakukan.

b. Apakah pin SS bisa digunakan pada pin digital lainnya?

Jawab: Bila pin SS didefinisikan sebagai output pada program arduino, maka pin SS dapat digunakan pada pin digital lainnya. Sedangkan pada komunikasi SPI, pin SS MASTER harus terhubung ke pin SS SLAVE agar komunikasi dapat berjalan.

7. Link Download[KEMBALI]

Download Video Praktikum [disini]

Download Program Arduino [disini]

Download Datasheet Arduino Uno [disini]

Download Datasheet LED [disini]

Download Datasheet Button [disini]

Download Datasheet Resistor [disini]

Tidak ada komentar:

Posting Komentar