Antarmuka SPI Dan Arduino

Daftar Isi:

Antarmuka SPI Dan Arduino
Antarmuka SPI Dan Arduino

Video: Antarmuka SPI Dan Arduino

Video: Antarmuka SPI Dan Arduino
Video: Видеоуроки по Arduino. Интерфейсы SPI (8-я серия, ч1) 2024, November
Anonim

Kami mempelajari antarmuka SPI dan menghubungkan register geser ke Arduino, yang akan kami akses menggunakan protokol ini untuk mengontrol LED.

Antarmuka SPI
Antarmuka SPI

Diperlukan

  • -Arduino;
  • - register geser 74HC595;
  • - 8 LED;
  • - 8 resistor 220 Ohm.

instruksi

Langkah 1

SPI - Serial Peripheral Interface atau "Serial Peripheral Interface" adalah protokol transfer data sinkron untuk menghubungkan perangkat master dengan perangkat periferal (slave). Master sering berupa mikrokontroler. Komunikasi antar perangkat dilakukan melalui empat kabel, itulah sebabnya SPI kadang-kadang disebut sebagai "antarmuka empat kabel". Ban ini adalah:

MOSI (Master Out Slave In) - jalur transmisi data dari master ke perangkat slave;

MISO (Master In Slave Out) - saluran transmisi dari slave ke master;

SCLK (Jam Serial) - pulsa jam sinkronisasi yang dihasilkan oleh master;

SS (Slave Select) - jalur pemilihan perangkat budak; ketika pada baris "0", budak "mengerti" bahwa itu sedang diakses.

Ada empat mode transfer data (SPI_MODE0, SPI_MODE1, SPI_MODE2, SPI_MODE3), karena kombinasi polaritas pulsa clock (kami bekerja pada level HIGH atau LOW), Clock Polarity, CPOL, dan fase pulsa clock (sinkronisasi di tepi naik atau turunnya pulsa clock), Clock Phase, CPHA.

Gambar menunjukkan dua opsi untuk menghubungkan perangkat menggunakan protokol SPI: independen dan bertingkat. Ketika terhubung secara independen ke bus SPI, master berkomunikasi dengan setiap budak secara individual. Dengan kaskade - perangkat budak dipicu secara bergantian, dalam kaskade.

Jenis koneksi SPI
Jenis koneksi SPI

Langkah 2

Di Arduino, bus SPI berada di port tertentu. Setiap papan memiliki tugas pin sendiri. Untuk kenyamanan, pin diduplikasi dan ditempatkan pada konektor ICSP (In Circuit Serial Programming) yang terpisah. Harap dicatat bahwa tidak ada pin pilih budak pada konektor ICSP - SS, karena diasumsikan bahwa Arduino akan digunakan sebagai master pada jaringan. Tetapi jika perlu, Anda dapat menetapkan pin digital Arduino sebagai SS.

Gambar menunjukkan penetapan standar pin ke bus SPI untuk Arduino UNO dan Nano.

Implementasi SPI di Arduino
Implementasi SPI di Arduino

Langkah 3

Sebuah perpustakaan khusus telah ditulis untuk Arduino yang mengimplementasikan protokol SPI. Terhubung seperti ini: di awal program, tambahkan #include SPI.h

Untuk mulai bekerja dengan protokol SPI, Anda perlu mengatur pengaturan dan kemudian menginisialisasi protokol menggunakan prosedur SPI.beginTransaction (). Anda dapat melakukan ini dengan satu instruksi: SPI.beginTransaction (SPISettings (14000000, MSBFIRST, SPI_MODE0)).

Ini berarti bahwa kami menginisialisasi protokol SPI pada frekuensi 14 MHz, transfer data berjalan, mulai dari MSB (bit paling signifikan), dalam mode "0".

Setelah inisialisasi, kami memilih perangkat slave dengan meletakkan pin SS yang sesuai dalam status LOW.

Kemudian kami mentransfer data ke perangkat budak dengan perintah SPI.transfer ().

Setelah transmisi, kami mengembalikan SS ke status TINGGI.

Bekerja dengan protokol diakhiri dengan perintah SPI.endTransaction(). Sebaiknya meminimalkan waktu eksekusi transfer antara instruksi SPI.beginTransaction() dan SPI.endTransaction() sehingga tidak ada tumpang tindih jika perangkat lain mencoba menginisialisasi transfer data menggunakan pengaturan yang berbeda.

transmisi SPI
transmisi SPI

Langkah 4

Mari kita pertimbangkan aplikasi praktis dari antarmuka SPI. Kami akan menyalakan LED dengan mengontrol register geser 8-bit melalui bus SPI. Mari kita hubungkan register geser 74HC595 ke Arduino. Kami terhubung ke masing-masing dari 8 output melalui LED (melalui resistor pembatas). Diagram ditunjukkan pada gambar.

Menghubungkan register geser 74HC595 ke Arduino
Menghubungkan register geser 74HC595 ke Arduino

Langkah 5

Mari kita menulis sketsa seperti itu.

Pertama, mari kita hubungkan perpustakaan SPI dan inisialisasi antarmuka SPI. Mari kita definisikan pin 8 sebagai pin pemilihan slave. Mari kita bersihkan register geser dengan mengirimkan nilai "0" ke sana. Kami menginisialisasi port serial.

Untuk menyalakan LED tertentu menggunakan register geser, Anda perlu menerapkan nomor 8-bit ke inputnya. Misalnya, agar LED pertama menyala, kami memberi makan angka biner 000000001, untuk yang kedua - 00000010, untuk yang ketiga - 00000100, dll. Bilangan biner ini dalam notasi desimal membentuk urutan berikut: 1, 2, 4, 8, 16, 32, 64, 128 dan merupakan pangkat dua dari 0 hingga 7.

Dengan demikian, dalam loop () dengan jumlah LED, kami menghitung ulang dari 0 hingga 7. Fungsi pow (basis, derajat) menaikkan 2 pangkat penghitung siklus. Mikrokontroler tidak bekerja dengan sangat akurat dengan nomor tipe "ganda", jadi untuk mengubah hasilnya menjadi bilangan bulat, kami menggunakan fungsi bulat (). Dan kami mentransfer nomor yang dihasilkan ke register geser. Untuk kejelasan, monitor port serial menampilkan nilai yang diperoleh selama operasi ini: satu berjalan melalui digit - LED menyala dalam gelombang.

Sketsa untuk mengontrol register geser melalui bus SPI
Sketsa untuk mengontrol register geser melalui bus SPI

Langkah 6

LED menyala secara bergantian, dan kami mengamati "gelombang" lampu yang bergerak. LED dikendalikan menggunakan register geser, yang kami sambungkan melalui antarmuka SPI. Akibatnya, hanya 3 pin Arduino yang digunakan untuk menggerakkan 8 LED.

Kami telah mempelajari contoh paling sederhana tentang bagaimana Arduino bekerja dengan bus SPI. Kami akan mempertimbangkan koneksi register geser secara lebih rinci dalam artikel terpisah.

Direkomendasikan: