DAFTAR ISI
1. Komponen
Percobaan 1
-
Komponen [kembali]
- Arduino UNO
- LED
- Button
- Resistor
- Rangkaian Simulasi [kembali]
Prinsip KerjaRangkaian dirangkai untuk komunikasi SPI, output dari rangkaian terletak pada pin 2 pada SLAVE. Saat button ditekan, karena button diset PULLUP, maka akan masuk input ke Arduino berlogika LOW. Data akan dikirimkan dari MASTER ke SLAVE melalui pin MOSI dan diterima pada SLAVE pada pin MOSI juga. Saat data yang terbaca pada SLAVE berlogika LOW pin yang terhubung ke LED akan berlogika HIGH sehingga LED akan menyala
- Flowchart [kembali]
- Listing Program [kembali]
- MASTER
#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_DIV16); //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(1000);
}
else
{
digitalWrite(led, LOW);
}
}
- MASTER
- Video Rangkaian [kembali]
- Kondisi [kembali]
Jalankan rangkaian pada modul
Analisa- Bagaimana jika set baud rate yang di master dan di slave di change?
Baud rate merupakan seberapa cepat data yang dikirimkan melalui komunikasi serial. Untuk menjalankan rangkaian harus digunakan baud rate yang sama. Semakin besar nilai baud rate yang digunakan maka data yang dikirimkan akan semakin cepat - Jelaskan apakah percobaan berupa simplex, half duplex, atau full duplex
Dari percobaan yang dilakukan, komunikasi antar Arduino terjadi secara full-duplex, karena pada pin MISO dan MOSI hidup atau berlogika HIGH disaat yang bersamaan, yang berarti MASTER mengirimkan data melalui MOSI dan SLAVE juga mengirimkan data melalui MISO sehingga terjadi komunikasi secara full-duplex. - SPI_CLOCK_DIV8. Kenapa 8? Bagaimana jika diganti dengan DIV6?
SPI_CLOCK_DIV berfungsi untuk konfigurasi clock data pada parameter SPI. DIV8 yang berarti kecepatan Arduino mengirimkan data SPI sebesar 8 Mhz. Pembagi clock pada Arduino yang dapat digunakan adalah DIV2, DIV4, DIV8, DIV16, DIV32, DIV64 atau DIV128. Sehingga jika diganti dengan DIV6 maka program tidak akan berjalan.
- Bagaimana jika set baud rate yang di master dan di slave di change?
- Link Download [kembali]
Klik disini << HTML
Klik disini << Rangkaian Simulasi + Listing Program
Klik disini << Video Simulasi
Klik disini << Datasheet
Tidak ada komentar:
Posting Komentar