SPI Və Arduino Interfeysi

Mündəricat:

SPI Və Arduino Interfeysi
SPI Və Arduino Interfeysi

Video: SPI Və Arduino Interfeysi

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

SPI interfeysini araşdırırıq və bir keçid qeydini Arduinoya bağlayırıq, bu LEDləri idarə etmək üçün bu protokoldan istifadə edərək əldə edəcəyik.

SPI interfeysi
SPI interfeysi

Zəruri

  • - Arduino;
  • - növbə qeydiyyatı 74HC595;
  • - 8 LED;
  • - 220 Ohm'lik 8 rezistor.

Təlimat

Addım 1

SPI - Serial Periferik İnterfeys və ya "Serial Periferik Interface" ana cihazı periferik cihazlarla (kölə) birləşdirmək üçün sinxron bir məlumat ötürmə protokoludur. Usta tez-tez mikrokontrolordur. Cihazlar arasında əlaqə dörd tel üzərində aparılır, bu səbəbdən SPI-yə bəzən "dörd telli interfeys" deyilir. Bu təkərlər:

MOSI (Master Out Slave In) - masterdan qul cihazlarına məlumat ötürmə xətti;

MISO (Master In Slave Out) - kölədən ağaya ötürücü xətt;

SCLK (Serial Clock) - usta tərəfindən yaradılan sinxronizasiya saat impulsları;

SS (Slave Select) - kölə cihazı seçmə xətti; "0" sətirində kölə ona çatdığını "başa düşür".

Saat nəbzi polaritesinin (YÜKSƏK və ya LOW səviyyəsində işləyirik), Saat Qütblülüyünün, CPOL və saat nəbzlərinin fazı (sinxronizasiya) birləşməsi sayəsində dörd məlumat ötürmə rejimi var (SPI_MODE0, SPI_MODE1, SPI_MODE2, SPI_MODE3). saat nəbzinin yüksələn və ya düşən kənarında), Saat fazası, CPHA.

Şəkildə SPI protokolundan istifadə edərək cihazları birləşdirmək üçün iki seçim göstərilir: müstəqil və kaskadlı. Müstəqil olaraq SPI avtobusuna qoşulduqda, usta hər qulla ayrı-ayrılıqda əlaqə qurur. Bir şəlalə ilə - qul cihazları növbə ilə, bir şəlalədə tetiklenir.

SPI əlaqələrinin növləri
SPI əlaqələrinin növləri

Addım 2

Arduinoda, SPI avtobusları xüsusi limanlardadır. Hər lövhənin öz pin tapşırığı var. Rahatlıq üçün sancaqlar təkrarlanır və ayrı bir ICSP (In Circuit Serial Programming) konnektoruna yerləşdirilir. Xahiş edirəm unutmayın, çünki ICSP konnektorunda - SS-də qul seçmə pimi yoxdur Arduinonun şəbəkədəki master kimi istifadə ediləcəyi güman edilir. Ancaq lazım olduqda, Arduinonun istənilən rəqəmsal pinini SS olaraq təyin edə bilərsiniz.

Şəkil, Arduino UNO və Nano üçün SPI avtobuslarına sancaqlar standart təyinatını göstərir.

Arduino'da SPI tətbiqi
Arduino'da SPI tətbiqi

Addım 3

Arduino üçün SPI protokolunu tətbiq edən xüsusi bir kitabxana yazılmışdır. Bu şəkildə əlaqələndirilir: proqramın əvvəlində #include SPI.h əlavə edin

SPI protokolu ilə işə başlamaq üçün parametrləri təyin etməli və sonra SPI.beginTransaction () prosedurunu istifadə edərək protokolu işə salmalısınız. Bunu bir təlimatla edə bilərsiniz: SPI.beginTransaction (SPISettings (14000000, MSBFIRST, SPI_MODE0)).

