PERCOBAAN 2

LAPORAN AKHIR I


1. Komponen [kembali]

arduino




LED



power supply






2. Rangkaian Simulasi [kembali]



Prinsip kerja:

Pada percobaan, komponen yang digunakan terdiri dari dua buah arduino yang berperan sebagai master dan slave, lalu ada LED sebagai output. Pada rangkaian ini digunakan komunikasi full duplex karena kedua output akan hidup secara bersamaan. Pada listing program, arduino master diberikan input berupa LED  dengan kecepatan SPI 2Mhz, pada program diberikan kondisi dimana jika dibaca high maka x akan 1 lalu jika tidak maka x akan 2, jika kondisi master 1, maka akan membuat LED on dan slave akan terhubung. Namun, jika kondisinya berbeda maka LED off.


3. Flowchart [kembali]



4. Listing Program [kembali]

// MASTER PROGRAM


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

#define LED 7           

#define button 2

int buttonvalue;

int x;

void setup ()


{

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

  

  pinMode(button,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()

{

  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");

    delay(5000);

  }

  else

  {

   digitalWrite(LED,LOW);               //Sets pin 7 LOW

   Serial.println("Master LED OFF");

  }

delay(50);  


}

// SLAVE PROGRAM



#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);

        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. Pada komunikasi SPI, menggunakan lebih dari 1 master dalam sistem yang sama apakah dapat dilakukan? Jelaskan alasannya! 

Jawab:

Pada komunikasi SPI,  tidak dapat menggunakan lebih dari 1 master karena master pada SPI berperan sebagai pengontrol komunikasi serial sinkron dimana master dapat mengirim atau menerima data. Jika masternya lebih dari 1, maka bisa terjadi error karena akan susah dalam pemilihan slave yang dituju dengan adanya perintah dari 2 master.

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

Jawab:

Untuk slave lebih dari 1, maka master menggunakan jalur pin slave select (SS) untuk mengakses SPI. Jadi, semua pin dari master terhubung parallel ke slave lainnya. Tetapi pin SS dari master hanya terhubung ke pin SS slave yang akan dituju.

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

Jawab:

Iya, baud rate pada master dan slave harus bernilai sama karena baud rate menentukan kecepatan pengiriman data. Jika kecepatan pengirim dan penerima  data tidak sama/ tidak sesuai, maka data yang dikirim / diterima menjadi tidak sesuai pula.


7. Link Download [kembali]

HTML: disini

File rangkaian: disini

Listing program: disini

Library Arduino: disini

Datasheet LED: disini

Video: disini













Tidak ada komentar:

Posting Komentar