1. Komponen
2. Rangkaian Simulasi
a. Rangkaian sebelum dijalankan
3. Flowchart
[kembali]
4. Listing Program
#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(100);
}
else
{
digitalWrite(led, LOW);
}
}
5. Video
Jika pada rangkaian
komunikasi SPI menggunakan 2 slave, bagaimana cara master untuk menentukan
berkomunikasi dengan slavaenya, apakah berkominikasi dengan slave 1 atau 2,
jelaskan secara rangkaian dan program!
Jawab :
SPI merupakan
komunikasi serial pada 2 hardware antara mikroprosesor dan mikroprosesor
ataupun antara mikroprosesor dan device lainnya. Pada SPI dapat menambahkan mikroprosesor
lainnya dengan menggunakan slave select. Ketika master berlogika 1, maka agar
dapat mentransfer data ke slave, slave 1 diberi logika 0 dan slave 1 diberi
logika 1, karena pada komunikasi SPI hanya dapat mentransfer data satu persatu.
Dapat dilihat pada
rangkaian dengan menggunakan 2 slave, cara master untuk berkomunikasi dengan
slave tersebut yaitu dengan memilih
slave dengan menggunakan slave select, dimana pada rangkaian ini program pada
master berlogika 1 akan mentransferkan data ke slave, maka slave 1 pada program
berlogika 0, untuk slave lainnya slave 2 diberi berlogika 1. Slave select pada slave 2 akan dihubungkan
secara paralel pada jalur yang menghubungkan master dan slave 1.
Gambar
1. Rangkaian sebelum dijalankan
Gambar
2. Rangkaian setelah dijalankan
Pada rangkaian tersebut
terdapat pebedaan pada program slavenya yaitu : pada slave 1 diberi logika LOW
dan LOW sedangkan pada slave 2 diberi logika HIGH dan LOW.
·
Slave 1
void loop (void) {
if (process)
{
digitalWrite(led, LOW);
process =
false; //reset the process
Serial.println (buff); //print the array on serial monitor
indx = 0;
//reset button to zero
delay(100);
}
else
{
digitalWrite(led, LOW);
}
·
Slave 2
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(100);
}
else
{
digitalWrite(led, LOW);
}
7. Link Download
Download Rangkaian Simulasi [ DOWNLOAD ]
Download Video Praktikum [ DOWNLOAD ]
Download Program Arduino Master [ DOWNLOAD ]
Tidak ada komentar:
Posting Komentar