#include <SPI.h> //Deklarasi library SPI
#define button 2 // Deklarasi pin 2 untuk Button
void setup (void) {
pinMode(button, INPUT_PULLUP); // Deklarasi button sebagai input dalam kondisi pull-up
Serial.begin(115200); //set baud rate to 115200 for usart
digitalWrite(SS, HIGH); // disable Slave Select
SPI.begin (); //memulai komunikasi SPI
SPI.setClockDivider(SPI_CLOCK_DIV8);//divide the clock by 8
}
void loop (void) {
char c; // deklarasi variable c
int nilai = digitalRead(button); // Deklarasi variable nilai dan hasil pembacaan kondisi
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); // Data dari master dikirimkan
Serial.print(c); // Mencetak data
}
digitalWrite(SS, HIGH); // disable Slave Select
delay(2000);
}
}
#include <SPI.h> //Deklarasi library SPI
#define led 7// Deklarasi pin 2 untuk LED
char buff [50]; // Deklarasi variable buff dengan array 50
volatile byte indx; //Deklarasi variable indx
volatile boolean process; //Deklarasi variable process
void setup (void) {
Serial.begin (115200); // set baud rate 115200
pinMode(led, OUTPUT); // have to send on master in so it set as output
SPCR |= _BV(SPE); // turn on SPI in slave mode Control data dari master
indx = 0; // atur nilai variable menjadi = 0
process = false; // memasukkan false ke dalam variable process
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) { //kondisi saat nilaiindx < dari jumlah array 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; //Memasukkan nilai true pada variable process
}
}
void loop (void) {
if (process) {
digitalWrite(led, HIGH); // LED menyala
process = false; //memberikan nilai false pada variable process / reset variable process
Serial.println (buff); //print the array on serial monitor
indx= 0; //reset button to zero
delay(1000);
}
else
{
digitalWrite(led, LOW);
}
}
1. Apa pengaruh perbedaan dari baud ratenya dari 9600 menjadi 115200 pada master dan slave
Jawab:
Baud rate berfungsi sebagai seberapa cepat data yang akan dikirimkan. Pengaruh baud rate pada percobaan, jika semakin besar nilai baud rate maka semakin cepat data yang akan dikirimkan. Nilai baud rate yang umum digunakan yaitu sebesar 9600. Pada percobaan, nilai baudrate pada arduino Slave dan Master diganti menjadi 115200 sehingga data yang dikirimkan dengan kecepatan 115200 dengan satuan bit per secon (bps). Tetapi pada kenyataannya jika diubah nilai baud rate hanya pada salah satu arduino misalnya Slave saja menjadi 115200 sedangkan baud rate pada Master tetap 9600, maka data tidak dapat di terima pada Slave sehingga LED mati. Dan berlaku juga sebaliknya nilai baud rate Master 115200 sedangkan baud rate pada Slave tetap 9600 LED tetap mati. Maka Nilai konfigurasi baud rate pada Master dan Slave harus sama agar data dapat diterima pada Slave. Untuk kondisi ini dapat diatur nilai konfigurasi baud rate pada Master dan Slave bisa bernilai sama 115200 atau 9600 sehingga data dapat dikirm dan diterima. Pada percobaan, jika nilai baud ratenya sama maka LED akan menyala.
2. Jelaskan apakah percobaan berupa simplex, half duplex, atau full duplex
Jawab:
Pada rangkaian SPI melakukan perintah pengiriman data dengan cara Full-Duplex. Sehingga Master dapat mengirim data dan juga dapat menerima data secara bersamaan.
-Jika dari Master yang mengirim data maka dan Slave menerima data. Maka pin MOSI akan aktif pada arduino Master dan Slave.
Analisa Program
Pada program fungsi void setup digitalWrite(SS, HIGH); yang berarti pin SS berlogika 1 sebagai pengirim data atau sebagai Master , maka sebelumnya slave harus dalam kondisi high atau mematikan pin SS lalu pada fungsi void loop digitalWrite(SS, LOW); yang berarti pin SS mati atau menerima data sebagai slave maka berlogika 0.
Pada program Slave, SPCR |= _BV(SPE). SPCR yang artinya SPI Control Register merupakan register dari Master Device, digunakan untuk membaca keadaan/ data. Dan dalam keadaan mode slave. Sintaks byte c = SPDR untuk membaca dan mengirim data pada register SPI. Swdangkan
-Sedangkan pada saat Slave yang mengirim data sedangkan Master menerima data. Maka pin MISO yang aktif pada arduino dan slave.
3. SPI_CLOCK_DIV8. Kenapa 8? Bagaimana jika diganti dengan 1?
Jawab:
Pada sintaks SPI_CLOCK_DIV berfungsi untuk konfigurasi clock data pada parameter SPI. Dengan kata lain, sintaks SPI_CLOCK_DIV berfungsi sebagai waktu pengiriman data pada SPI. Pada modul digunakan 8 yang artinya kecepatan mengirim data SPI sebsesar 8 Mhz. Kecepaatan clock pada SPI yang bisa adalah 2, 4, 8, 16, 32, 64 atau 128. Sehingga jika diganti dengan 1 maka program akan error.
7. Link Download [Daftar]
Tidak ada komentar:
Posting Komentar