"SPI (SERIAL PHERIPERAL INTERFACE)"
//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 } } |
ANALISA PERCOBAAN 2 SPI:
1. Apakah kit dapat menggunakan lebih dari 1 master? Jelaskan alasannya
Jawab: tidak, karena pada dasarnya untuk mulai komunikasi SPI,bus master harus melakukan clock dengan ctatan frekuensi dan kecepatan transfer data master dan slave harus sama,serta master di hubungkan secara parallel dengan slave,atau dengan kata lain hanya bisa satu master untuk membangkitkan sinyal clock nya
2. Apakah port MISO harus digunakan? Jelaskan alasannya
Jawab: iya harus digunakan,karena Miso artinya master sebagai input dan slave sebagai output jika miso tidak dipakai,maka data dari slave tidak akan bisa terkirim ke master
Tidak ada komentar:
Posting Komentar