- Apakah SPI itu?
- Bekerja dari SPI
- Pin SPI di Arduino UNO
- Menggunakan SPI di Arduino
- Komponen yang Diperlukan untuk komunikasi Arduino SPI
- Diagram Sirkuit Komunikasi Arduino SPI
- Cara Memprogram Arduino untuk Komunikasi SPI:
- Penjelasan Pemrograman Magister Arduino SPI
- Penjelasan Pemrograman Slave Arduino SPI
- Bagaimana cara kerja SPI di Arduino? - Ayo kita uji!
Mikrokontroler menggunakan banyak protokol berbeda untuk berkomunikasi dengan berbagai sensor dan modul. Ada banyak jenis protokol komunikasi untuk komunikasi nirkabel dan kabel, dan teknik komunikasi yang paling umum digunakan adalah Komunikasi Serial. Komunikasi serial adalah proses pengiriman data satu bit pada satu waktu, secara berurutan, melalui saluran komunikasi atau bus. Ada banyak jenis komunikasi serial seperti komunikasi UART, CAN, USB, I2C, dan SPI.
Dalam tutorial ini, kita belajar tentang protokol SPI dan cara menggunakannya di Arduino. Kami akan menggunakan Protokol SPI untuk komunikasi antara dua Arduino. Di sini satu Arduino akan bertindak sebagai Master dan yang lainnya akan bertindak sebagai Slave, dua LED dan tombol tekan akan dihubungkan ke kedua Arduino. Untuk mendemonstrasikan komunikasi SPI, kita akan mengontrol LED sisi master dengan menekan tombol di sisi slave dan sebaliknya menggunakan protokol komunikasi SPI Serial.
Apakah SPI itu?
SPI (Serial Peripheral Interface) adalah protokol komunikasi serial. Antarmuka SPI ditemukan oleh Motorola pada tahun 1970. SPI memiliki koneksi full-duplex, artinya data dikirim dan diterima secara bersamaan. Artinya seorang master dapat mengirim data ke slave dan slave dapat mengirim data ke master secara bersamaan. SPI adalah komunikasi serial sinkron artinya jam diperlukan untuk keperluan komunikasi.
Komunikasi SPI sebelumnya dijelaskan di mikrokontroler lain:
- Komunikasi SPI dengan Mikrokontroler PIC PIC16F877A
- Antarmuka LCD TFT Layar Sentuh 3,5 inci dengan Raspberry Pi
- Pemrograman mikrokontroler AVR dengan pin SPI
- Menghubungkan LCD Grafis Nokia 5110 dengan Arduino
Bekerja dari SPI
Sebuah SPI memiliki komunikasi master / Slave dengan menggunakan empat jalur. Sebuah SPI hanya dapat memiliki satu master dan dapat memiliki banyak budak. Master biasanya merupakan mikrokontroler dan budaknya dapat berupa mikrokontroler, sensor, ADC, DAC, LCD, dll.
Di bawah ini adalah representasi diagram blok dari SPI Master dengan Slave Tunggal.
SPI mengikuti empat baris MISO, MOSI, SS, dan CLK
- MISO (Master in Slave Out) - Garis Slave untuk mengirim data ke master.
- MOSI (Master Out Slave In) - Garis Master untuk mengirim data ke periferal.
- SCK (Serial Clock) - Jam berdenyut yang menyinkronkan transmisi data yang dihasilkan oleh master.
- SS (Slave Select) –Master dapat menggunakan pin ini untuk mengaktifkan dan menonaktifkan perangkat tertentu.
SPI Master dengan Banyak Budak
Untuk memulai komunikasi antara master dan slave kita perlu mengatur pin Slave Select (SS) perangkat yang diperlukan ke LOW, sehingga dapat berkomunikasi dengan master. Ketika tinggi, itu mengabaikan tuannya. Ini memungkinkan Anda memiliki beberapa perangkat SPI yang berbagi jalur master MISO, MOSI, dan CLK yang sama. Seperti yang Anda lihat pada gambar di atas, ada empat slave di mana SCLK, MISO, MOSI terhubung ke master dan SS masing-masing slave dihubungkan secara terpisah ke pin SS individu (SS1, SS2, SS3) master. Dengan menyetel pin SS yang diperlukan RENDAH, master dapat berkomunikasi dengan budak itu.
Pin SPI di Arduino UNO
Gambar di bawah ini menunjukkan pin SPI yang ada di Arduino UNO (dalam kotak merah).
Jalur SPI |
Pin di Arduino |
MOSI |
11 atau ICSP-4 |
SUP KEDELAI JEPANG |
12 atau ICSP-1 |
SCK |
13 atau ICSP-3 |
SS |
10 |
Menggunakan SPI di Arduino
Sebelum memulai pemrograman untuk komunikasi SPI antara dua Arduino. Kita perlu belajar tentang pustaka Arduino SPI yang digunakan di Arduino IDE.
Perpustakaan
1. SPI. Mulai ()
USE: Untuk menginisialisasi bus SPI dengan mengatur SCK, MOSI, dan SS ke output, menarik SCK dan MOSI rendah, dan SS tinggi.
2. SPI.setClockDivider (pembagi)
GUNAKAN: Untuk Mengatur pembagi jam SPI relatif terhadap jam sistem. Pembagi yang tersedia adalah 2, 4, 8, 16, 32, 64 atau 128.
Jangka pembagi garis:
- SPI_CLOCK_DIV2
- SPI_CLOCK_DIV4
- SPI_CLOCK_DIV8
- SPI_CLOCK_DIV16
- SPI_CLOCK_DIV32
- SPI_CLOCK_DIV64
- SPI_CLOCK_DIV128
3. SPI.attachInterrupt (handler)
PENGGUNAAN: Fungsi ini dipanggil ketika perangkat slave menerima data dari master.
4. Transfer SPI (val)
USE: Fungsi ini digunakan untuk mengirim dan menerima data secara bersamaan antara master dan slave.
Jadi sekarang mari kita mulai dengan demonstrasi praktis dari protokol SPI di Arduino. Dalam tutorial ini kita akan menggunakan dua arduino, satu sebagai master dan satu lagi sebagai slave. Kedua Arduino dipasang dengan LED & tombol tekan secara terpisah. Master LED dapat dikontrol dengan menggunakan tombol tekan budak Arduino dan LED budak Arduino dapat dikontrol oleh tombol tekan master Arduino menggunakan protokol komunikasi SPI yang ada di arduino.
Komponen yang Diperlukan untuk komunikasi Arduino SPI
- Arduino UNO (2)
- LED (2)
- Tombol Tekan (2)
- Resistor 10k (2)
- Resistor 2.2k (2)
- Papan tempat memotong roti
- Menghubungkan Kabel
Diagram Sirkuit Komunikasi Arduino SPI
Diagram rangkaian di bawah ini menunjukkan cara menggunakan SPI pada Arduino UNO, tetapi Anda dapat mengikuti prosedur yang sama untuk Komunikasi Arduino Mega SPI atau komunikasi Arduino nano SPI. Hampir semuanya akan tetap sama kecuali nomor pinnya. Anda harus memeriksa pinout Arduino nano atau mega untuk menemukan pin Arduino nano SPI dan pin Arduino Mega, setelah Anda melakukannya semuanya akan sama.
Saya telah membangun sirkuit yang ditunjukkan di atas di atas papan tempat memotong roti, Anda dapat melihat pengaturan sirkuit yang saya gunakan untuk pengujian di bawah ini.
Cara Memprogram Arduino untuk Komunikasi SPI:
Tutorial ini memiliki dua program satu untuk master Arduino dan lainnya untuk budak Arduino. Program lengkap untuk kedua belah pihak diberikan di akhir proyek ini.
Penjelasan Pemrograman Magister Arduino SPI
1. Pertama-tama kita perlu menyertakan perpustakaan SPI untuk menggunakan fungsi komunikasi SPI.
#include
2. Dalam penyiapan batal ()
- Kami Memulai Komunikasi Serial dengan Baud Rate 115200.
Serial.begin (115200);
- Pasang LED ke pin 7 dan tombol Tekan ke pin 2 dan atur masing-masing pin OUTPUT dan INPUT.
pinMode (ipbutton, INPUT); pinMode (LED, OUTPUT);
- Selanjutnya kita mulai komunikasi SPI
SPI. Mulai ();
- Selanjutnya kami mengatur Clockdivider untuk komunikasi SPI. Di sini kami telah menetapkan pembagi 8.
SPI.setClockDivider (SPI_CLOCK_DIV8);
- Kemudian atur pin SS TINGGI karena kami tidak memulai transfer apa pun ke slave arduino.
digitalWrite (SS, HIGH);
3. Dalam lingkaran kosong ():
- Kami membaca status pin tombol tekan yang terhubung ke pin2 (Master Arduino) untuk mengirimkan nilai tersebut ke budak Arduino.
buttonvalue = digitalRead (ipbutton);
- Atur Logika untuk Pengaturan nilai x (Untuk dikirim ke budak) tergantung pada input dari pin 2
jika (nilai tombol == TINGGI) { x = 1; } lain { x = 0; }
- Sebelum mengirim nilai kita perlu LOW nilai slave pilih untuk memulai transfer ke slave dari master.
digitalWrite (SS, LOW);
- Inilah langkah penting, pada pernyataan berikut kami mengirimkan nilai tombol tekan yang disimpan dalam variabel Mastersend ke arduino slave dan juga menerima nilai dari slave yang akan disimpan dalam variabel Mastereceive .
Mastereceive = SPI.transfer (Mastersend);
- Setelah itu tergantung pada nilai Mastereceive, kita akan menyalakan atau mematikan LED Master Arduino.
if (Mastereceive == 1) { digitalWrite (LED, HIGH); // Set pin 7 HIGH Serial.println ("Master LED ON"); } lain { digitalWrite (LED, LOW); // Set pin 7 LOW Serial.println ("Master LED OFF"); }
Catatan: Kami menggunakan serial.println () untuk melihat hasil di Serial Motor Arduino IDE. Periksa Video di akhir.
Penjelasan Pemrograman Slave Arduino SPI
1. Pertama-tama kita perlu menyertakan perpustakaan SPI untuk menggunakan fungsi komunikasi SPI.
#include
2. Dalam penyiapan batal ()
- Kami Memulai Komunikasi Serial dengan Baud Rate 115200.
Serial.begin (115200);
- Pasang LED ke pin 7 dan tombol Tekan ke pin2 dan atur masing-masing pin OUTPUT dan INPUT.
pinMode (ipbutton, INPUT); pinMode (LED, OUTPUT);
- Langkah penting di sini adalah pernyataan berikut
pinMode (MISO, OUTPUT);
Pernyataan di atas menetapkan MISO sebagai OUTPUT (Harus Mengirim data ke Master IN). Jadi data dikirim melalui MISO dari Slave Arduino.
- Sekarang Nyalakan SPI dalam Mode Slave dengan menggunakan SPI Control Register
SPCR - = _BV (SPE);
- Kemudian nyalakan interupsi untuk komunikasi SPI. Jika data diterima dari master maka Interrupt Routine dipanggil dan nilai yang diterima diambil dari SPDR (SPI Data Register)
SPI.attachInterrupt ();
- Nilai dari master diambil dari SPDR dan disimpan dalam variabel yang diterima Slaver . Ini terjadi dalam mengikuti fungsi Rutin Interupsi.
ISR (SPI_STC_vect) { Slavereceived = SPDR; diterima = benar; }
3. Selanjutnya dalam void loop () kita mengatur LED Arduino Slave untuk ON atau OFF tergantung pada nilai yang diterima Slaver.
if (Slavereceived == 1) { digitalWrite (LEDpin, HIGH); // Set pin 7 sebagai HIGH LED ON Serial.println ("Slave LED ON"); } lain { digitalWrite (LEDpin, LOW); // Set pin 7 sebagai LOW LED OFF Serial.println ("Slave LED OFF"); }
- Selanjutnya kita membaca status tombol Push Arduino Slave dan menyimpan nilai di Slavesend untuk mengirim nilai ke Master Arduino dengan memberikan nilai ke register SPDR.
buttonvalue = digitalRead (pin tombol); jika (nilai tombol == TINGGI) {x = 1; } lain {x = 0; } Budak = x; SPDR = Budak;
Catatan: Kami menggunakan serial.println () untuk melihat hasil di Serial Motor Arduino IDE. Periksa Video di akhir.
Bagaimana cara kerja SPI di Arduino? - Ayo kita uji!
Di bawah ini adalah gambar pengaturan akhir untuk komunikasi SPI antara dua Papan Arduino.
Saat tombol tekan di sisi Master ditekan, LED putih di sisi pendukung menyala.
Dan saat tombol tekan di sisi Slave ditekan, LED Merah di sisi Master menyala.
Anda dapat melihat video di bawah ini untuk melihat demonstrasi komunikasi Arduino SPI. Jika Anda memiliki pertanyaan, silakan tinggalkan di bagian komentar, gunakan forum kami.