#define button 2
void setup (void) {
pinMode(button, INPUT_PULLUP);
Serial.begin(115200 ); //Set baud rate 115200
digitalWrite(SS, HIGH);
// disable Slave Select
SPI.begin ();
SPI.setClockDivider(SPI_CLOCK_DIV8); //divide the clock by 8
}
void loop (void) {
char c;
int nilai=digitalRead(button);
if(nilai==0){
digitalWrite(SS, LOW); //enable Slave Select
// send test string
for (const char * p = "Hello, world!\r" ; c = *p; p++)
{
SPI.transfer (c);
Serial.print(c);
}
digitalWrite(SS, HIGH); // disable Slave Select
delay(2000);
}
}
#define led 2
char buff [50];
volatile byte indx;
volatile boolean process;
void setup (void) {
Serial.begin (115200);
pinMode(led, OUTPUT); // have to send on master in so it set as output
SPCR |= _BV(SPE); // turn on SPI in slave mode
indx = 0; // buffer empty
process = false;
SPI.attachInterrupt(); // turn on interrupt
}
ISR (SPI_STC_vect) // SPI interrupt routine
{
byte c = SPDR; // read byte from SPI Data Register
if (indx < sizeof buff) {
buff [indx++] = c; // save data in the next index in the array buff
if (c == '\r') //check for the end of the word
process = true;
}
}
void loop (void) {
if (process) {
digitalWrite(led, HIGH);
process = false; //reset the process
Serial.println (buff); //print the array on serial monitor
indx = 0; //reset button to zero
delay(1000);
}
else
{
digitalWrite(led, LOW);
}
}
ANALISA PERCOBAAN 2 [SPI]:
1. Bisakah pada SPI menggunakan lebih dari 1
master? Jelaskan beserta alasannya!
Jawab :
Untuk SPI, hanya dapat menggunakan 1 master saja. Hal tersebut dikarenakan Master pada SPI sebagai pengontrol komunikasi serial sinkron pada SPI dimana dapat mengirim atau menerima data. Namun, SPI ini dapat memiliki lebih dari 1 Slave dimana terdapat Slave Select (SS) untuk memilih (mengontrol) Slave mana yang dipilih oleh Master.
2. Jelaskan pengaruh input pullup dan pulldown pada rangkaian !
Pengaruh input pullup dan pulldown pada
rangkaian tersebut ada pada button sebagai data yang akan dibaca oleh
mikrokontroler Master yang kemudian akan mengirimkan paket data (bit-bit) ke
Slave. Berdasarkan program Arduino yang dibuat, ketika button dalam keadaan
pullup, maka button akan menerima logika LOW dari Arduino (bernilai 0) sehingga
ketika terbaca oleh Master, Master akan mengirimkan paket data “1” dimana pada
Slave ketika menerima data “1” berarti LED hidup (berlogika HIGH). Sedangkan
ketika pulldown, button akan menerima logika HIGH (bernilai 1) sehingga ketika terbaca
oleh Master selain dari nilai 0, Master akan mengirimkan data “2” dimana pada
Slave ketika menerima data selain dari “1” berarti LED mati (berlogika LOW).
3. Jelaskan prinsip kerja SPI pada rangkaian!
Jawab :

Untuk Slave, dideklarasikan library SPI,
LED pada pin 2 Slave, variable buff dengan tipe data char dan arry 50, volatile
byte indx, dan volatile boolean process. Pada fungsi void setup (void) terdapat
set baud rate 115200, LED sebagai output, menghidupkan SPI dalam mode Slave,
indx = 0, process = false berarti tidak ada proses atau dimatikan, dan
menghidupkan interrupt. Pada ISR, terdapat pembacaan byte dari SPI Data
Register. Jika indx < sizeof buff, maka data disimpan pada index selanjutnya
pada array buff dan proses diaktifkan. Kemudian void loop (void), jika process
sebelumnya true, maka LED hidup kemudian proses direset kembali. Lalu,
menampilkan array pada serial monitor, button dreset ke 0, dan delay 1000 ms.
Jika else, LED mati.
Setelah program Arduino untuk Master dan Slave dibuat, lalu dipasang pada Arduino pada rangkaian. Ketika rangkaian dijalankan, ketika button pullup, maka berlogika HIGH sehingga tidak ada pengiriman data, SS tetap tidak aktif, dan LED mati. Jika button pulldown (ditekan), maka berlogika LOW (bernilai 0) dan SS diaktifkan kemudian terjadi transmisi data ke Slave yang telah diprogram. Lalu, LED akan hidup kemudian mati karena proses direset dan proses akan diulang kembali atau LED hidup kembali (void loop (void)).
No comments:
Post a Comment