SPI Va Arduino Interfeysi

Mundarija:

SPI Va Arduino Interfeysi
SPI Va Arduino Interfeysi

Video: SPI Va Arduino Interfeysi

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

Biz SPI interfeysini o'rganamiz va smenali registrni Arduino-ga ulaymiz, unga LEDlarni boshqarish uchun ushbu protokol yordamida kiramiz.

SPI interfeysi
SPI interfeysi

Kerakli

  • - Arduino;
  • - 74HC595 smenali registr;
  • - 8 ta LED;
  • - 220 Ohm bo'lgan 8 ta qarshilik.

Ko'rsatmalar

1-qadam

SPI - ketma-ket periferik interfeys yoki "ketma-ket periferik interfeys" - bu asosiy qurilmani periferik qurilmalar (qul) bilan interfeys qilish uchun ma'lumotlarni uzatishning sinxron protokoli. Magistr ko'pincha mikrokontrolr hisoblanadi. Qurilmalar orasidagi aloqa to'rtta sim orqali amalga oshiriladi, shuning uchun SPI ba'zan "to'rt simli interfeys" deb nomlanadi. Ushbu shinalar:

MOSI (Master Out Slave In) - masterdan qul qurilmalariga ma'lumotlarni uzatish liniyasi;

MISO (Master In Slave Out) - quldan xo'jayinga uzatish liniyasi;

SCLK (Serial Clock) - usta tomonidan yaratilgan sinxronizatsiya soat impulslari;

SS (Slave Select) - qul qurilmasini tanlash liniyasi; "0" qatorida, qul unga kirishini "tushunadi".

Soat impulslari polaritesining (biz YUQORI yoki LOW darajasida ishlaymiz), Soat Polaritesining, CPOL va soat impulslari (sinxronizatsiya) fazasining kombinatsiyasi tufayli ma'lumotlarni uzatishning to'rtta rejimi mavjud (SPI_MODE0, SPI_MODE1, SPI_MODE2, SPI_MODE3). soat pulsining ko'tarilgan yoki tushgan tomonida), Clock Phase, CPHA.

Rasmda SPI protokoli yordamida qurilmalarni ulashning ikkita varianti ko'rsatilgan: mustaqil va kaskadli. Mustaqil ravishda SPI avtobusiga ulanganda, usta har bir qul bilan alohida aloqa o'rnatadi. Kaskad bilan - qul qurilmalari navbat bilan, kaskadda ishga tushiriladi.

SPI ulanish turlari
SPI ulanish turlari

2-qadam

Arduinoda SPI avtobuslari ma'lum portlarda. Har bir taxtaning o'ziga xos pin topshirig'i mavjud. Qulaylik uchun pinlar takrorlanadi va alohida ICSP (In Circuit Serial Programming) ulagichiga joylashtiriladi. Iltimos, e'tibor bering, chunki ICSP ulagichi - SS-da qul tanlaydigan pin mavjud emas Arduino tarmoqda usta sifatida ishlatilishi taxmin qilinmoqda. Ammo agar kerak bo'lsa, siz Arduino-ning har qanday raqamli pinini SS sifatida belgilashingiz mumkin.

Rasmda Arduino UNO va Nano uchun SPI avtobuslariga pimlarning standart belgilanishi ko'rsatilgan.

Arduinoda SPI dasturini amalga oshirish
Arduinoda SPI dasturini amalga oshirish

3-qadam

Arduino uchun SPI protokolini amalga oshiradigan maxsus kutubxona yozilgan. U shunday bog'langan: dastur boshida #include SPI.h qo'shing

SPI protokoli bilan ishlashni boshlash uchun sozlamalarni o'rnatishingiz va keyin SPI.beginTransaction () protsedurasi yordamida protokolni ishga tushirishingiz kerak. Siz buni bitta ko'rsatma bilan qilishingiz mumkin: SPI.beginTransaction (SPISettings (14000000, MSBFIRST, SPI_MODE0)).

