Antara Muka SPI Dan Arduino

Isi kandungan:

Antara Muka SPI Dan Arduino
Antara Muka SPI Dan Arduino

Video: Antara Muka SPI Dan Arduino

Video: Antara Muka SPI Dan Arduino
Video: arduino spi 2024, November
Anonim

Kami mengkaji antara muka SPI dan menghubungkan daftar pergeseran ke Arduino, yang akan kami akses menggunakan protokol ini untuk mengawal LED.

Antara muka SPI
Antara muka SPI

Perlu

  • - Arduino;
  • - shift shift 74HC595;
  • - 8 LED;
  • - 8 perintang 220 Ohm.

Arahan

Langkah 1

SPI - Serial Peripheral Interface atau "Serial Peripheral Interface" adalah protokol pemindahan data segerak untuk menghubungkan peranti induk dengan peranti periferal (hamba). Tuan selalunya adalah pengawal mikro. Komunikasi antara peranti dilakukan melalui empat wayar, itulah sebabnya mengapa SPI kadang-kadang disebut sebagai "antara muka empat dawai". Tayar ini adalah:

MOSI (Master Out Slave In) - talian penghantaran data dari master ke peranti hamba;

MISO (Master In Slave Out) - talian penghantaran dari hamba ke tuan;

SCLK (Serial Clock) - denyutan jam penyegerakan yang dihasilkan oleh induk;

SS (Slave Select) - barisan pilihan peranti hamba; ketika di talian "0", budak itu "memahami" bahawa ia sedang diakses.

Terdapat empat mod pemindahan data (SPI_MODE0, SPI_MODE1, SPI_MODE2, SPI_MODE3), kerana gabungan polaritas denyut jam (kita bekerja pada tahap TINGGI atau RENDAH), Polaritas Jam, CPOL, dan fasa denyutan jam (penyegerakan pada pinggir naik atau turunnya denyut jam), Fasa Jam, CPHA.

Gambar menunjukkan dua pilihan untuk menyambungkan peranti menggunakan protokol SPI: bebas dan lata. Apabila disambungkan secara bebas ke bas SPI, tuan berkomunikasi dengan setiap hamba secara individu. Dengan lata - peranti hamba dipicu secara bergantian, dalam lata.

Jenis-jenis sambungan SPI
Jenis-jenis sambungan SPI

Langkah 2

Di Arduino, bas SPI berada di pelabuhan tertentu. Setiap papan mempunyai penugasan pin sendiri. Untuk kemudahan, pin digandakan dan diletakkan pada penyambung ICSP (In Circuit Serial Programming) yang berasingan. Harap maklum bahawa tidak ada pin pilih hamba pada penyambung ICSP - SS diandaikan bahawa Arduino akan digunakan sebagai induk di rangkaian. Tetapi jika perlu, anda boleh menetapkan sebarang pin digital Arduino sebagai SS.

Gambar menunjukkan penugasan standard pin ke bas SPI untuk Arduino UNO dan Nano.

Pelaksanaan SPI di Arduino
Pelaksanaan SPI di Arduino

Langkah 3

Perpustakaan khas telah ditulis untuk Arduino yang menerapkan protokol SPI. Ia dihubungkan seperti ini: pada awal program, tambahkan #masuk SPI.h

Untuk mula bekerja dengan protokol SPI, anda perlu menetapkan tetapan dan kemudian memulakan protokol menggunakan prosedur SPI.beginTransaction (). Anda boleh melakukannya dengan satu arahan: SPI.beginTransaction (SPISettings (14000000, MSBFIRST, SPI_MODE0)).

Ini bermaksud bahawa kita menginisialisasi protokol SPI pada frekuensi 14 MHz, pemindahan data berjalan, bermula dari MSB (bit paling signifikan), dalam mod "0".

Selepas inisialisasi, kami memilih peranti hamba dengan meletakkan pin SS yang sesuai dalam keadaan RENDAH.

Kemudian kami memindahkan data ke peranti hamba dengan perintah SPI.transfer ().

Selepas penghantaran, kami mengembalikan SS ke keadaan TINGGI.

Bekerja dengan protokol diakhiri dengan perintah SPI.endTransaction (). Adalah wajar untuk meminimumkan masa pelaksanaan pemindahan antara arahan SPI.beginTransaction () dan SPI.endTransaction () supaya tidak ada pertindihan jika peranti lain cuba memulakan pemindahan data menggunakan tetapan yang berbeza.

Penghantaran SPI
Penghantaran SPI

Langkah 4

Mari pertimbangkan aplikasi praktikal antara muka SPI. Kami akan menyalakan LED dengan mengawal daftar peralihan 8-bit melalui bas SPI. Mari sambungkan daftar shift 74HC595 ke Arduino. Kami menyambung ke setiap 8 output melalui LED (melalui perintang yang mengehadkan). Gambar rajah ditunjukkan dalam rajah.

Menyambung shift shift 74HC595 ke Arduino
Menyambung shift shift 74HC595 ke Arduino

Langkah 5

Mari tulis lakaran seperti itu.

Pertama, mari sambungkan perpustakaan SPI dan mulakan antara muka SPI. Mari kita definisikan pin 8 sebagai pin pilihan hamba. Mari kosongkan shift shift dengan menghantar nilai "0" kepadanya. Kami memulakan port bersiri.

Untuk menyalakan LED tertentu menggunakan register shift, anda perlu menerapkan nombor 8-bit pada inputnya. Sebagai contoh, agar LED pertama menyala, kami memberi makan nombor perduaan 00000001, untuk yang kedua - 00000010, untuk yang ketiga - 00000100, dll. Nombor binari ini dalam notasi perpuluhan membentuk urutan berikut: 1, 2, 4, 8, 16, 32, 64, 128 dan kuasa dua dari 0 hingga 7.

Oleh itu, dalam gelung () dengan jumlah LED, kita mengira semula dari 0 hingga 7. Fungsi pow (base, degree) menaikkan 2 ke kekuatan pembilang kitaran. Mikrokontroler tidak berfungsi dengan sangat tepat dengan bilangan jenis "double", jadi untuk menukar hasilnya menjadi bilangan bulat, kita menggunakan fungsi bulat (). Dan kami memindahkan nombor yang dihasilkan ke daftar shift. Untuk kejelasan, monitor port bersiri memaparkan nilai yang diperoleh semasa operasi ini: satu berjalan melalui digit - LED menyala dalam gelombang.

Lakarkan untuk mengawal daftar shift melalui bas SPI
Lakarkan untuk mengawal daftar shift melalui bas SPI

Langkah 6

LED menyala secara bergiliran, dan kami melihat "gelombang" lampu yang bergerak. LED dikendalikan menggunakan shift register, yang kami sambungkan melalui antara muka SPI. Hasilnya, hanya 3 pin Arduino yang digunakan untuk menggerakkan 8 LED.

Kami telah mengkaji contoh paling mudah bagaimana Arduino berfungsi dengan bas SPI. Kami akan mempertimbangkan penyambungan register shift dengan lebih terperinci dalam artikel yang berasingan.

Disyorkan: