- MASTER
#include <SPI.h> //Deklarasi library SPI
#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(1000);
}
}
- SLAVE
#include <SPI.h>
#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);
}
}
Pada rangkaian di atas di pakai 2 arduino. salah satu arduino bertindak sebagai master dan yang satunya bertindak sebagai slave. input yang berupa push button di masukkan pada pin 2 pada arduino master dan output berupa buzzer dihubungkan ke pin 2 arduino slave. arduino master dan arduino slave dihubungkan dengan pin 10 sampai 13 secara komunikasi SPI. Saat rangkaian dijalankan push button ditekan dan mengeluarkan output "0" sehingga pada arduino master diberikan perintah untuk menghidupkan slave select pada arduino master dan melakukan SPI transfer selanjutnya diolah pada arduino slave yang jika process nya true maka buzzer akan menyala tetapi karena di tambahkan resistor 1k ohm maka tegangan untuk menyalakan buzzer tidak cukup sehingga buzzernya mati.
1. Jelaskan transmisi data pada SPI dan gambarkan timing diagram dari transmisi data pada SPI
jawab :
SPI beroperasi berdasarkan shift register baik master device maupun slave device, keduanya akan mempunyai 8 bit shift register. Namun tergantung dari berbagai macam arsitektur mikrokontroler, ada yang bisa memiliki 10 bit ataupun 12 bit shift register.
Untuk memulai komunikasi, bus master melakukan konfigurasi clock, dengan catatan frekuensi atau kecepatan transfer data antara SPI master device dan slave device harus sama, biasanya bisa mencapai beberapa MHz. Master akan memilih perangkat slave dengan mengeluarkan logika 0, lalu master akan menunggu proses yang telah dijadwalkan di master itu sendiri seperti uratan intrupsi timer, konversi analog ke digital (ADC), dll. Lalu setelah periode itu selesai master akan mengeluarkan clock yang pertAnda akan dimulainya proses komunikasi Serial.
Timing diagram
2. Bagaimana cara menghubungkan rangkaian SPi saat menggunakan lebih dari satu slave
Pada Multiple Slave, Pin SS lah yang akan berfungsi untuk memilih slave mana yang akan menerima dan mengirim data. Pins SS ini mempunyai konfigurasi active low, yang berarti kita harus memberikan pulsa 0 untuk memilih slave yang akan kita ajak bertukar data. SPI bus interface dengan beberapa slave device akan dijelaskan dalam diagram di bawah ini:
Tidak ada komentar:
Posting Komentar