1. Komponen [kembali]
#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);
}
}
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 :
Pada rangkaian terdapat 2 buah
Arduino (Master dan Slave), button, LED, dan ground. Untuk menjalankan
rangkaian maka dibuat program Arduino untuk Master dan Slave. Untuk Master,
dideklarasikan library SPI dan button yang terhubung pada pin 2 sebagai input
pullup. Baud rate disetkan sebesar 115200. Slave select (SS) dideklarasikan
berlogika HIGH sehingga mematikan SS. Lalu, SPI.begin dan clock pada SPI dibagi
atas 8. Perintah-perintah tersebut dieksekusi sekali (void setup (void)).
Kemudian, fungsi void loop (void) yang dieksekusi berulang. Variabel c dibuat
dengan tipe data char dan nilai dari button akan dibaca oeh Master. Jika
nilainya 0, maka SS diaktifkan yang berarti test string dikirim. Kemudian,
perulangan for (const char * p = "Hello, world!r" ; c =
*p; p++), lalu data c dikirimkan. Setelah perulangan for, SS dimatikan kembali
dan delay 2000 ms.
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)).
a. 7. Link Download [kembali]
Download Video Praktikum [ Download ]
Download HTML [ Download ]
Tidak ada komentar:
Posting Komentar