Bu shuni anglatadiki, biz SPI protokolini 14 MGts chastotada ishga tushiramiz, ma'lumotlar uzatish MSB (eng muhim bit) dan boshlab "0" rejimida boshlanadi.

Boshlashdan so'ng biz mos keladigan SS pinini LOW holatiga qo'yib qul qurilmasini tanlaymiz.

Keyin biz SPI.transfer () buyrug'i bilan ma'lumotlarni qul qurilmaga o'tkazamiz.

Etkazib bergandan so'ng SSni yuqori holatiga qaytaramiz.

Protokol bilan ishlash SPI.endTransaction () buyrug'i bilan tugaydi. SPI.beginTransaction () va SPI.endTransaction () yo'riqnomalari o'rtasida uzatishni bajarish vaqtini minimallashtirish maqsadga muvofiqdir, shunda boshqa qurilma turli xil sozlamalar yordamida ma'lumotlarni uzatishni boshlashga urinsa, bir-birining ustiga chiqadigan narsa bo'lmaydi.

SPI uzatish
SPI uzatish

4-qadam

Keling, SPI interfeysining amaliy qo'llanilishini ko'rib chiqaylik. Biz SPI avtobusi orqali 8-bitli siljish registrini boshqarish orqali LEDlarni yoqamiz. 74HC595 smenali registrni Arduino-ga ulaymiz. Biz har 8 ta chiqishga LED orqali ulanamiz (cheklovchi qarshilik orqali). Diagramma rasmda ko'rsatilgan.

74HC595 smenali registrni Arduino-ga ulash
74HC595 smenali registrni Arduino-ga ulash

5-qadam

Keling, shunday eskizni yozamiz.

Birinchidan, SPI kutubxonasini ulab, SPI interfeysini ishga tushiramiz. Keling, qulni tanlash pimi sifatida 8-pinni aniqlaymiz. Shift registrini unga "0" qiymatini yuborib tozalaymiz. Biz ketma-ket portni ishga tushiramiz.

Shift registri yordamida ma'lum bir LEDni yoqish uchun uning kiritilishiga 8 bitli raqamni kiritish kerak. Masalan, birinchi LED yonishi uchun biz ikkilik raqamni 00000001, ikkinchisiga 00000010, uchinchisiga 00000100 va boshqalarni beramiz. Ushbu ikkilik raqamlar o'nlik belgilarida quyidagi ketma-ketlikni hosil qiladi: 1, 2, 4, 8, 16, 32, 64, 128 va ikkitaning 0 dan 7 gacha kuchlari.

Shunga ko'ra, (), LEDlar soni bo'yicha (0) dan 7 gacha qayta hisoblaymiz. Pow (asos, daraja) funktsiyasi tsikl hisoblagichining quvvatiga 2 ko'taradi. Mikrokontrollerlar "ikkilamchi" turdagi raqamlar bilan juda aniq ishlamaydi, shuning uchun natijani butun songa aylantirish uchun biz round () funktsiyasidan foydalanamiz. Va natijada olingan raqamni smenali registrga o'tkazamiz. Aniqlik uchun ketma-ket port monitori ushbu operatsiya davomida olingan qiymatlarni aks ettiradi: raqamlar bo'ylab ishlaydi - LEDlar to'lqinda yonadi.

SPI avtobusi orqali smenali registrni boshqarish uchun eskiz
SPI avtobusi orqali smenali registrni boshqarish uchun eskiz

6-qadam

LEDlar navbat bilan yonadi va biz chiroqlarning sayohat qilayotgan "to'lqini" ni kuzatamiz. LEDlar biz SPI interfeysi orqali ulangan smenali registr yordamida boshqariladi. Natijada, 8 ta LEDni boshqarish uchun faqat 3 ta Arduino pinasi ishlatiladi.

Biz Arduino SPI avtobusi bilan ishlashning eng oddiy namunasini o'rganib chiqdik. Shift registrlarining ulanishini alohida maqolada batafsil ko'rib chiqamiz.

Tavsiya: