[KEMBALI KE MENU SEBELUMNYA]
3.Rangkaian Simulasi [Kembali]
a. Flowchart Listing Program Master
b. Flowchart Listing Program Slave
a. Listing Program Master
//MASTER
#include <SPI.h> //Deklarasi library SPI
#define button 2
char data = "1";
void setup (void) {
pinMode(button, INPUT_PULLUP);
Serial.begin(115200); //untuk memulai serial dengan Set baud rate 115200 untuk USART dan SPI
digitalWrite(SS, HIGH); // disable Slave Select
SPI.begin (); // untuk memulai komunikasi SPI
SPI.setClockDivider(SPI_CLOCK_DIV8); //divide the clock by 8
}
void loop (void) {
char c; // menginisialisasikan variabel C dengan tipe data char
int nilai = digitalRead(button);
if (nilai == 0) {
digitalWrite(SS, LOW); // enable Slave Select untuk menghidupkan dari slave dibuat low karena si slave akan hidup ketika diberi input low karena dari master berlogika HIGH supaya arus mengalir
// send test string
for (const char * p = "1" ; c = *p; p++)
{
SPI.transfer (c);
Serial.print(c); // sebagai penghubung serial monitornya
}
SPI.transfer("1");
digitalWrite(SS, HIGH); // disable Slave Select menggunakan HIGH dikarenkan HIGH bertemu HIGH akan mati
delay(2000);
}
}
b. Listing Program Slave
//SLAVE
#include <SPI.h> //Deklarasi library SPI
#define buzzer 2
char buff [50]; // untuk menginisialisasikan variabel buff pada spi.h tinggal tambahkan library
volatile byte indx;// tidak ada koma
volatile boolean process;// tidak ada koma dan boolean merupakan tipe data yang akan memilih
void setup (void) {
Serial.begin (115200);// serial begin antara master dan slave harus sama
pinMode(buzzer, 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;// Ketika dia masuk maka dia akan mati
SPI.attachInterrupt(); // turn on interrupt
}
ISR (SPI_STC_vect) // SPI interrupt routine // fungsi yg digunakan Ketika program sudah berjalan
{ // fungsi yg digunakan Ketika program sudah berjalan
byte c = SPDR; // read byte from SPI Data Register from slave
if (indx < sizeof buff) {
buff [indx++] = c; // save data in the next index in the array buff
if (c == '1') //check for the end of the word
process = true;
}
if (c == '1') { //check for the end of the word
process = true;
}
}
void loop (void) {
if (process) {
digitalWrite(buzzer, 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(buzzer, LOW);
}
}
1. Jelaskan transmisi data pada SPI dan gambarkan
timing diagram dari transmisi data pada SPI
Jawab:
Komunikasi SPI memiliki 4 jalur yaitu MOSI, MISO, SCK, dan SS. Karena SPI memiliki jalur komunikasi MISO dan MOSI, maka komunikasi SPI dapat melakukan komunikasi jenis full dupelex yaitu slave dapat mengirimkan data ke master bersamaan saat master mengirimkan data ke slave. Untuk timing diagram transmisi data SPI dapat dilihat pada gambar dibawah.
2. Bagaimana cara menghubungkan rangkaian SPI saat menggunakan lebih dari satu slave
Jawab:
Rangkainan SPI dengan lebih dari satu slave dihubungkan secara parallel antara kabel master dengan slave, lalu jalur SS (slave select ) digunkan untuk memilih slave yang akan digunakan oleh master. Untuk lebih jelas dapat dilihat pada gambar dibawah.
Tidak ada komentar:
Posting Komentar