TP Modul 3 Percobaan 2 Kondisi 10




1. Kondisi
[Kembali]

Modul 3 Percobaan 2 Kondisi 10 (SPI)

Ganti LED menjadi Buzzer

2. Gambar Rangkaian Simulasi [Kembali]


  


3. Video Simulasi [Kembali]


4. Prinsip Kerja Rangkaian [Kembali]

Listing Program :

//MASTER

#include<SPI.h>                        
#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
  digitalWrite(SS,HIGH);//Setting SlaveSelect as HIGH
}
 
void loop(void)
{
  byte Mastersend,Mastereceive;          
  buttonvalue = digitalRead(ipbutton);  //Reads the status of the pin 2
  if(buttonvalue == HIGH)//Logic for Setting x value 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);
  if(Mastereceive == 1)    
    digitalWrite(LED,HIGH); //Sets pin 7 HIGH
    Serial.println("Master LED ON");
  }
  else
  {
   digitalWrite(LED,LOW);            
   Serial.println("Master LED OFF");
     delay (100);
  }
}

Untuk prinsip kerja dari master yaitu pertama tama include library untuk SPI, lalu deklarasikan pin 7 dan pin 2 masing masing untuk LED dan button, selanjutnya ada variable buttonvalue dan x dengan tipe data integer. Lalu ada fungsi void setup dimana pada fungsi ini semua kode akan dieksekusi sekali, lalu ada Serial.begin (115200) digunakan untuk mengatur kecepatan pengiriman data menggunakan port serial. Dalam fungsi void setup ini kita akan menetapkan atau mendeklarasikan pin 2(button) sebagai input dan pin 7(LED) sebagai output. Lalu untuk memulai komunikasi SPI  kita perlu menuliskan syntaks SPI.begin dan selanjutnya kita mengatur clockdivider untuk komunikasi SPI, disini kita menggunakan pembagi 8. Lalu kita mengatur SS (slave select) dalam logika HIGH sehingga master tidak akan terhubung dengan slave.

//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(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;
  received = true;       //Sets received as True
}
 
void loop()
{
   if(received) //Logic to SET LED ON OR OFF
   {
      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(100) ;
  }
}

Prinsip kerja dari master yaitu pertama  include library untuk SPI, lalu deklarasikan pin 7 dan pin 2 masing masing untuk LED dan button, selanjutnya ada variable buttonvalue dan x dengan tipe data integer. Lalu ada fungsi void setup dimana pada fungsi ini semua kode akan dieksekusi sekali, lalu ada Serial.begin (115200) digunakan untuk mengatur kecepatan pengiriman data menggunakan port serial. Dalam fungsi void setup ini kita akan menetapkan atau mendeklarasikan pin 2(button) sebagai input dan pin 7(LED) sebagai output  dan syntaks yang paling penting yaitu mengatur MISO sebagai output karena disini kita akan mengirim data dari slave ke master. Selanjutnya nyalakan SPI dalam mode slave menggunakan SPI control register. Kemudian aktifkan interupsi untuk komunikasi SPI, jika data diterima dari master maka interrupt routine akan dipanggil dan data akan diambil dari SPDR dan disimpan dalam variable slavereceive

5. Link Download [Kembali]


Tidak ada komentar:

Posting Komentar

  Bahan Presentasi untuk Mata Kuliah Sistem Digital 2022   Oleh : Muhammad Salman Ikhsan (2010951007) Dosen Pengampu : Dr. Darwison, MT Juru...