SPI Ve Arduino Arayüzü

İçindekiler:

SPI Ve Arduino Arayüzü
SPI Ve Arduino Arayüzü

Video: SPI Ve Arduino Arayüzü

Video: SPI Ve Arduino Arayüzü
Video: Видеоуроки по Arduino. Интерфейсы SPI (8-я серия, ч1) 2024, Kasım
Anonim

SPI arayüzünü inceliyoruz ve LED'leri kontrol etmek için bu protokolü kullanarak erişeceğimiz Arduino'ya bir kaydırma yazmacı bağlıyoruz.

SPI arayüzü
SPI arayüzü

Gerekli

  • -Arduino;
  • - vardiya kaydı 74HC595;
  • - 8 LED;
  • - 220 Ohm'luk 8 direnç.

Talimatlar

Aşama 1

SPI - Seri Çevre Birimi Arayüzü veya "Seri Çevre Birimi Arayüzü", bir ana cihazın çevresel cihazlarla (bağımlı) arayüzlenmesi için senkronize bir veri aktarım protokolüdür. Master genellikle bir mikrodenetleyicidir. Cihazlar arasındaki iletişim dört kablo üzerinden gerçekleştirilir, bu nedenle SPI'ye bazen "dört telli arayüz" denir. Bu lastikler:

MOSI (Master Out Slave In) - master'dan slave cihazlara veri iletim hattı;

MISO (Master In Slave Out) - slave'den master'a iletim hattı;

SCLK (Seri Saat) - master tarafından oluşturulan senkronizasyon saat darbeleri;

SS (Slave Select) - bağımlı cihaz seçim satırı; "0" satırındayken, köle kendisine erişildiğini "anlar".

Saat darbe polaritesi (YÜKSEK veya DÜŞÜK seviyede çalışıyoruz), Saat Polaritesi, CPOL ve saat darbelerinin fazı (senkronizasyon) kombinasyonu nedeniyle dört veri aktarımı modu (SPI_MODE0, SPI_MODE1, SPI_MODE2, SPI_MODE3) vardır. saat darbesinin yükselen veya düşen kenarında), Saat Fazı, CPHA.

Şekil, SPI protokolünü kullanarak cihazları bağlamak için iki seçeneği göstermektedir: bağımsız ve kademeli. SPI veri yoluna bağımsız olarak bağlandığında, ana birim her bir bağımlı birim ile ayrı ayrı iletişim kurar. Kademeli - bağımlı cihazlar, kademeli olarak dönüşümlü olarak tetiklenir.

SPI bağlantı türleri
SPI bağlantı türleri

Adım 2

Arduino'da SPI veriyolları belirli portlarda bulunur. Her kartın kendi pin ataması vardır. Kolaylık sağlamak için, pimler çoğaltılır ve ayrı bir ICSP (Devre İçi Seri Programlama) konektörüne yerleştirilir. Lütfen ICSP konektörü - SS üzerinde bağımlı seçim pimi olmadığını unutmayın, çünkü Arduino'nun ağda master olarak kullanılacağı varsayılmıştır. Ancak gerekirse Arduino'nun herhangi bir dijital pinini SS olarak atayabilirsiniz.

Şekil, Arduino UNO ve Nano için pinlerin SPI veri yollarına standart atamasını göstermektedir.

Arduino'da SPI uygulaması
Arduino'da SPI uygulaması

Aşama 3

Arduino için SPI protokolünü uygulayan özel bir kütüphane yazılmıştır. Şu şekilde bağlanır: programın başında #include SPI.h ekleyin.

SPI protokolüyle çalışmaya başlamak için, ayarları yapmanız ve ardından SPI.beginTransaction () prosedürünü kullanarak protokolü başlatmanız gerekir. Bunu tek bir komutla yapabilirsiniz: SPI.beginTransaction (SPISettings (14000000, MSBFIRST, SPI_MODE0)).

Bu, SPI protokolünü 14 MHz frekansında başlattığımız anlamına gelir, veri aktarımı MSB'den (en önemli bit) başlayarak "0" modunda devam eder.

Başlattıktan sonra, karşılık gelen SS pinini LOW durumuna getirerek slave cihazı seçiyoruz.

Daha sonra SPI.transfer() komutu ile verileri slave cihaza aktarıyoruz.

İletimden sonra, SS'yi HIGH durumuna döndürürüz.

Protokolle çalışma, SPI.endTransaction() komutuyla sona erer. SPI.beginTransaction() ve SPI.endTransaction() komutları arasındaki aktarımın yürütme süresinin en aza indirilmesi arzu edilir, böylece başka bir cihaz farklı ayarlar kullanarak veri aktarımını başlatmaya çalışırsa çakışma olmaz.

SPI iletimi
SPI iletimi

4. Adım

SPI arayüzünün pratik uygulamasını ele alalım. SPI bus üzerinden 8-bit shift register kontrol ederek ledleri yakacağız. 74HC595 shift register'ı Arduino'ya bağlayalım. 8 çıkışın her birine bir LED aracılığıyla (sınırlayıcı bir direnç aracılığıyla) bağlanırız. Diyagram şekilde gösterilmiştir.

Shift register 74HC595'i Arduino'ya bağlama
Shift register 74HC595'i Arduino'ya bağlama

Adım 5

Böyle bir eskiz yazalım.

Öncelikle SPI kütüphanesini bağlayalım ve SPI arayüzünü başlatalım. Pin 8'i slave seçim pini olarak tanımlayalım. Kaydırma yazmacına "0" değerini göndererek temizleyelim. Seri portu başlatıyoruz.

Kaydırmalı yazmaç kullanarak belirli bir LED'i yakmak için girişine 8 bitlik bir sayı uygulamanız gerekir. Örneğin, ilk LED'in yanması için, ikincisi için - 00000010, üçüncüsü için - 00000100 vb. ikili sayı 000000001'i besliyoruz. Ondalık gösterimdeki bu ikili sayılar şu diziyi oluşturur: 1, 2, 4, 8, 16, 32, 64, 128 ve 0'dan 7'ye kadar ikinin üsleridir.

Buna göre, döngüde () LED sayısı ile 0'dan 7'ye yeniden hesaplıyoruz. Mikrodenetleyiciler "çift" türdeki sayılarla çok doğru çalışmazlar, bu nedenle sonucu bir tamsayıya dönüştürmek için yuvarlak () işlevini kullanırız. Ve ortaya çıkan sayıyı vardiya kaydına aktarıyoruz. Netlik için, seri port monitörü bu işlem sırasında elde edilen değerleri görüntüler: biri rakamlardan geçer - LED'ler bir dalga halinde yanar.

SPI veri yolu üzerinden kaydırma yazmacının kontrol edilmesi için çizim
SPI veri yolu üzerinden kaydırma yazmacının kontrol edilmesi için çizim

6. Adım

LED'ler sırayla yanar ve hareket eden bir ışık "dalgası" gözlemleriz. LED'ler, SPI arabirimi üzerinden bağlandığımız bir kaydırma yazmacı kullanılarak kontrol edilir. Sonuç olarak, 8 LED'i sürmek için sadece 3 Arduino pini kullanılır.

Arduino'nun bir SPI veri yolu ile nasıl çalıştığının en basit örneğini inceledik. Vardiyalı yazmaçların bağlantısını ayrı bir makalede daha ayrıntılı olarak ele alacağız.

Önerilen: