Arduino adalah kit elektronik atau papan rangkaian elektronik open source yang di dalamnya terdapat komponen utama yaitu sebuah chip mikrokontroler dengan jenis AVR dari perusahaan Atmel.
b. Buzzer
Buzzer adalah sebuah komponen elektronika yang dapat mengubah sinyal listrik menjadi getaran suara. Buzzer dapat bekerja dengan baik dalam menghasilkan frekuensi kisaran 1-5 KHz hingga 100 KHz untuk aplikasi ultrasound. Tegangan operasional buzzer yang umumnya berkisar 3-12 V. Cara Kerja Buzzer yaitu egangan listrik yang mengalir ke buzzer akan menyebabkan gerakan mekanis, gerakan tersebut akan diubah menjadi suara atau bunyi yang dapat didengar oleh manusia.
c. Push Button
Push Button adalah saklar yang berupa tombol dan berfungsi sebagai pemutus atau penyambung arus listrik dari sumber arus ke beban listrik. Push button memiliki kontak NC (normally close) dan NO (normally open). Prinsip kerja push button adalah pemutus dan penyambung aliran listrik. Namun dalam hal ini, ia tak bersifat mengunci. Jadi ia akan kembali ke posisi semua saat selesai ditekan. Saat push button ditekan, ia menjadi bernilai HIGH dan akan menghantarkan arus listrik. Sedangkan apabila dilepas, maka ia bernilai LOW dan memutus arus listrik.
Pada pin digital 10,11,12,13 saling terhubung kedua buah Arduino, kemudian pada pin 2 terhubung ke button dan buzzer. Terdapat Resistor sebesar 1k ohm disetiap kaki (pin 2) Arduino. Data yang dapat dikirimkan dari Master ke Slave (MOSI), maupun sebaliknya (MISO) merupakan bentuk communication-nya (dapat dilihat pada listing program). Adapun ketika button diPull-up, maka akan berlogika high, dan juga mengakibatkan Buzzer berlogika high (aktif/berbunyi). Namun sebelumnya kita perlu mengatur Operating voltage pada buzzer agar selalu lebih kecil daripada tegangan yang didapatnya.
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(2000);
}
}
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);
}
}
Jawab:
Transmisi data pada SPI merupakan
transimisi data full duplex yang artinya pengiriman data dari master ke slave
dan slave ke master terjadi dalam satu waktu atau hubungannya secara timbale
balik. Saat satu kali clock, master mengirimkan data ke slave, lalu slave
membaca data tersebut dan ditempatkan di slave. Begitupun sebaliknya dari slave
data tersebut juga dikirimkan ke master dan master akan menempatkannya pada
line tersebut.
2. Bagaimana cara menghubungkan rangkaian SPI saat menggunakan lebih dari satu slave?
Jawab:
Rangkaian SPI dapat menggunakan
maksimal 4 slave. Apabila lebih dari satu slave, maka rangkaian dan listing
program juga harus diubah atau ditambah.
Terdapat 2 cara yaitu:
a. Daisy Chain Configuration
Pada cara ini master memerlukan satu pin SS untuk berkomunikasi. Master akan mengirimkan sinyal LOW kepada slave untuk mengirimkan data yang berfungsi sebagai inisiasi komunikasi. Selanjutnya master akan mengirimkan data ke slave 1 melalui pin MOSI dan pin SCL juga menghasilkan clock pada saat yang bersamaan. Data yang sudah dikirim ke slave 1 diteruskan ke slave 2 dan seterusnya. Selama proses komunikasi berlangsung, logika pada pin SS tetap kondisi LOW. Master harus mengirimkan sinyal clock yang cukup hingga data sampai pada slave yang terakhir. Jika master ingin mendapatkan respon, ia harus mengirimkan sinyal clock hingga data kembali ke master.
b. Independent Slave Configuration
Kali ini pin SS terhubung ke slave yang berbeda-beda. Jika master ingin berkomunikasi dengan slave tertentu, master akan mengirimkan sinyal LOW ke slave tersebut. Setelah diberi logika LOW ke slave yang dituju, data pada master akan dikirim ke slave melalui pin MOSI. Pada pin SLCK menghasilkan clock pada saat yang bersamaan. Respon akan diterima oleh master dengan cara mengirim lagi sinyal clock. Jadi data akan dikirim oleh slave melalui pin MISO.
Tidak ada komentar:
Posting Komentar