LAPORAN AKHIR 2
Percobaan 6 (Komunikasi SPI)
1. Rangkai semua komponen sesuai dengan percobaan yang dipilih
2. Buat program di aplikasi aduino IDE
3. Hubungkan perangkat arduino ke perangkat laptop
4. Jalankan program pada arduino dan uji cobakan sesuai dengan modul
2. Hardware dan Diagram Blok [Kembali]
3. Rangkaian Simulasi dan Prinsip Kerja
[Kembali]
Rangkaian percobaan tersebut mengimplementasikan komunikasi SPI (Serial Peripheral Interface) antara dua Arduino, di mana satu Arduino bertindak sebagai master dan yang lainnya sebagai slave. Pada Arduino master, terdapat DIP switch yang digunakan untuk mengatur pola LED yang ditampilkan pada dot matrix yang terhubung ke Arduino slave.
Pada setup Arduino master, komunikasi SPI diinisialisasi dengan menggunakan fungsi SPI.begin(). Pin SS (Slave Select) diatur sebagai HIGH untuk tidak memilih slave secara langsung. Selain itu, pin DIP switch diatur sebagai input dengan resistor pull-up internal untuk membaca status dari DIP switch. Serial communication juga diinisialisasi untuk keperluan debugging.
Pada loop Arduino master, Arduino membaca status dari DIP switch dan memperbarui pola LED yang akan dikirim ke Arduino slave. Nilai yang dikirim (Mastersend) berdasarkan posisi DIP switch yang dipilih. Kemudian, Arduino master mengirim nilai ini melalui SPI ke Arduino slave menggunakan fungsi SPI.transfer().
Pada Arduino slave, setup dilakukan dengan mengaktifkan SPI dan inisialisasi dot matrix menggunakan library LedControl. Interrupt SPI diaktifkan untuk menangkap data yang dikirim oleh Arduino master.
Pada loop Arduino slave, Arduino menunggu data yang diterima dari Arduino master. Jika data diterima, Arduino slave memperbarui pola LED pada dot matrix sesuai dengan data yang diterima dari Arduino master.
4. Flowchart [Kembali]
A. Listing Program
//arduino master
#include <SPI.h>
#include <SPI.h>
int dip[] = {2, 3, 4, 5, 6, 7, 8, 9};
int dipvalue[8] = {};
void setup() {
SPI.begin();
SPI.setClockDivider(SPI_CLOCK_DIV8);
digitalWrite(SS, HIGH); // Tidak memilih slave saat ini
for (int i = 0; i < 8; i++) {
pinMode(dip[i], INPUT_PULLUP); // Mengatur pin DIP switch sebagai input dengan pull-up resistor
}
Serial.begin(9600);
}
void loop(void) {
byte Mastersend;
// Membaca status DIP switch dan mengupdate pola LED
int x = 1;
for(int i = 0; i < 8; i++) {
dipvalue[i] = digitalRead(dip[i]);
if (dipvalue[i] == LOW) {
x = dip[i];
}
}
digitalWrite(SS, LOW);
Mastersend = x;
Serial.println(Mastersend);
SPI.transfer(Mastersend); // Kirim nilai Mastersend ke slave dan terima nilai dari slave
}
//arduino slave
#include <SPI.h>
#include <LedControl.h> // Library untuk LED Dot Matrix
const int SS_PIN = 10; // Slave Select pin
LedControl lc = LedControl(2, 3, 4, 1); // Pin DIN, CLK, LOAD (CS), dan jumlah Dot Matrix yang dihubungkan ke Arduino
volatile byte po;
volatile boolean received = false;
void setup() {
SPCR |= _BV(SPE);
lc.shutdown(0, false); // Mengaktifkan display
lc.setIntensity(0, 8); // Mengatur kecerahan LED (nilai antara 0 dan 15)
lc.clearDisplay(0); // Membersihkan tampilan dot matrix
Serial.begin(9600);
SPI.attachInterrupt();
}
ISR (SPI_STC_vect) {
po = SPDR;
received = true;
}
void loop() {
Serial.println(po);
Serial.println(received);
if (received) { // Jika dipilih oleh master
byte patterns[8];
// Menerima data pola LED dari master
for (int i = 0; i < 8; i++) {
patterns[i] = po;
}
// Menampilkan pola LED pada dot matrix
for (int row = 0; row < 8; row++) {
lc.setRow(0, row, patterns[row]);
}
}
}
B. Flowchart
5. Kondisi [Kembali]
Percobaan 6: Komunikasi SPI
6. Video Demo [Kembali]
7. Analisa [Kembali]
1. Apa jenis komunikasi yang digunakan?
jawab: Pada percobaan ini, Arduino master dan slave saling berkomunikasi menggunakan protokol SPI (Serial Peripheral Interface). Arduino master mengirimkan data melalui saluran MOSI dan secara bersamaan menerima data dari saluran MISO yang dikirim oleh Arduino slave. Komunikasi ini ditandai dengan penggunaan fungsi-fungsi khusus seperti `SPI.begin()`, `SPI.transfer()`, dan `SPI.attachInterrupt()` untuk mengatur komunikasi SPI antara kedua perangkat. Pada Arduino master, penggunaan fungsi `SPI.transfer()` digunakan untuk mengirimkan data ke slave dan menerima data dari slave. Sementara itu, Arduino slave menggunakan fungsi `SPI.attachInterrupt()` untuk menangani interupsi dari master dan menerima data yang dikirim oleh master melalui saluran MISO.
2. Berdasarkan program, bagaimana cara master memilih slave?
Jawab: Dalam program yang dipakai pada percobaan 6, cara master memilih slave adalah melalui pengaturan saluran SPI yang ditandai dengan pin SS (Slave Select). Pada saat master ingin berkomunikasi dengan slave tertentu, master akan menurunkan logika pada pin SS yang terhubung ke slave yang diinginkan. Dalam kasus ini, perintah `digitalWrite(SS, LOW);` digunakan pada Arduino master untuk memilih slave saat ini sebelum melakukan transfer data melalui protokol SPI. Setelah komunikasi selesai, master mengembalikan logika pin SS menjadi HIGH untuk mengakhiri koneksi dengan slave tersebut. Dengan demikian, pengaturan pin SS menjadi kunci dalam pemilihan slave yang akan berkomunikasi dengan master pada saat tertentu.
8. Download File [Kembali]
Download Html klik disini
Download Video Simulasi klik disini
Download Datasheet Arduino Uno klik disini
Download Datasheet Dot Matrix klik disini
Download Datasheet Dip Switch klik disini
Tidak ada komentar:
Posting Komentar