Laporan Akhir Percobaan 2
1. Hardware [Kembali]
a. Arduino Uno
b. Breadboard Arduino
c. Breadboard Jumper Wire
d. Potensiometer
e. Motor Servo
2. Rangkain Simulasi [Kembali]
3. Listing Program[Kembali]
Master
//MASTER
#include<SPI.h>
#define buzzer 7
#define button 2
int buttonvalue;
int x;
void setup (void)
{
Serial.begin(115200); //Starts Serial Communication at Baud Rate 115200
pinMode(button,INPUT); //Sets pin 2 as input
pinMode(buzzer,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(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(buzzer,HIGH); //Sets pin 7 HIGH
Serial.println("Master Buzzer ON");
}
else
{
digitalWrite(buzzer,LOW);
Serial.println("Master Buzzer OFF");
}
}
Slave
//SLAVE
#include <SPI.h>
#define buzzerpin 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(buzzerpin,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 Buzzer ON OR OFF depending upon the value recerived from master
{
if (Slavereceived==1)
{
digitalWrite(buzzerpin,HIGH); //Sets pin 7 as HIGH LED ON
Serial.println("Slave Buzzer ON");
}
else
{
digitalWrite(buzzerpin,LOW); //Sets pin 7 as LOW LED OFF
Serial.println("Slave Buzzer 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
}
}
- Komunikasi SPI
5. Video Simulasi dan Prinsip Kerja [Kembali]
Prinsip Kerja:
Masing-masing arduino disambungkan pin 2 nya dengan input button, dan pin 7 disambungkan dengan output LED. Kemudian kedua arduino dihubungkan dengan komunikasi SPI. Pin Mosi disambungkan dengan mosi, pin miso disambungkan dengan miso, dan pin clock disambungkan dengan clok.
Ketika push button ditekan pada arduino master, maka arduino master akan menerima logika high pada pin 2 dan mengirimkan data nya ke arduino slave menggunakan komunikasi SPI. Lalu pada arduino slave akan mengluarkan outpu pada pin 7 berupa LED. Dan hal sebaliknya akan terjadi juga jika push button ditekan pada arduino slave.
6. Analisa [Kembali]
Percobaan 2
1. Pada Program "SPI.setClockDivider(SPI_CLOCK_DIV8);" apabila nilai 8 divariasikan menjadi 4, 16 , 32 berapa nilai clock yang dihasilkan oleh master? [Arduino Clock speed: 16Mhz]
Pada arduino uno memiliki clock 16Mhz sehingga dengan memvariasikan nilai 8 akan merubah nilai clock yang digunakan karena nilai 8 tersebut merupakan pembagi clock yang akan dihasilkan. Jika digunakan 8 maka clock yang dihasilkan adalah 2Mhz. Sedangkan jika menggunakan div 4, 16, 32 secara berturut-turut akan menghasilkan clock 4Mhz, 1 Mhz, 0,5 Mhz.
2. Analisa pengaruh kecepatan pengiriman data berdasarkan nilai clock yang digunakan
Pada komunikasi SPI data dikirim beriringan dengan clock. Jadi semakin cepat clock yang digunakan semakin cepat data dikirim begitu juga jika clock yang digunakan rendah maka data yang dikirim semakin lambat.
Komentar
Posting Komentar