LA 2 - MODUL 3



Laporan Percobaan 2



1. Alat dan Bahan [Kembali]

a. Jumper



b. Modul Arduino



c. Kabel USB Arduino


d. BreadBoard


e. Push Button
f. LED

g. Resistor
 




2. Rangkaian Simulasi [Kembali]



3. Prinsip Kerja [Kembali]

Listing Program

//MASTER


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

}

//SLAVE

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

}

}

Pada rangkaian ini menggunakan 2 buah Arduino, resistor, serta LED. Pin 10, 11, 12, dan 13 master dihubungkan ke pin 10,11, 12, dan 13 slave sebagai pin MISO, MOSI, SCLK, dan SS. Kemudian pin 7 masing-masing arduino dihubungkan ke LED yang sebelumnya sudah diberi resistor. Kemudian LED dihubunkan ke button lalu ke pin 2. Selain itu pin 2 juga dihubungkan ke resistor.

Pada listing program master, deklarasikan pin 7 terhubung ke LED dan pin 2 terhubung ke button. Kemudian deklarasikan juga variabel buttonvalue dan x. Pada void setup yang hanya dibaca sekali, deklarasikan button sebagai input dan LED sebagai output. Lalu nyatakan untuk memulai SPI dan set clock untuk SPI. Kemudian setting SlaveSelect dalam keadaan HIGH. Pada void loop yang dibaca berulang, deklarasikan variabel mastersend dan mastereceive. Deklarasikan variabel buttonvalue dengan hasil pembacaan kondisi button. Kemudian deklarasikan kondisi dengan menggunakan if. Apabila nilai button HIGH, maka x=1 dan pada kondisi lainnya x=0. Kemudian setting SlaveSelect dalam keaadaan Low dan nyatakan variabel mastersend sebagai x dan mastereceive dengan transfer data dari mastersend. Kemudian deklarasikan kondisi dengan menggunakan if. Apabila mastereceive=1, maka LED akan menyala dan pada kondisi lainnya LED akan LOW.

Pada listing program slave, deklarasikan library SPI.h, pin 7 dihubungkan ke LED, pin 2 dihubungkan ke button. Lalu deklarasikan juga boolean volatile dan byte, serta deklarasikan variabel buttonvalue dan x. Kemudian pada void setup yang hanya dibaca sekali, deklarasikan button sebagai input, LED dan MISO sebagai output. Setelah itu hidupkan mode slave pada SPI. Pada void loop yang dibaca berulang, deklarasikan kondisi slavereceived dengan menggunakan if. Apabila slavereceived=1, maka outputnya akan HIGH atau LED menyala. Untuk keadaan lainnya outputnya LOW atau LED tidak menyala. Lalu deklarasikan juga kondisi buttonvalue dengan menggunakan if. Apabila buttonvalue HIGH, maka x=1. Untuk keadaan lainnya x=0. Lalu nyatakan slavesend=x dan SPDR = Slavesend untuk mengirim x ke master melalui SPDR.

4. Video Pratikum [Kembali]


5. Analisa [Kembali]

1. Pada program "SPI.set.ClockDivider(SPI_CLOCK_DIV8);" apabila nilai 8 divariasikan menjadi 4, 16, 32 berapa nilai clock yang dihasilkan oleh master? [ Arduino clock speed : 16 MHZ]

Jawab:

Clock Divider = membagi clock pada komunikasi. jadi jika kita mengatur clock SPI yang dihasilkan master maka : 

Clock Master = Arduino Clock Speed/Nilai Clock Yang Digunakan

  • Clock divider = 4
            Clock Master = 16/4 = 4 MHZ
  • Clock divider = 16
            Clock Master = 16/16 = 1 MHZ
  • Clock divider = 32
            Clock Master = 16/32 = 0,5 MHZ

2. Analisa pengaruh nilai clock yang digunakan terhadap kecepatan pengiriman data

Jawab:

Berdasarkan percobaan dan pada soal nomor 1 percobaan 2 dapat dilihat bahwa semakin besar clock yang digunakan maka semakin kecil kecepatan yang dihasilkan untuk pengiriman data dan hal ini berlaku sebaliknya dimana semakin kecil clock yang digunakan maka semakin cepat pengiriman data. 

Dapat disimpulkan bahwa kecepatan pengiriman data memiliki hubungan berbanding terbalik dengan clock yang digunakan.

Tidak ada komentar:

Posting Komentar

  BAHAN PRESENTASI MATAKULIAh Elektronika 2021  OLEH: Muhammad Ilhamdi Akbar 2010953001 Dosen Pengampu: Dr.Darwison,M.T Jurusan Teknik Elek...