a. Arduino
b. LED
c. Resistor
d. Push Button
Pada percobaan 2 tentang komunikasi SPI, digunakan 2 buah arduino, sebuah LED, sebuah resistor, dan sebuah push button. Pada rangkaian, pin digital 11, 12, dan 13 arduino MASTER akan dihubungkan ke pin digital 11, 12, dan 13 arduino SLAVE, yang mana pin tersebut merupakan pin SPI pada arduino UNO. Input (push button) yang mengirim data berupa serial/bit data akan masuk ke arduino MASTER, lalu diteruskan ke arduino SLAVE, kemudian arduino SLAVE akan menghidupkan LED. Hal ini berlaku sebaliknya jika menggunakan pin MOSI.Pada listing program arduino MASTER, diawali dengan pendeklarasan library SPI.h. Pada void setup, serial.begin (115200) digunakan untuk memulai serial dengan kecepatan 115.200. Kemudian, digital.write (SS, HIGH) merupakan slave select, yang mana keadaannya akan tetap HIGH. SPI.begin digunakan untuk memulai komunikasi serialnya. Selanjutnya pada void loop, diinisialisasikan variabel "c" dengan tipe data char. digitalWrite (SS, LOW) adalah slave select yang mana keadaannya LOW agar arus listrik dapat mengalir dan menghidupkan LED. SPI.transfer adalah fungsi untuk mentransfer karakter yang didapat dari push button. Setelah perulangan ini dilakukan, maka akan dimatikan dengan cara menjadikan keadaan arduino SLAVE menjadi HIGH. Keadaan ini akan bertahan selama selang waktu 2000 ms.Pada listing program SLAVE, setelah dideklarasikan library SPI.h, char buff digunakan untuk menginisialisasikan variabel buff yang ada pada SPI.h. Volatile byte dan volatile boolean adalah tipe data yang tidak memiliki koma. Pada void setup, dinyatakan bahwa pin.Mode MISO (master input slave output) sebagai output. Indx = 0, process = failed menyatakan bahwa apabila indx masuk = 0, maka dia akan mati. Dibuatlah fungsi lain, byte c = SPDDR untuk membaca dari SLAVE. Setelah dibaca, maka dibuat perulangan; ketika data tersebut lebih kecil dari index, maka akan mengalir proses ke true atau data akan terkirim. Pada void loop, dibuat perulangan; jika process = failed, maka akan direset, sedangkan jika process = true, maka LED akan hidup.
A. Arduino MASTER
B. Arduino SLAVE
A. Arduino MASTER#include <SPI.h> //Deklarasi library SPI#define button 2void setup (void) {pinMode(button, INPUT_PULLUP);Serial.begin(115200 ); //Set baud rate 115200digitalWrite(SS, HIGH);// disable Slave SelectSPI.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 stringfor (const char * p = "Hello, world!\r" ; c = *p; p++){SPI.transfer (c);Serial.print(c);}digitalWrite(SS, HIGH); // disable Slave Selectdelay(2000);}}B. Arduino SLAVE#include <SPI.h>#define led 2char 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 outputSPCR |= _BV(SPE); // turn on SPI in slave modeindx = 0; // buffer emptyprocess = false;SPI.attachInterrupt(); // turn on interrupt}ISR (SPI_STC_vect) // SPI interrupt routine{byte c = SPDR; // read byte from SPI Data Registerif (indx < sizeof buff) {buff [indx++] = c; // save data in the next index in the array buffif (c == '\r') //check for the end of the wordprocess = true;}}void loop (void) {if (process) {digitalWrite(led, HIGH);process = false; //reset the processSerial.println (buff); //print the array on serial monitorindx = 0; //reset button to zerodelay(1000);}else{digitalWrite(led, LOW);}}
Komunikasi SPI
1. Apa
fungsi library SPI.h ?
Jawab :
Library SPI.h berfungsi menyelesaikan
komunikasi serial sinkron SPI pada Arduino, yang mana serial sinkron adalah protocol
data serial yang membutuhkan clock untuk menjalankannya.
2. Bagaimana
jika pin SS tidak dihubungkan?
Jawab :
Jika pin SS tidak dihubungkan, maka LED
tidak akan menyala. Hal itu disebabkan karena pin SS (slave select/chip select)
adalah jalur Arduino MASTER untuk memilih Arduino SLAVE mana yang akan
menjalankan perintah.
3. Jika
pada push button (input) dan led (output) ditambahkan resistor 100k, bagaimana
pengaruhnya terhadap jalannya rangkaian?
Jawab :
Jika ditambahkan resistor sebesar 100k,
maka LED tidak bisa menyala, karena hambatan yang semakin besar sehingga arus
yang mengalir akan semakin kecil dan tidak bisa menghidupkan LED.
4. Bisakah
menggunakan banyak master? Jelaskan alasannya!
Jawab :
Tidak bisa, karena komunikasi SPI hanya terbatas antara 1 master dengan beberapa slave. Pada komunikasi SPI juga hanya terdapat pin SS (slave select) yang berfungsi memilih slave mana yang akan diberi perintah. Jika terdapat banyak master dan kondisinya beberapa master tersebut memilih slave yang sama, maka akan terjadi tabrakan data.
Download video simulasi [di sini]Download rangkaian [di sini]Download HTML [di sini]Download library Arduino [di sini]Download listing program arduino MASTER [di sini]Download listing program arduino SLAVE [di sini]
Tidak ada komentar:
Posting Komentar