Tugas Pendahuluan 2 (Modul 3)




1. Kondisi
[Kembali]

Modul 3 Percobaan 2 Kondisi 4

Ubah boud rate pada Slave menjadi 34500


2. Gambar Rangkaian Simulasi [Kembali]


Sebelum disimulasikan




Setelah disimulasikan


3. Video Simulasi [Kembali]




4. Prinsip Kerja Rangkaian [Kembali]

Pada rangkaian digunakan 2 Arduino uno, push button, resistor, dan LED. Pin 2 master dan slave dihubungkan ke push button dan pin 7 master dan slave dihubungkan ke LED.

listing program

//MASTER

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

{
  
  Serial.begin(115200);
  pinMode(m_button,INPUT);                //Sets pin 2 as input 
  pinMode(m_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(m_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(m_LED,HIGH);
    delay(500);
    digitalWrite(m_LED,LOW);
    Serial.println("Master LED ON");
  }
  else
  {
   digitalWrite(m_LED,LOW);               //Sets pin 7 LOW
  Serial.println("Master LED OFF");
  }
  delay(100);
}


//SLAVE

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

{
  Serial.begin(34500);
  
  pinMode(s_button,INPUT);               // Setting pin 2 as INPUT
  pinMode(s_LED,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(s_LED,HIGH);
        delay(500);    
        digitalWrite(s_LED, LOW);//Sets pin 7 as HIGH LED ON
        Serial.println("Slave LED ON");
      }else
      {
        digitalWrite(s_LED,LOW);          //Sets pin 7 as LOW LED OFF
        Serial.println("Slave LED OFF");
      }
      
      buttonvalue = digitalRead(s_button);  // 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);
}
}


    Pada program Master, dimasukkan libarry untuk SPI, dideklarasikan pin yang akan digunakan 2 untuk push button, 7 untuk LED. Pada void setup, push button diatur menjadi input dan LED sebagai output.  Serial.begin(115200); digunakan untuk menset baud rate menjadi 115200. SPI.begin();digunakan untuk memulai komunikasi SPI. Pada void loop, nilai push button akan dibaca, jika button HIGH x = 0, selain itu x = 1. Fungsi SPI.transfer(); berfungsi untuk mengirim nilai dan menerima nilai slave. Jika x = 1, LED akan HIGH, delay 500ms, lalu LED akan LOW, selain x = 1, LED akan LOW.
    Pada program Slave, dimasukkan libarry untuk SPI, dideklarasikan pin yang akan digunakan 2 untuk push button, 7 untuk LED. Pada void setup, push button diatur menjadi input, LED dan MISO sebagai output.  Serial.begin(34500); digunakan untuk menset baud rate menjadi 34500. SPCR |= _BV(SPE);digunakan untuk slave mode. Pada void loop, if(received) berfungsi untuk menset LED on atau off tergantung nilai yang diterima dari master. Push button akan dibaca, jika button HIGH x = 0, selain itu x = 1. Fungsi SPI.transfer(); berfungsi untuk mengirim nilai dan menerima nilai slave. Jika x = 1, LED akan HIGH, delay 500ms, lalu LED akan LOW, selain x = 1, LED akan LOW.
    Ketika push button pada master ditekan, maka LED pada slave akan menyala, sebaliknya jika push button pada slave ditekan, LED pada master akan menyala. Dikarena kan baud rate master 115200 dan baud rate slave 34500, berbeda kecepatan pengiriman maupun penerimaan data, maka saar mengirim maupun menerima, data ada yang tertinggal, sehingga LED tidak menyala jika push button hanya ditekan sekali, jika ditekan berkali-kali maka data yang dikirimkan banyak, sehingga LED dapat menyala.
    

5. Link Download [Kembali]

    Link rangkaian [klik]
    Link Html [klik]
    Link Video [klik]
    Link Listing Program [klik]
    Datasheet Resistor [klik]
    Datasheet LED [klik]
    Datasheet Arduino UNO [klik]
    Library Arduino UNO [klik] 

Tidak ada komentar:

Posting Komentar

BAHAN PRESENTASI UNTUK MATA KULIAH ELEKTRONIKA 2020/2021 OLEH: Saiydul Azmy 2010953013 Dosen Pengampu: Darwison, M.T Referensi: 1. Robert L....