Laporan Akhir Percobaan 2
Komunikasi SPI
1. Kondisi[KEMBALI]
Kondisi yang dipilih sesuai dengan modul praktikum.
2. Alat dan Bahan[KEMBALI]
a. Alat
Project Board |
Jumper |
USB Arduino |
b. Bahan
LED Merah (Output) |
Resistor 220 Ohm |
Button Push (input) |
c. Komponen Lain
Arduino Uno |
3. Rangkaian Percobaan[KEMBALI]
Rangkaian Percobaan 2 |
4. Prinsip Kerja[KEMBALI]
Rangkaian diatas terdiri dari 2 buah arduino, 2 buah LED merah, 2 buah button, dan 4 buah resistor 220 Ohm. Rangkaian bekerja dengan memanfaatkan komunikasi SPI, yaitu dengan menghubungkan pin 10-13 masing-masing arduino. Arduino 1 didefinisikan sebagai MASTER dan arduino 2 didefinisikan sebagai SLAVE. Buzzer 1 dihubungkan ke pin 7 MASTER dan button 1 dihubungkan ke pin 2. Sedangkan buzzer 2 dihubungkan ke pin 7 SLAVE dan button 2 dihubungkan ke pin 2. Masing-masing pin buzzer dinyatakan sebagai output dan button sebagai input. Saat button 1 ditekan, arus akan mengalir ke pin 2 MASTER. Arus akan diteruskan oleh MASTER ke SLAVE melalui saluran pada pin MISO (pin 12). Arus akan dikeluarkan pada pin 7 SLAVE yang terhubung ke LED 2. LED 2 akan menyala dengan delay 200ms sesuai yang diprogramkan.
Saat
button 2 ditekan, arus akan mengalir ke pin 2 SLAVE. Arus akan
diteruskan oleh SLAVE ke MASTER melalui saluran pada pin MOSI (pin 11).
Arus akan dikeluarkan pada pin 7 MASTER yang terhubung ke LED 1. LED 1
menyala dengan delay 200ms. Berikut program arduino:
//SPI MASTER (ARDUINO)
//SPI COMMUNICATION BETWEEN TWO ARDUINO
//CIRCUIT DIGEST
#include<SPI.h> //Library for SPI #define LED 7 #define ipbutton 2int 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(200);}
//Slave Arduino Code:
//SPI SLAVE (ARDUINO)
//SPI COMMUNICATION BETWEEN TWO ARDUINO
//CIRCUIT DIGEST
//Pramoth.T
#include<SPI.h>#define LEDpin 7#define buttonpin 2volatile 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(200);}}
5. Video Praktikum[KEMBALI]
6. Analisa[KEMBALI]
a. Apa yang terjadi jika pin MISO dilepas?
Jawab: Pin MISO (Master Input Slave Output) berfungsi untuk transmisi data dari MASTER ke SLAVE. Saat MASTER mendapatkan input, data ditransmisikan ke SLAVE melalui saluran pada pin MISO untuk ditampilkan pada outputnya. Bila pin MISO dilepas, maka transmisi data dari MASTER ke SLAVE tidak dapat dilakukan.
b. Apakah pin SS bisa digunakan pada pin digital lainnya?
Jawab: Bila pin SS didefinisikan sebagai output pada program arduino, maka pin SS dapat digunakan pada pin digital lainnya. Sedangkan pada komunikasi SPI, pin SS MASTER harus terhubung ke pin SS SLAVE agar komunikasi dapat berjalan.
7. Link Download[KEMBALI]
Download Video Praktikum [disini]
Download Program Arduino [disini]
Download Datasheet Arduino Uno [disini]
Download Datasheet LED [disini]
Download Datasheet Button [disini]
Download Datasheet Resistor [disini]
Tidak ada komentar:
Posting Komentar