Buatlah kondisi awal LED mati, lalu hidup berkedip dengan delay 1000 ms
2. Gambar Rangkaian Simulasi
[Kembali]
3. Vidio SImulasi
[Kembali]
4. Prinsip Kerja Rangkaian
[Kembali]
Percobaan ini merupakan percobaan 2 kondisi 2 dimana harus membuat rangakaian pada modul dan LED berkedip setiap 1 s. Percobaan ini menggunakan komunikasi SPI, berbeda dengan UART, SPI adalah syncronus, jadi hanya menggunakan clock. Pada SPI juga bisa mengunakan 1 master dan beberapa slave. SPI tidak lagi munggukan TX RX seperti pada UART, SPI menggunakan MOSI, MISO, SCLK, dan SS.
Listning 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(500);
}
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(115200);
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(500);
}
}
Pada program di atas dapat diketahui bahwa ada 1 master dan 1 slave. masing masing master dan slave mempunyai input button dan LED, dan masing masing tersambung dengan pin 10,11,12,13.
Pada master akan mengirimkan dan juga menerima dari slave. sebelum mengirim, master harus terlebih dahulu memilih slave dengan sintak SS, ketika SS LOW barulah master dapat mengirimkan data. Untuk yang mengirim dibuat variabel baru yaitu x, dan x ini merupakan nilai yang akan di kirim ke slave. Ketika pembacaan nilai pada button adalah high maka master akan mingirimkan 1 ke slave dan untuk yang lain master mengirimkan 0. Untuk penerimaan data dari slave, jika data diterima adalah 1 maka LED akan menyala, dan lainya akan padam.
Pada slave juga melalukan hal sama seperti pada master, tetapi sebelum menerima diberi sintak Slavereceived = SPDR; agar data dapat diperoleh dari slave, pada sisi penerima ketika menerima 1 maka LED hidup jika yang lain LED mati. Pada bagian pengiriman juga mendeklasikan variabel x untuk pembacaan nilai button.
5. Link Download
[Kembali]
Tidak ada komentar:
Posting Komentar