Bu, SPI protokolunu 14 MHz tezliyində başlatdığımız, MSB-dən (ən əhəmiyyətli bit) başlayaraq məlumat ötürülməsinin "0" rejimində başlaması deməkdir.

Başlanğıcdan sonra müvafiq SS pinini LOW vəziyyətinə qoyaraq qul cihazını seçirik.

Sonra SPI.transfer () əmri ilə məlumatları qul cihazına ötürürük.

Göndərildikdən sonra SS-i YÜKSƏK vəziyyətə qaytarırıq.

Protokolla iş SPI.endTransaction () əmri ilə başa çatır. SPI.beginTransaction () və SPI.endTransaction () təlimatları arasında ötürülmənin icra müddətinin minimuma endirilməsi arzu edilir, belə ki, başqa bir cihaz fərqli parametrlərdən istifadə edərək məlumat ötürülməsini başlatmağa çalışarsa üst-üstə düşməsin.

SPI ötürülməsi
SPI ötürülməsi

Addım 4

SPI interfeysinin praktik tətbiqini nəzərdən keçirək. SPI avtobusu vasitəsilə 8 bitlik keçid qeydinə nəzarət edərək LED-ləri yandıracağıq. 74HC595 növbə qeydini Arduinoya bağlayaq. 8 çıxışın hər birinə bir LED vasitəsilə qoşuluruq (məhdudlaşdıran bir müqavimət vasitəsilə). Diaqram şəkildə göstərilmişdir.

74HC595 növbə reyestrinin Arduinoya qoşulması
74HC595 növbə reyestrinin Arduinoya qoşulması

Addım 5

Gəlin belə bir eskiz yazaq.

Əvvəlcə, SPI kitabxanasını bağlayaq və SPI interfeysini işə salaq. 8 pinini qul seçmə pin kimi təyin edək. Vites reyestrini ona "0" dəyərini göndərərək silək. Serial portu işə salırıq.

Bir keçid qeydindən istifadə edərək xüsusi bir LED yandırmaq üçün onun girişinə 8 bitlik bir rəqəm tətbiq etməlisiniz. Məsələn, ilk LEDin yanması üçün ikili nömrəni 00000001, ikincisi üçün - 00000010, üçüncüsü üçün - 00000100 və s. Onluq qeyddə olan bu ikili ədədlər aşağıdakı ardıcıllığı təşkil edir: 1, 2, 4, 8, 16, 32, 64, 128 və ikidən 0-dan 7-ə qədər güclərdir.

Buna görə, LED sayına görə loopda () 0-dan 7-ə qədər yenidən hesablayırıq. POW (baza, dərəcə) funksiyası dövr sayğacının gücünə 2-yə qaldırır. Mikro nəzarətçilər "ikiqat" tipli nömrələrlə çox dəqiq işləmirlər, nəticədə nəticəni tam ədədə çevirmək üçün round () funksiyasından istifadə edirik. Və nəticədə çıxan nömrəni növbə qeydinə köçürürük. Aydınlıq üçün serial port monitoru bu əməliyyat zamanı əldə olunan dəyərləri göstərir: biri rəqəmlərdən keçir - LEDlər dalğada yanır.

SPI avtobusu vasitəsilə növbə qeydiyyatını idarə etmək üçün eskiz
SPI avtobusu vasitəsilə növbə qeydiyyatını idarə etmək üçün eskiz

Addım 6

LEDlər növbə ilə yanır və biz səyahət edən bir işıq dalğasını müşahidə edirik. LEDlər SPI interfeysi ilə bağladığımız bir keçid qeydindən istifadə edərək idarə olunur. Nəticədə, 8 LED sürmək üçün yalnız 3 Arduino sancağı istifadə olunur.

Bir Arduinonun SPI avtobusu ilə necə işləməsinin ən sadə nümunəsini öyrəndik. Vites qeydlərinin əlaqəsini ayrı bir məqalədə daha ətraflı nəzərdən keçirəcəyik.

Tövsiyə: