Laporan Akhir Modul 3 Percobaan 2


1.Hardware [kembali] 

Push Button

LED
Arduino
 
Resistor

 
 Power Supply

2.Rangkaian simulasi [kembali] 


Prisnsip Kerja: 
    Rangkaian di atas merupakan aplikasi dari komunikasi SPI. Di mana saat button pada input dua dari master ditekan, maka akan mengirimkan data ke dalam variabel x dan keluar dari  MOSI pada master terus masuk ke MOSI slave. Jika nilai x yang dikirimkan diterima slave bernilai satu maka led pada bagian slave akan menyala.
    Demikian juga pada LED bagian master. jika button pada slave ditekan, maka akan mengirimkan nilai x ke pada master melalui MISO. Jika x yang diterima master bernilai satu maka LED pada bagian master akan menyala.
    


3. Listing Program[kembali]

//Master 

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

{
  Serial.begin(34500);                   //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_DIV128);    //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(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);
    delay(500);
    digitalWrite(LED,LOW);
          //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

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

{
  Serial.begin(34500);
  
  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);
        delay(500);    
        digitalWrite(LEDpin, LOW);//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);
}
}




Flowchart


4. Kondisi [kembali] 

ubahlah baud rate pd master menjadi 34.500

5. Video[kembali] 




6. Analisa[kembali]

Perc 2: Ubahlah baud rate pd master menjadi 34.500

 

1. Pada komunikasi SPI, menggunakan lebih dari 1 master dalam sistem yang sama apakah dapat dilakukan? Jelaskan alasannya!

Jawaban :

Pada komunikasi SPI, hanya bisa menggunakan 1 master pada sistem. Karena pada komunikasi SPI berfungsi sebagai device yang menginisiasi pengiriman data atau dapat digunakan untuk mengatur pengiriman data dari atau ke beberapa slave. Jika slave menerima data lebih dari 1 master pada sistem, maka slave tidak akan dapat memproses datanya atau terjadi error karena komunikasi SPI ini bersifat Synchronous.

2. Pada kondisi master menggunakan lebih dari 1 slave, bagaimana cara agar master mengirimkan data yang berbeda pada setiap slave? Jelaskan!

Jawaban :

Ketika master menggunakan lebih dari 1 slave, maka itu disebut dengan Multiple Slave SPI Mode yang dimana terdiri dari beberapa slave dengan 1 master. Dimana master menggunakan beberapa pin atau jalur SS untuk mengakses SPI. Jadi semua pin MISO, MOSI, dan SCK dari master terkoneksi secara parallel ke 3 slave device. Tetapi 3 pin SS dari master pin-nya akan terpisah dan hanya terkoneksi Ke pin SS dari setiap slave dan pin SS lah yang akan bergantian memilih slave. Agar tidak terjadi tabrakan antar data, maka tidak boleh memberi logic low “0” kepada Pin SS1,SS2, dan SS3 secara bersamaan.

3. Apakah baudrate pada master dan slave pada komunikasi SPI harus bernilai sama? Berikan alasannya!

Jawaban :

Baud rate pada master dan slave pada komunikasi SPI harus bernilai sama, karena baud rate mengindikasikan seberapa cepat data dikirim melalui komunikasi serial. Jika baud rate pengirim dan penerima tidak sesuai, maka data yang dikirim dan diterima menjadi tidak sesuai.

7. Link Download[kembali]

  PRAKTIKUM  ELEKTRONIKA DAN SISTEM DIGITAL OLEH : ATHALLA NOVANDRI (1910952040) DOSEN PENGAMPU: Dr. Darwison, M.T REFERENSI Darwison, 2011,...