2. Rangkaian Simulasi [Kembali]
3. Flowchart [Kembali]
4. Listing Program [Kembali]
//MASTER
#include
<SPI.h>
void setup (void)
{
Serial.begin(115200);
//set baud rate to
115200 for usart
digitalWrite(SS, HIGH);
// disable Slave
Select
SPI.begin ();
SPI.setClockDivider(SPI_CLOCK_DIV8);//divide the clock by 8
}
void loop (void) {
char c;
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>
char buff [50];
volatile byte
indx;
volatile boolean
process;
void setup (void)
{
Serial.begin (115200);
pinMode(MISO, 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) {
process = false; //reset the process
Serial.println (buff); //print the
array on serial monitor
indx= 0; //reset button to zero
}
}
5. Analisa [Kembali]
//MASTER #include
<SPI.h> void setup (void)
{ Serial.begin(115200); //set baud rate to
115200 for usart digitalWrite(SS, HIGH); // disable Slave
Select SPI.begin ();
SPI.setClockDivider(SPI_CLOCK_DIV8);//divide the clock by 8 } void loop (void) { char c; 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> char buff [50]; volatile byte
indx; volatile boolean
process; void setup (void)
{ Serial.begin (115200); pinMode(MISO, 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) { process = false; //reset the process Serial.println (buff); //print the
array on serial monitor indx= 0; //reset button to zero } } |
1
1. 1. Bisakah
pada SPI menggunakan lebih dari 1 master? Jelaskan beserta alasannya
Jawab
:
Menurut
saya tidak bisa, karena pada SPI yang boleh banyak itu slave dikarenakan master
disini untuk menerima atau mengirim data. Kalau master yang boleh hanya 1.
Seperti pada SPI dapat membuat mikrokontroller lain dari slave dan master
logikanya 1. Padas SPI ini clock antara master dengan slave harus sama..
2. 2. Jelaskan
pengaruh input pullup dan pulldown pada rangkaian !
Jawab:
Input pullup dan pulldown berpengaruh pada led dimana apabila button dalam keadaan pullup maka berlogika low atau 0. Ketika keadaan pulldown maka berlogika high atau bernilai 1. Berpengaruh pada led Karena apabila data yang dibaca master selain dari nilai pullup dan pulldown maka led tidak menyala atau berlogika low.
3. 3. Jelaskan
prinsip kerja SPI pada rangkaian
Jawab:
Pada
komunikasi SPI yaitu komunikasi dua arah sinkron artinya slave dan master dapat
berkomunikasi dua arah secara bersama secara sinkron yang di atur oleh clock.
Pada SPI ini membutuhkan 3 buah pin komunikasi yaitu MISO, MOSI, dan SCLK dan 1
buah pin SS/CS untuk mengatur slave atau chip nya. Jadi pada komunikasi SPI ini
terdapat pin MOSI yang megirimkan data dari Master ke Slave sedangkan pin
MISO yang berfungsi meminta data dari Slave ke Master. Pada pin SCLK akan
disinkronkan data data tadi. MOSI dapat memilih Slave mana yang akan dikirimkan
data berdasarkan Slave Select yang diatur pada pin SS.
1.
Tidak ada komentar:
Posting Komentar