Tugas Pendahuluan Modul 3 (kondisi 1)




Modul 3, Percobaan 2, Kondisi 2
Buatlah kondisi awal LED mati, lalu hidup berkedip dengan delay 1000 ms


2. Gambar Rangkaian Simulasi [kembali]

kondisi rangkaian sebelum disimulasikan

kondisi rangkaian setelah disimulasikan



MASTER

#include<SPI.h>                             //Library for SPI 
#define LED 7           
#define inbutton 2

int buttonvalue;

int x;

void setup ()
{

  Serial.begin(115200);                   //Starts Serial Communication at Baud Rate 115200 
  pinMode(inbutton,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(inbutton);   //Reads the status of the pin 2
  if(buttonvalue == LOW)                //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(1000);

    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(250);

}

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

        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 == LOW)               //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(250);
}
}



5. Prinsip Kerja Rangkaian [kembali]

Rangkaian pada tugas pendahuluan ini menggunakan komunikasi SPI. Serial Peripheral Interface ( SPI ) merupakan salah satu mode komunikasi serial synchrounous kecepatan tinggi yang dimiliki oleh ATmega 328. Komunikasi SPI membutuhkan 3 jalur yaitu MOSI, MISO, dan SCK. Melalui komunikasi ini data dapat saling dikirimkan baik antara mikrokontroller maupun antara mikrokontroller dengan peripheral lain di luar mikrokontroler.

Kondisi pada rangkaian ini yaitu membuat LED berkedip dengan delay 1000ms. Menggunakan 2 buah arduino, masing-masing berfungsi sebagai master dan slave, input dari 2 buah push button yang terhubung ke pin 2 masing-masing arduino, LED sebagai output terhubung ke pin 7 masing-masing arduino, pin SCLK, MISO, MOSI, dan SS pada SPI terhubung ke pin 13, 12, 11, dan 10 pada masing-masing arduino.

Cara kerja dari komunikasi SPI adalah sinyal clock dialirkan dari master ke slave yang berfungsi untuk sinkronisasi. Master dapat memilih slave mana yang akan dikirimkan data melalui slave select, kemudian data dikirimkan dari master ke slave melalui MOSI. Jika master butuh respon data maka slave akan mentransfer data ke master melalui MISO.

Ketika masing-masing push button ditekan atau dalam kondisi low, maka LED akan berkedip dengan dalay 1000ms. Pada arduino yang bertindak sebagai SLAVE, MISO sebagai output, artinya slave mengirimkan data kepada master untuk menyelakan LED.


File HTML download
File Rangkaian Simulasi download
File Program Arduino Master download
File Program Arduino Slave download
File Datasheet Arduino download
File Datasheet Resistordownload
File Datasheet LED download
File Library Arduino download
File Video Simulasi download

Tidak ada komentar:

Posting Komentar