AVR o'quv kursi. SPI moduli bilan ishlash. Ma'lumotlarni o'qish va yozish. Ch2. SPI bilan qanday ishlash kerak - nazariya Spi kiritish

Interfeyslarni uzatish.

Ma'lumotlarni bir qurilmadan ikkinchisiga yoki bir chipdan ikkinchisiga o'tkazish uchun ko'plab ma'lumotlarni uzatish interfeyslari ishlab chiqilgan. Har bir interfeysning ijobiy va salbiy tomonlari bor, shuning uchun siz qanday interfeyslar mavjudligini, ularning ijobiy va salbiy tomonlarini bilishingiz va ma'lum bir vaziyatda ma'lumotlarni uzatish uchun to'g'ri interfeysdan foydalanishingiz kerak.

Interfeyslar asinxron va sinxron ma'lumotlarni uzatish bilan birga keladi. Sinxron ma'lumotlarni uzatishda ma'lumotlar bilan bir vaqtning o'zida soat signali uzatiladi, bu qabul qiluvchi va uzatuvchini sinxronlashtirishga imkon beradi. Bunday protokolga SPI interfeysi misol bo'la oladi.

Asinxron ma'lumotlarni uzatishda soat signali mavjud emas. Bunday liniyalarda qabul qiluvchi va uzatuvchi o'rtasida mos kelmaslik xavfi mavjud, buning natijasida keyingi ma'lumotlar to'g'ri qabul qilinmaydi. Buning oldini olish uchun asinxron interfeyslar ma'lumotlar liniyalari bo'ylab davriy sinxronizatsiyani amalga oshiradi. Bunday interfeyslarning afzalligi - uzatish uchun zarur bo'lgan kamroq o'tkazgichlar soni.

Keling, bir nechta eng mashhur interfeyslarni batafsil ko'rib chiqaylik.

USART interfeysi.

USART interfeysi seriyali universal sinxron-asinxron qabul qiluvchidir. Ma'lumotlar USARTga muntazam ravishda uzatiladi. Bu vaqt oralig'i belgilangan USART tezligi bilan belgilanadi va bodda ko'rsatiladi (faqat nolga yoki birga teng qiymatlarni qabul qila oladigan belgilar uchun uzatish soniyasiga bitga teng). Umumiy qabul qilingan standart tezlik diapazoni mavjud: 300, 600, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200, 230400, 460800, 92160.

Ma'lumotlar bitlariga qo'shimcha ravishda, USART avtomatik ravishda oqimga sinxronizatsiya belgilarini, boshlash va to'xtatish bitlarini kiritadi. Qabul qilingandan so'ng, bu qo'shimcha bitlar olib tashlanadi. Odatda, boshlash va to'xtatish bitlari bir bayt ma'lumotni (8 bit) ajratib turadi, ammo 5, 6, 7, 8 yoki 9 bitni uzatish imkonini beruvchi USART ilovalari mavjud. Boshlash va to'xtatish signallari bilan ajratilgan bitlar minimal yuborish hisoblanadi. USART og'ir trafikda qabul qiluvchi va uzatuvchining sinxronizatsiyasi ehtimolini kamaytirish uchun uzatish paytida ikkita to'xtash bitini kiritish imkonini beradi. Qabul qiluvchi ikkinchi to'xtash bitini e'tiborsiz qoldirib, uni chiziqdagi qisqa pauza deb hisoblaydi.

Konventsiya shundan iboratki, USART kirish va chiqishining passiv (ma'lumotlar yo'qligida) holati mantiqiy "1" dir. Boshlash biti har doim mantiqiy "0" dir, shuning uchun USART qabul qiluvchisi "1" dan "0" ga o'tishni kutadi va undan bit davomiyligining yarmini (boshlang'ich bit uzatishning o'rtasi) vaqt oralig'ini hisoblaydi. . Agar hozirda kirish hali ham "0" bo'lsa, minimal posilkani olish jarayoni boshlanadi. Buning uchun qabul qiluvchi ketma-ket 9 bit davomiylikni hisoblaydi (8 bitli ma'lumotlar uchun) va har bir daqiqada kirish holatini qayd qiladi. Dastlabki 8 ta qiymat qabul qilingan ma'lumotlar, oxirgi qiymat - sinov qiymati (to'xtash biti). To'xtash bit qiymati har doim "1" dir; agar haqiqiy qabul qilingan qiymat boshqacha bo'lsa, USART xatolikni qayd qiladi.

Vaqt oraliqlarini shakllantirish uchun uzatuvchi va qabul qiluvchi USARTlar aniq vaqt (soat) manbaiga ega. Ushbu manbaning aniqligi shunday bo'lishi kerakki, boshlang'ich pulsning boshidan to'xtash pulsining o'rtasigacha bo'lgan vaqt oralig'ini o'rnatishdagi xatolar (qabul qiluvchi va uzatuvchi) yig'indisi yarmidan oshmasligi kerak (yoki yaxshiroq, kamida chorak) bit oralig'i. 8 bitli xabar uchun 0,5/9,5 = 5% (aslida 3% dan ko'p emas). Bu qabul qiluvchi va uzatuvchi xatolar yig'indisi va liniyada mumkin bo'lgan signal buzilishi bo'lganligi sababli, USART soatining aniqligi uchun tavsiya etilgan bardoshlik 1,5% dan oshmaydi.

Soat bitlari bit oqimining bir qismini egallaganligi sababli, natijada UART o'tkazuvchanligi ulanish tezligiga teng emas. Misol uchun, 8-bitli 8-N-1 formatli uzatishlar uchun soat bitlari oqimning 20% ​​ni egallaydi, bu 115 200 bod jismoniy tezligi uchun 92 160 bit / s yoki 11 520 bayt / s ma'lumotlar bit tezligini beradi.

Paritet tekshiruvi

USART protokoli bit pariteti usuli yordamida ma'lumotlar yaxlitligini avtomatik ravishda kuzatish imkoniyatiga ega. Ushbu xususiyat yoqilganda, ma'lumotlarning oxirgi biti ("parite biti") har doim 1 yoki 0 bo'ladi, shuning uchun baytdagi birlar soni doimo juft bo'ladi.

Oqim nazorati

Qadimgi kunlarda USART qurilmalari shu qadar sekin bo'lishi mumkin ediki, ular kiruvchi ma'lumotlar oqimini ushlab turolmaydilar. Ushbu muammoni hal qilish uchun USART modullari alohida oqimni boshqarish chiqishlari va kirishlari bilan ta'minlangan. Kirish buferi to'lganida, qabul qiluvchi USART mantig'i mos keladigan chiqishda taqiqlash darajasini o'rnatdi va uzatuvchi USART uzatishni to'xtatdi. Keyinchalik, oqimni boshqarish aloqa protokollariga tayinlandi va oqimni boshqarishning alohida liniyalariga bo'lgan ehtiyoj asta-sekin yo'qoldi.

Jismoniy amalga oshirish.

USART - almashinuv protokoli, ya'ni. u bit hosil qilish usulini, bayt uzatish parametrlarini, uzatish tezligini va boshqalarni aniqlaydi.

Ammo USARTning jismoniy amalga oshirilishi boshqacha bo'lishi mumkin. Masalan, bitta plata ichida ma'lumotlarni uzatish uchun signallar +5V va 0V darajalarida uzatiladi. Uzoq masofalarga va qurilmalar o'rtasida ma'lumotlarni uzatish uchun boshqa jismoniy kuchlanish darajalari va standartlari qo'llaniladi, masalan: oqim davri (4-20 mA), RS-232 (COM porti), RS-485 va boshqalar.

0-5V "nazoratchi" darajalarini "standart" darajalarga aylantirish uchun juda ko'p ixtisoslashgan mikrosxemalar mavjud, masalan, RS-232 uchun ADM202.

SPI seriyali interfeysi

SPI nomi "Serial Peripheral Bus" ning qisqartmasi bo'lib, uning maqsadini aks ettiradi - tashqi qurilmalarni ulash uchun avtobus. SPI avtobusi master-qul printsipiga muvofiq tashkil etilgan. Avtobus ustasi odatda mikrokontrollerdir, lekin u dasturlashtiriladigan mantiq, DSP boshqaruvchisi yoki ASIC ham bo'lishi mumkin. Magistrga ulangan qurilmalar quldir. Ularning rolini turli xil mikrosxemalar, shu jumladan, o'ynaydi. saqlash qurilmalari (EEPROM, Flash xotira, SRAM), real vaqt soati (RTC), ADC/DAC, raqamli potansiyometrlar, ixtisoslashtirilgan kontrollerlar va boshqalar.

SPI interfeysining asosiy qurilish bloki an'anaviy siljish registridir, uning sinxronizatsiyasi va bit oqimi kirish / chiqish signallari interfeys signallarini tashkil qiladi. Shunday qilib, SPI protokolini ma'lumotlarni uzatish protokoli emas, balki har biri bir vaqtning o'zida qabul qiluvchi va uzatuvchi vazifasini bajaradigan ikkita siljish registrlari o'rtasidagi ma'lumotlar almashinuvi protokoli deb atash to'g'riroqdir. SPI shinasida ma'lumotlarni uzatishning zaruriy sharti avtobus sinxronizatsiya signalini yaratishdir. Faqat rahbar bu signalni yaratish huquqiga ega va qulning ishi butunlay unga bog'liq.

Ulanish.

SPI avtobusiga ulanishning uchta turi mavjud, ularning har biri to'rtta signalni o'z ichiga oladi. SPI signallarining maqsadi 7.1-jadvalda tasvirlangan.

Faqat ikkita mikrosxemani o'z ichiga olgan eng oddiy ulanish 7.2-rasmda ko'rsatilgan. Bu erda shina ustasi MOSI liniyasi bo'ylab ma'lumotlarni u tomonidan yaratilgan SCLK signali bilan sinxron ravishda uzatadi va qul qabul qilingan sinxronizatsiya signalining ma'lum qirralarida uzatilgan ma'lumotlar bitlarini ushlaydi. Shu bilan birga, qul o'zining ma'lumotlar paketini yuboradi. Taqdim etilgan sxemani MISO liniyasini yo'q qilish orqali soddalashtirish mumkin, agar ishlatiladigan to'g'ri IC javob ma'lumotlarini uzatishni ta'minlamasa yoki bunga ehtiyoj bo'lmasa. Bir tomonlama ma'lumotlarni uzatishni DAC, raqamli potansiyometrlar, dasturlashtiriladigan kuchaytirgichlar va drayverlar kabi chiplarda topish mumkin. Shunday qilib, qul ICni ulashning ko'rib chiqilayotgan varianti 3 yoki 4 aloqa liniyasini talab qiladi.

To'g'ri IC ma'lumotlarni qabul qilish va uzatish uchun, soat signaliga ega bo'lishdan tashqari, SS chizig'i ham past darajada harakatlanishi kerak. Aks holda, tobe IC faol bo'lmaydi. Faqat bitta tashqi IC ishlatilsa, qul IC ning tanlangan kirishini qattiq past darajaga tushirib, SS liniyasini yo'q qilish vasvasasi bo'lishi mumkin. Ushbu yechim juda istalmagan va muvaffaqiyatsizlikka olib kelishi yoki hatto ma'lumotlarni uzatishning imkonsizligiga olib kelishi mumkin, chunki Chip tanlash kiritish IC ni dastlabki holatiga qaytarish uchun xizmat qiladi va ba'zida ma'lumotlarning birinchi bitini chiqarishni boshlaydi.

Agar SPI shinasiga bir nechta mikrosxemalarni ulash zarur bo'lsa, mustaqil (parallel) ulanish (7.3-rasm) yoki kaskad (ketma-ket) ulanish (7.4-rasm) ishlatiladi. Mustaqil ulanish ko'proq tarqalgan, chunki har qanday SPI-mos chiplardan foydalanganda erishiladi. Bu erda mikrosxemalarni tanlashdan tashqari barcha signallar parallel ravishda ulanadi va avtobus ustasi u yoki bu SS signalini past holatga o'tkazish orqali qaysi tobe IC bilan ma'lumot almashishini belgilaydi. Ushbu ulanishning asosiy kamchiligi - qul mikrosxemalar manzili uchun qo'shimcha liniyalarga bo'lgan ehtiyoj (aloqa liniyalarining umumiy soni 3+n, bu erda n - tobe chiplar soni).

Mikrokontroller oyoqlari etarli bo'lmasa, siz demultiplexer chipidan foydalanishingiz mumkin. Demultipleksator boshqaruv pinlaridagi kodga qarab bitta kirish signalini chiqish signallaridan biriga ulaydi. 7.4-rasmda demultipleksatorning ulanish sxemasi ko'rsatilgan. SS signali uning kirishiga beriladi, agar mikrosxemalardan birini tanlash kerak bo'lsa, u 0 ga teng qiymatni oladi. Ikkilik koddagi kerakli mikrosxemaning soni Am-A0 oyoqlariga beriladi. Bu mikrokontrollerda ishlatiladigan oyoqlar sonini m=log 2 n ga kamaytirish imkonini beradi. Bu erda n - qul chiplari soni. Bular. 128 ta qurilmani ulash uchun 8 ta mikrokontroller pin kerak. Ulardan biri yoqish signalini o'rnatish uchun, 7 tasi esa yoqiladigan chip raqamini o'rnatish uchun. Shuni ta'kidlash kerakki, demultipleksatorning ulanmagan oyoqlarida mantiqiy bo'lishi kerak. Aks holda, mantiqiy nolni mantiqiyga aylantiradigan signal inverteri ishlatiladi.

Kaskadli kommutatsiya bu kamchilikdan ozoddir, chunki bu erda bir nechta chiplar bitta katta siljish registrini tashkil qiladi. Buning uchun 3-rasmda ko'rsatilganidek, bitta IC ning ma'lumotlar uzatish chiqishi ikkinchisining ma'lumotlarni qabul qilish kirishiga ulanadi. Bu erda chip tanlash kirishlari parallel ravishda ulanadi va shuning uchun aloqa liniyalarining umumiy soni teng saqlanadi. ga 4. Biroq, kaskadli ulanishdan foydalanish faqat uning qo'llab-quvvatlashi ishlatiladigan chiplar uchun hujjatlarda ko'rsatilgan bo'lsa mumkin. Buni bilish uchun shuni bilish kerakki, bunday aloqa ingliz tilida "romashka zanjiri" deb ataladi.

O'tkazish protokoli

SPI interfeysi orqali uzatish protokoli mohiyatan siljish registrining mantig'i bilan bir xil (7.6-rasm), u siljish operatsiyasini bajarishdan va shunga mos ravishda sinxronizatsiya signalining ma'lum qirralarida ma'lumotlarni bit kiritish va chiqarishdan iborat. Uzatish paytida ma'lumotlarni sozlash va qabul qilish vaqtida namuna olish har doim qarama-qarshi soat qirralarida amalga oshiriladi. Bu ma'lumotlar ishonchli tarzda o'rnatilgandan so'ng namuna olishni ta'minlash uchun zarur. Agar uzatish siklidagi birinchi chekka ko'tarilgan yoki pasayuvchi chekka bo'lishi mumkinligini hisobga olsak, SPI interfeysining ishlashi uchun to'rtta mumkin bo'lgan mantiqiy variant mavjud. Ushbu variantlar SPI rejimlari deb ataladi va ikkita parametr bilan tavsiflanadi:

· CPOL - sinxronizatsiya signalining boshlang'ich darajasi (agar CPOL=0 bo'lsa, uzatish tsikli boshlanishidan oldin va uning tugaganidan keyin sinxronizatsiya chizig'i past darajaga ega bo'ladi (ya'ni, birinchi chekka ko'tariladi va oxirgisi tushadi), aks holda, agar CPOL=1 bo'lsa, - yuqori (ya'ni, birinchi jabha tushmoqda, oxirgisi esa ko'tarilmoqda));

· CPHA - sinxronizatsiya bosqichi; Ushbu parametr ma'lumotlarni o'rnatish va olish ketma-ketligini belgilaydi. Agar CPHA=0 bo'lsa, u holda soat siklining ko'tarilgan chetida ma'lumotlar tanlanadi, so'ngra tushgan chekkada ma'lumotlar o'rnatiladi. Agar CPHA=1 bo'lsa, ma'lumotlarni o'rnatish sinxronizatsiya siklida ko'tarilgan chekkada amalga oshiriladi va namuna olish tushayotgan chekkada amalga oshiriladi.

SPI rejimlari haqidagi ma'lumotlar 7.7 va 7.8-rasmlarda keltirilgan.

Turli xil SPI rejimlarida ishlaydigan master va slave chiplari mos kelmaydi, shuning uchun qul chiplarini tanlashdan oldin, avtobus ustasi qaysi rejimlarni qo'llab-quvvatlashini aniqlab olish kerak. Mikrokontrollerlarga integratsiyalangan apparat SPI modullari ko'p hollarda har qanday rejimni tanlash imkoniyatini qo'llab-quvvatlaydi va shuning uchun ularga har qanday qul SPI chiplari ulanishi mumkin (faqat mustaqil ulanish opsiyasi uchun amal qiladi). Bundan tashqari, har qanday rejimda SPI protokoli dasturiy ta'minotda osongina amalga oshiriladi.

RS-485 interfeysi

RS-485 interfeysi (boshqa nomi EIA/TIA-485) eng keng tarqalgan jismoniy aloqa qatlami standartlaridan biridir. Jismoniy qatlam aloqa kanali va signalni uzatish usulidir (OSI ochiq tizimlarining o'zaro ulanish modelining 1-qatlami).

RS-485 interfeysida qurilgan tarmoq o'ralgan juftlik - ikkita o'ralgan sim yordamida ulangan transmitterlardan iborat. RS-485 interfeysi differensial (muvozanatlangan) ma'lumotlarni uzatish tamoyiliga asoslanadi. Uning mohiyati ikkita sim orqali bitta signalni uzatishdir. Bundan tashqari, bitta sim (shartli A) asl signalni, ikkinchisi esa (shartli B) uning teskari nusxasini olib yuradi. Boshqacha qilib aytganda, agar bitta simda "1" bo'lsa, ikkinchisida "0" va aksincha. Shunday qilib, o'ralgan juftlikning ikkita simlari o'rtasida har doim potentsial farq mavjud: "1" da u ijobiy, "0" da salbiy (7.9-rasm).

Aynan shu potentsial farq signalni uzatadi. Ushbu uzatish usuli umumiy rejim aralashuviga yuqori immunitetni ta'minlaydi. Umumiy rejim shovqini - bu chiziqning ikkala simiga teng ta'sir ko'rsatadigan shovqin. Masalan, aloqa liniyasining bir qismidan o'tadigan elektromagnit to'lqin ikkala simda ham potentsialni keltirib chiqaradi. Agar signal RS-232 da bo'lgani kabi umumiy simga nisbatan potentsial orqali uzatilsa, bu simdagi shovqin shovqinni yaxshi qabul qiladigan umumiy (tuproq) ga nisbatan signalni buzishi mumkin. Bundan tashqari, er potentsial farqi uzoq umumiy simning qarshiligi bo'ylab tushadi - qo'shimcha buzilish manbai. Va differentsial uzatish bilan buzilish sodir bo'lmaydi. Aslida, agar ikkita sim bir-biriga yaqin joylashgan bo'lsa va hatto bir-biriga bog'langan bo'lsa, unda ikkala simdagi pikap bir xil bo'ladi. Ikkala teng yuklangan simlardagi potentsial teng ravishda o'zgaradi, informatsion potentsial farq esa o'zgarishsiz qoladi.

RS485 interfeysining apparat ta'minoti.

Interfeysning apparatli amalga oshirilishi - differensial kirish/chiqish (liniyaga) va raqamli portlarga (kontrollerning UART portlariga) ega qabul qiluvchi chiplar. Ushbu interfeys uchun ikkita variant mavjud: RS-422 va RS-485.

RS-422 to'liq dupleks interfeysdir. Qabul qilish va uzatish ikkita alohida juft simlar orqali amalga oshiriladi. Har bir sim juftida faqat bitta transmitter bo'lishi mumkin.

RS-485 yarim dupleks interfeysdir. Qabul qilish va uzatish vaqtni ajratish bilan bir juft simlar orqali amalga oshiriladi. Tarmoqda ko'plab transmitterlar bo'lishi mumkin, chunki ular qabul qilish rejimida o'chirilishi mumkin (7.10-rasm).

7.10-rasmdagi belgilarning izohi

D (haydovchi) - uzatuvchi;
R (qabul qiluvchi) - qabul qiluvchi;
DI (haydovchi kiritish) - transmitterning raqamli kirishi;
RO (qabul qiluvchining chiqishi) - qabul qiluvchining raqamli chiqishi;
DE (haydovchini yoqish) - transmitterni ishlatish uchun ruxsat;
RE (qabul qiluvchini yoqish) - qabul qilgichni ishlatish uchun ruxsat;
A - to'g'ridan-to'g'ri differentsial kiritish/chiqish;
B - teskari differentsial kiritish/chiqish;
Y - to'g'ridan-to'g'ri differentsial chiqish (RS-422);
Z - teskari differentsial chiqish (RS-422).

Keling, RS-485 transvertorini batafsil ko'rib chiqaylik. Qabul qilgichning raqamli chiqishi (RO) qabul qiluvchining UART portiga (RX) ulangan. Transmitter raqamli kirish (DI) UART transmitter portiga (TX). Qabul qilgich va uzatuvchi differensial tomondan ulanganligi sababli, qabul qilish vaqtida uzatuvchi o'chirilgan bo'lishi kerak va uzatish paytida qabul qiluvchi o'chirilgan bo'lishi kerak. Buning uchun boshqaruv kirishlari qo'llaniladi - qabul qiluvchi ruxsati (RE) va uzatuvchi ruxsati (DE). RE kirishi teskari bo'lgani uchun u DE ga ulanishi va qabul qiluvchi va uzatgichni kontrollerning istalgan portidan bitta signal bilan almashtirishi mumkin. "0" darajasida - qabul qilish uchun ish, "1" da - uzatish uchun (7.11-rasm).

Qabul qilgich, differentsial kirishlarda (AB) potentsial farqni (UAB) qabul qilib, ularni RO chiqishida raqamli signalga aylantiradi. Qabul qilgichning sezgirligi boshqacha bo'lishi mumkin, ammo qabul qiluvchi chiplarni ishlab chiqaruvchilar hujjatlarda signalni aniqlash uchun kafolatlangan chegara oralig'ini yozadilar. Odatda bu chegaralar ± 200 mV ni tashkil qiladi. Ya'ni, UAB > +200 mV bo'lganda - qabul qiluvchi UAB qachon "1" ni aniqlaydi< -200 мВ - приемник определяет "0". Если разность потенциалов в линии настолько мала, что не выходит за пороговые значения - правильное распознавание сигнала не гарантируется. Кроме того, в линии могут быть и не синфазные помехи, которые исказят столь слабый сигнал.

Barcha qurilmalar bir o'ralgan juftlik kabeliga bir xil tarzda ulanadi: to'g'ridan-to'g'ri chiqishlar (A) bir simga, teskari chiqishlar (B) ikkinchisiga.

Chiziq tomoni (RAB) qabul qiluvchining kirish empedansi odatda 12KŌ ni tashkil qiladi. Transmitterning kuchi cheksiz bo'lmaganligi sababli, bu liniyaga ulangan qabul qiluvchilar soniga cheklov yaratadi. RS-485 spetsifikatsiyasiga ko'ra, tugatish rezistorlarini hisobga olgan holda, transmitter 32 tagacha qabul qiluvchini boshqarishi mumkin. Shu bilan birga, kirish empedansi kuchaygan bir qator mikrosxemalar mavjud bo'lib, ular 32 dan ortiq qurilmalarni liniyaga sezilarli darajada ulash imkonini beradi.

RS-485 spetsifikatsiyasiga muvofiq maksimal aloqa tezligi 10 Mbaud/sek ga yetishi mumkin. Maksimal masofa - 1200 metr. Agar 1200 metrdan ortiq masofada aloqani tashkil qilish yoki transmitterning yuk hajmi ruxsat etilganidan ko'proq qurilmalarni ulash zarur bo'lsa, maxsus takrorlagichlar qo'llaniladi.

I2C interfeysi.

Ushbu interfeys Flibs tomonidan taklif qilingan bo'lib, u o'z televizorlaridagi chiplar o'rtasidagi aloqani tashkil qilish uchun foydalangan. I 2 C (Integrated Circuit qisqartmasi) ikki tomonlama asinxron seriyali avtobusdir. Jismoniy jihatdan I 2 C avtobusi ikkita signal liniyasidan iborat bo'lib, ulardan biri (SCL) taktli signalni uzatish uchun, ikkinchisi (SDA) ma'lumotlar almashinuvi uchun mo'ljallangan. Chiziqlarni boshqarish uchun ochiq kollektorli chiqish bosqichlari qo'llaniladi, shuning uchun avtobus liniyalari liniyalarning jismoniy uzunligiga qarab 1 ... 10 kOhm qarshilikka ega bo'lgan rezistorlar orqali +5 V quvvat manbaiga ulanishi kerak va ma'lumotlarni uzatish tezligi. Standart rejimda ulanish liniyalarining uzunligi 2 metrga yetishi mumkin, ma'lumotlarni uzatish tezligi 100 kbit/s.

Barcha avtobus abonentlari ikkita sinfga bo'lingan - "Lider" va "Quli". Asosiy qurilma soat signalini (SCL) hosil qiladi. U mustaqil ravishda avtobusga kirishi va ma'lumotni uzatish yoki qabul qilish uchun har qanday tobe qurilmaga murojaat qilishi mumkin. Barcha tobe qurilmalar o'z manzillarini aniqlash uchun avtobusni "tinglaydilar" va uni tanib, belgilangan operatsiyani bajaradilar. Bundan tashqari, "MultiMaster" deb ataladigan rejim, avtobusga bir nechta asosiy qurilmalar o'rnatilganda mumkin bo'ladi, ular umumiy tobe qurilmalarni birgalikda baham ko'radilar yoki ular o'zlari ma'lumot almashishni boshlaganlarida navbatma-navbat usta vazifasini bajaradilar yoki qul sifatida ishlaydilar. ular boshqa asosiy qurilmadan kirishni kutishmoqda. "MultiMaster" rejimi doimiy monitoring va nizolarni tan olishni talab qiladi. Shu munosabat bilan, ushbu rejimni amalga oshirish qiyinroq (dasturiy ta'minotni amalga oshirishni anglatadi) va natijada haqiqiy mahsulotlarda kamroq qo'llaniladi.

Vaqtning dastlabki momentida - kutish rejimida - ikkala liniya SCL va SDA mantiqiy bir holatda (ochiq kollektor chiqish bosqichining tranzistori yopiq). O'tkazish rejimida (7.12-rasm) SDA ma'lumotlar biti SCL ning ko'tarilgan qirrasi bilan soatlanadi. SDA liniyasidagi ma'lumotlar SCL chizig'i nol holatda bo'lganda o'zgartiriladi. To'g'ri qurilma SCL chizig'ini nol holatda "ushlab turishi" mumkin, masalan, keyingi qabul qilingan baytni qayta ishlash paytida, asosiy qurilma esa ma'lumot uzatishni davom ettirishdan oldin SCL liniyasi bo'shatilguncha kutishi kerak.

I 2 C avtobus paketlarini sinxronlashtirish uchun ikkita shart ajratiladi - "START" va "STOP", ma'lumot paketining boshi va oxirini cheklaydi (7.13-rasm). Ushbu shartlarni kodlash uchun SCL liniyasining yagona holati bilan SDA liniyasi holatini o'zgartirish qo'llaniladi, bu ma'lumotlarni uzatishda qabul qilinishi mumkin emas. "START" sharti SDA chizig'ida pasayuvchi chekka paydo bo'lganda, SCL chizig'i bitta holatda bo'lganda va aksincha, SDA chizig'ida ko'tarilgan chekka paydo bo'lganda "STOP" holati hosil bo'ladi. chiziq yagona holatda.

Ma'lumotlarni uzatish SCL liniyasining birinchi ko'tarilgan chetidan boshlanadi, bu birinchi axborot baytining eng muhim bitini soatlaydi. Har bir axborot bayti (8 bit) SCL liniyasining 9 ta takt davrini o'z ichiga oladi. To'qqizinchi tsiklda qabul qiluvchi qurilma tasdiq (ACK) chiqaradi - ma'lumotlarning qabul qilinishini ko'rsatadigan pastga tushadigan chekka. Shuni ta'kidlash kerakki, har qanday avtobus abonenti, ham asosiy, ham qul, turli vaqtlarda ham uzatuvchi, ham qabul qiluvchi bo'lishi mumkin va rejimga muvofiq, ACK signalini qabul qilishi yoki berishi kerak, uning yo'qligi izohlanadi. xato sifatida.

Ma'lumot almashish operatsiyasini boshlash uchun asosiy qurilma avtobusda "START" shartini chiqaradi. “START” shartidan keyin yetti bitli qurilma manzili (bit 1...7) va bir bitli o‘qish-yozish operatsiyasi bayrog‘idan iborat bo‘lgan tobe qurilma manzili (7.14-rasm) bo‘lgan bayt keladi - “ R/W” (bit 0). R/W biti almashinish yo'nalishini belgilaydi, 0 ma'lumotni masterdan to qulga uzatishni bildiradi (7.14a-rasm), 1 - quldan o'qishni bildiradi (7.14b-rasm). I 2 C shinasidagi barcha bitlar yuqoridan pastgacha tartibda uzatiladi, ya'ni birinchi bo'lib 7-bit, oxirgi 0-bit uzatiladi. Manzildan keyin bir yoki bir nechta axborot baytlari (R/W bayrog'i bilan belgilangan yo'nalishda) bo'lishi mumkin, ularning bitlari SCL shinasida master tomonidan soatlanadi.

O'qish operatsiyasini bajarayotganda, xost keyingi baytni o'qishni xohlasa, o'qilgan baytni ACK qilishi kerak, agar u paketni o'qishni tugatmoqchi bo'lsa, ACK bermasligi kerak (7.14b-rasmga qarang).

To'g'ri qurilma manzilini bir uzatish siklida bir necha marta, ya'ni oldingi "STOP" shartisiz takroriy "START" holatini uzatishga ruxsat beriladi (7.14c-rasm).

I 2 C interfeysi orqali ishlaydigan xotira chiplarining ba'zi xususiyatlarini va ular bilan ma'lumot almashish tartiblarini ta'kidlash kerak. Birinchidan, bu mikrosxemalarning o'zgarmas ma'lumotlar xotirasi xotira sahifalariga bo'linadi, shuning uchun bayt yozilsa, avval butun sahifa mikrosxemaning ichki operativ xotirasiga ko'chiriladi, bu erda kerakli katak o'zgartiriladi. Shundan so'ng, eski sahifa o'chiriladi va uning o'rniga yangisi yoziladi. Yana bir xususiyat shundaki, asosiy manzilning eng muhim to'rt biti har doim 1010 ga teng bo'lishi kerak. Bu talab Flibs tomonidan tartibga solinadi.

1-simli avtobus aloqa va quvvat uchun faqat bitta o'tkazgichdan foydalanadi. Aloqa rejimi asinxron va yarim dupleks bo'lib, u master-qul modeliga qat'iy amal qiladi. Bir yoki bir nechta tobe qurilmalar bir vaqtning o'zida bir avtobusga ulanishi mumkin. Bitta avtobusga faqat bitta asosiy qurilma ulanishi mumkin.

Avtobusning bo'sh holati yuqori darajaga to'g'ri keladi, bu esa tortishish qarshiligi tomonidan ishlab chiqariladi. Pull-up rezistorining qiymati tobe IC uchun hujjatlarda berilgan. Avtobusga ulangan barcha chiplar past darajani ishlab chiqarishga qodir bo'lishi kerak. Agar mikrokontrollerning chiqishi uchta holatni qo'llab-quvvatlamasa, u holda ochiq kollektor yoki ochiq drenaj chiqishi bo'lgan drayverni ta'minlash kerak.

1-simli avtobus orqali signal uzatilishi 60 mks davom etadigan vaqt oralig'iga bo'linadi. Vaqt oralig'ida faqat bitta bit ma'lumotlar uzatiladi. To'g'ridan-to'g'ri qurilmalarning nominal vaqt kechikishidan sezilarli farqlarga ega bo'lishiga ruxsat beriladi. Biroq, bu har xil vaqt asoslariga ega bo'lgan bo'ysunuvchilar bilan to'g'ri muloqotni ta'minlash uchun rahbar tomonidan aniqroq vaqtni talab qiladi.

Asosiy avtobus signallari.

Magistr har bir aloqani bit darajasida boshlaydi. Bu shuni anglatadiki, har bir bitning uzatilishi, yo'nalishidan qat'i nazar, usta tomonidan boshlanishi kerak. Bunga boshqa barcha qurilmalarning mantig'ini sinxronlashtiradigan avtobusni past darajada sozlash orqali erishiladi. 1-simli avtobus orqali aloqa qilish uchun 5 ta asosiy buyruq mavjud: “Jurnalni yozish. 1”, “Jurnalni yozish. 0”, “O‘qish”, “Qayta tiklash” va “Mavjudlik”.

Signal “Jurnalni yozish. 1"

Signal “Jurnalni yozish. 1" rasmda ko'rsatilgan. 7.15. Master past darajani 1...15 mks uchun o'rnatadi. Shundan so'ng, u avtobusni qolgan vaqt oralig'ida bo'shatadi.

Guruch. 7.15 – Signal “Jurnalni yozish. 1"

Signal “Jurnalni yozish. 0"

Signal “Jurnalni yozish. 0” 7.16-rasmda ko'rsatilgan. Master kamida 60 mks uchun past darajani hosil qiladi, lekin 120 mks dan ortiq emas.

7.16-rasm – Signal “Jurnalni yozish. 0"

Signalni o'qish

"O'qish" signali rasmda ko'rsatilgan. 7.17. Master past darajani 1...15 mks uchun o'rnatadi. Keyin qul, agar jurnalni uzatmoqchi bo'lsa, avtobusni past ushlab turadi. 0. Jurnalni o'tkazish zarur bo'lsa. 1, keyin u shunchaki chiziqni chiqaradi. Avtobusni skanerlash avtobus pastga tushgandan keyin 15 mks ichida amalga oshirilishi kerak. Magistr tomondan qaralganda, "O'qish" signali, aslida, "Jurnalni yozish" signalidir. 1". Qulning haqiqiy ichki holati "Record log" signali bilan aniqlanadi. 1" yoki "O'qish".

7.17-rasm - "O'qish" signali

Qayta tiklash/mavjudlik signali

"Qayta tiklash" va "Mavjudlik" signallari 7.18-rasmda ko'rsatilgan. E'tibor bering, impuls vaqt oralig'i boshqacha. Master 8 vaqt oralig'i (480 mks) uchun pastga tortadi va keyin avtobusni qo'yib yuboradi. Past holatning bu uzoq davri "Reset" signali deb ataladi.

Agar avtobusda qul bo'lsa, master avtobusni qo'yib yuborganidan keyin 60 mks ichida u kamida 60 mks uchun past darajani o'rnatishi kerak. Bu javob "Mavjudlik" deb ataladi. Agar bunday signal aniqlanmasa, u holda usta avtobusga ulangan qurilmalar yo'qligini va keyingi aloqaning mumkin emasligini taxmin qilishi kerak.

USB (Universal seriyali avtobus) tashqi qurilmalarni shaxsiy kompyuterga tezda ulash va keyin kerakli dasturiy ta'minotni topish va o'rnatish uchun ishlab chiqilgan. Kam quvvatli qurilmalar to'g'ridan-to'g'ri interfeys orqali quvvatlanadi.

USB standarti tarmoqda faqat bitta asosiy (host) qurilma mavjudligini nazarda tutadi. Bundan tashqari, standart tarmoqdagi 127 tagacha tobe qurilmalarni qo'llab-quvvatlaydi. Asosiy va tobe qurilmalarni farqlash uchun har xil turdagi ulagichlar ishlab chiqilgan (7.19-rasm): master uchun A turi va tobe uchun B tipi. 5V kuchlanish faqat asosiy konnektor bo'lgan A tipidagi ulagichda mavjudligi qabul qilinadi. Qolgan qurilmalar to'g'ridan-to'g'ri undan quvvat oladi.

USB standarti 4 ta ekranlangan simlardan foydalanadi, ulardan ikkitasi quvvatni uzatadi (+5v & GND) (7.19-rasm va 7.2-jadval). Qolgan ikkitasi o'ralgan juftlik differensial ma'lumotlar signallarini ifodalaydi. Ishlatilgan kodlash sxemasi NRZI(Non Return to Zero Invert) asosiy va yordamchi soatlarni sinxronlashtirish uchun sinxronizatsiya maydoni bilan ma'lumotlarni uzatish uchun.

USB 2.0 standarti On-The-Go (OTG) standartini taqdim etdi, bu esa ikkita USB qurilmasi master sifatida kim ishlashini kelishib olish imkonini beruvchi Xost muzokaralar protokolini taqdim etdi. Bu shaxsiy kompyuterga mobil telefon kabi bir nuqtadan nuqtaga ulanish uchun mo'ljallangan va cheklangan.

USB dinamik yuklangan va yuklanmagan drayverlar bilan "issiq" (plug'n'play) ulanishni qo'llab-quvvatlaydi. Foydalanuvchi shunchaki qurilmani ulaydi va shu bilan uni avtobusga ulaydi. Xost ulanishni aniqlaydi, yangi o'rnatilgan qurilmani so'raydi va ekranda qum soati bilan yuklanish vaqtini ko'rsatib, tegishli drayverni yuklaydi (agar USB qurilmasi uchun drayver allaqachon tizimda o'rnatilgan bo'lsa). Yakuniy foydalanuvchi tugatish haqida qayg'urmaydi yoki IRQ(uzilishlar) va port manzillari, na kompyuterni qayta ishga tushirish haqida (qayta yuklash shart emas). Foydalanuvchi USB qurilmasi bilan ishlashni tugatgandan so'ng, ular shunchaki uni olib tashlashadi (yoki kabelni ajratib qo'yishadi), xost qurilmaning yo'qligini aniqlaydi va drayverni avtomatik ravishda tushiradi.

SB 1.1 versiyasi ikkita tezlikni qo'llab-quvvatlaydi - 12 Mbit / s tezlikda to'liq tezlik rejimi va 1,5 Mbit / s tezlikda past tezlik rejimi. 1,5 Mbits / s rejimi sekinroq va EMI (aralashuv) ga nisbatan kam sezgir, bu ferrit boncuklarining narxini pasaytiradi va komponentlar sifatiga bo'lgan talablarni kamaytiradi.

To'liq tezlikda ishlaydigan avtobus kabeli o'ralgan juftlik kabeli bo'lib, qalqon bilan himoyalangan va past tezlikda ishlash uchun ham ishlatilishi mumkin. Faqat minimal tezlikda ishlash uchun kabel (masalan, sichqonchani ulash uchun) har qanday va ekranlanmagan bo'lishi mumkin.

USB 2.0 standarti ma'lumotlarni uzatish tezligi 480 Mbit/s bo'lgan yuqori tezlik rejimini taqdim etadi.

Ma'lumotlarni uzatish.

Interfeys orqali barcha ma'lumotlarni uzatish xost tomonidan boshlanadi. Ma'lumotlar paketlar shaklida uzatiladi. USB interfeysi bir necha turdagi paketlardan foydalanadi:

A) imzo paketi (token paketi) ma'lumotlarni uzatish turi va yo'nalishini, qurilma manzilini va oxirgi nuqtaning seriya raqamini tavsiflaydi (CT USB qurilmasining manzilli qismidir); Xususiyat paketlari bir necha turga ega: IN, OUT, SOF, SOZLASH; O'RNATISH;

B) ma'lumotlar paketi (ma'lumotlar paketi) uzatilgan ma'lumotlarni o'z ichiga oladi;

B) tasdiqlash paketi (qo'l siqish to'plami) ma'lumotlarni uzatish natijalari haqida xabar berish uchun mo'ljallangan; Koordinatsion paketlarning bir necha turlari mavjud: ACK, N.A.K., TO'XTIRISH.

USB orqali ma'lumotlarni uzatish quyidagicha amalga oshiriladi:

Birinchi paket, ya'ni token, uzatilayotgan ma'lumotlar turini, uzatish operatsiyasini (o'qish yoki yozish), qurilma manzilini va oxirgi nuqtani tavsiflash uchun asosiy qurilma tomonidan ishlab chiqariladi. Odatda uzatiladigan navbatdagisi foydali ma'lumotlarni o'z ichiga olgan ma'lumotlar paketidir, undan keyin ma'lumotlar yoki token muvaffaqiyatli qabul qilinganligini yoki oxirgi nuqta to'xtab qolganligini yoki ma'lumotlarni qabul qilish uchun mavjud emasligini ko'rsatadigan qo'l siqish paketi.

USB standartidagi so'nggi nuqtalar ma'lumotlar manbalari va yig'ish joylari hisoblanadi. Barcha qurilmalar 0 so‘nggi nuqtasini qo‘llab-quvvatlashi kerak. Bu sanab o‘tish vaqtida (biriktirilgan qurilma turini aniqlash uchun so‘rov) va qurilma avtobusda ishlayotgan vaqt davomida barcha boshqaruv va holat so‘rovlarini qabul qiluvchi so‘nggi nuqta.

1 dan boshlab raqamlangan so'nggi nuqtalar foydalanuvchi ma'lumotlarini uzatish uchun ishlatiladi. Keling, bir nechta misollarni ko'rib chiqaylik.

Qurilma drayveri asosiy qurilmaning oxirgi nuqtasi EP1 ga uzatadi. Chunki Ushbu qurilma asosiy hisoblanadi, keyin ma'lumotlar EP1 OUT buferiga tushadi. Bunday holda, OUT tokeni yuboriladi, bu ma'lumotlar jo'natishga tayyorligini bildiradi. Ushbu tokenni olgandan so'ng, qul qurilma OUT buferidan ma'lumotlarni o'qiy oladi.

Agar tobe qurilma masterga ma'lumotlarni uzatishi kerak bo'lsa, u uni IN buferiga joylashtiradi. Magistr oxirgi nuqtadan ma'lumot so'rab IN tokenini yubormaguncha, bu bufer ma'lumotlarni saqlaydi. Barcha so'nggi nuqta buferlari masterga nisbatan nomlanadi, ya'ni. Tobe qurilmaning chiqish buferi IN deb ataladi, chunki bu asosiy qurilma uchun kirish buferidir.

Ma'lumotlarni bir so'nggi nuqtadan ikkinchisiga uzatish oqimlar orqali amalga oshiriladi. Oqim - Xost va oxirgi nuqta (lar) o'rtasidagi mantiqiy aloqa.

Oqimlar shuningdek, uzatish turi (Boshqarish, ommaviy, Iso yoki uzilish), ma'lumotlar oqimi yo'nalishi va maksimal paket/bufer o'lchamlari kabi parametrlar to'plamiga ega.

Misol uchun, standart oqim uzatish turini boshqarish bilan IN so'nggi nuqta 0 va OUT oxirgi nuqta 0 dan tashkil topgan ikki tomonlama oqimdir.

USB ikki turdagi quvurlarni belgilaydi

A) Oqim quvurlari oldindan belgilangan USB formatiga ega emas, shuning uchun oqim trubkasi orqali istalgan turdagi ma'lumotlarni yuborishingiz va boshqa uchida ma'lumotlarni qayta tiklashingiz mumkin. Ma'lumotlar oqimlari ketma-ket va oldindan belgilangan yo'nalishga ega - IN yoki OUT. Oqim quvurlari ommaviy, izoxron va uzilishli uzatish turlarini qo'llab-quvvatlaydi. Oqim quvurlari uy egasi yoki qurilmadan boshqarilishi mumkin.

B) Xabar quvurlari oldindan belgilangan USB formatiga ega. Ular xost tomonidan boshqariladi, xost tomonidan yuborilgan so'rov bilan boshlanadi. Ma'lumotlar so'rovda ko'rsatilgan kerakli yo'nalishda yuboriladi. Shunday qilib, xabar quvurlari ma'lumotlarni har ikki yo'nalishda ham uzatishga imkon beradi, lekin faqat nazorat o'tkazmalarini qo'llab-quvvatlaydi.

USB standarti ma'lumotlarni uzatishning to'rt turini tavsiflaydi:

A) Boshqaruvni yo'naltirish (uzatishni nazorat qilish) qurilma konfiguratsiyasi hamda boshqa qurilmaga xos maqsadlarda ishlatiladi.

B) oqim (ommaviy uzatish) nisbatan katta hajmdagi axborotni uzatish uchun ishlatiladi.

B) Yo‘naltirishni to‘xtatish (uzluksiz uzatish) nisbatan kichik hajmdagi axborotni uzatish uchun ishlatiladi, buning uchun uni o'z vaqtida uzatish muhimdir. U boshqa turdagi transferlarga nisbatan cheklangan muddatga va yuqoriroq ustuvorlikka ega.

D) Izoxron uzatish (izoxron uzatish) real vaqtda oqim deb ham ataladi. Bunday uzatishda uzatiladigan ma'lumotlar uni yaratish, uzatish va qabul qilish vaqtida real vaqt shkalasini talab qiladi.

Oqimli transferlar ma'lumotni uzatish va qayta so'rash vaqtida xatolarni aniqlash orqali xost va funksiya o'rtasida kafolatlangan xatosiz ma'lumotlarni uzatish bilan tavsiflanadi. Xost funktsiyadan ma'lumot olishga tayyor bo'lganda, u funktsiyaga bayroq paketini yuboradi IN- plastik to'rva. Bunga javoban, ma'lumotlarni uzatish bosqichidagi funktsiya ma'lumotlar paketini xostga yoki agar u bo'lsa, uzatadi

SPI Arduino-da bu Arduino platasi va ulangan qurilmalar o'rtasida ma'lumot almashish uchun asosiy protokollardan biridir. I2C va UART bilan birgalikda ushbu protokol ko'pincha ko'plab turdagi periferik qurilmalar uchun ishlatiladi, shuning uchun SPI ishlash tamoyillarini bilish har qanday Arduino muhandisi uchun zarurdir. Ushbu maqolada biz SPI sensorlari va ekranlarini Arduino-ga ulashning asosiy tamoyillari, o'zaro ta'sir qilish sxemasi va usulini qisqacha ko'rib chiqamiz.

SPI - bu mikrokontroller (Master) va periferik qurilmalar (Slave) o'rtasida keng qo'llaniladigan ma'lumotlarni uzatish protokoli. Bizning loyihalarimizda Arduino taxtasi ko'pincha Master sifatida ishlatiladi. SPI interfeysi Motorola tomonidan ixtiro qilingan va ishlatilgan, ammo vaqt o'tishi bilan u sanoat standartiga aylandi. Ushbu interfeys bilan ishlashning asosiy afzalligi uning yuqori tezligi va bir ma'lumot shinasiga bir nechta qurilmalarni ulash imkoniyatidir.

SPI pinlari va pinlari

SPI arduino interfeysi orqali aloqa bir-biriga yaqin joylashgan bir nechta qurilmalar o'rtasida sodir bo'ladi. Arduino platalari SPI uchun alohida pinlar bilan jihozlangan. Ulanish to'rtta kontakt yordamida amalga oshiriladi:

  • MOSI - ma'lumot ushbu liniya orqali Masterdan Slavega uzatiladi.
  • MISO - ma'lumotni quldan ustaga o'tkazish uchun ishlatiladi.
  • SCLK - sinxron ma'lumotlarni uzatish uchun soat impulslarini yaratish.
  • SS - tobe qurilmani tanlash.

SPI qurilmalarining o'zaro ta'siri

Qurilmaning o'zaro ta'siri SS chiqishi pasayganda boshlanadi.

Ishni boshlashdan oldin siz quyidagilarni aniqlashingiz kerak:

  • Shift qaysi bitdan boshlanishi kerak - yuqori yoki past? Buyurtma PI.setBitOrder() funksiyasi yordamida o'rnatiladi.
  • SCK chizig'i soat pulsi bo'lmaganda bo'lishi kerak bo'lgan darajani aniqlang. SPI.setDataMode() funksiyasi orqali sozlanishi.
  • Ma'lumot uzatish tezligini tanlang. SPI.setClockDivider() funksiyasi tomonidan aniqlanadi.

Keyingi qadam ma'lumotlarning qaysi rejimda uzatilishini aniqlashdir. Rejimni tanlash soat pulsining polaritesi va fazasi kabi ko'rsatkichlar bilan belgilanadi. Agar daraja past bo'lsa, 0 qayd etiladi, yuqori - 1. Hammasi bo'lib 4 ta rejim mavjud:

  • Rejim 0 – SPI_MODE0: qutblilik (CPOL) 0, faza (CPHA) 0.
  • 1-rejim: polarit 0, faza 1.
  • 2-rejim: polarit 1, faza 0.
  • 3-rejim: 1-qutblilik, 1-bosqich.

Dastlab, Arduino birinchi navbatda eng muhim bit bilan ma'lumotlarni uzatish uchun mo'ljallangan, ammo boshlashdan oldin buni hujjatlarda aniqlab olishingiz kerak. Rasmdagi rejimlarni ko'rsatishingiz mumkin.

SPI interfeysida ulanishning ikki turi mavjud: mustaqil va kaskadli. Birinchi holda, ulanishda Master har bir Slavega alohida murojaat qiladi, ikkinchi holda, ulanish birma-bir sodir bo'ladi, ya'ni. kaskad.

SPI-ni Arduino-ga ulash

Har bir Arduino modeli o'z SPI pinlariga ega. Bu xulosalar:

  • Uno: MOSI pin 11 yoki ICSP-4, MISO - 12 yoki ICSP-1, SCK - 13 yoki ICSP-3, SS (qul) - 10 ga mos keladi.
  • Mega1280 yoki Mega2560: MOSI – 51 yoki ICSP-4, MISO – 50 yoki ICSP-1, SCK – 52 yoki ICSP-3, SS (qul) – 53.
  • Leonardo: MOSI – ICSP-4, MISO – ICSP-1, SCK – ICSP-3.
  • Muddati: MOSI – ICSP-4, MISO –ICSP-1, SCK –ICSP-3, SS (magistr) – 4, 10, 52.

Eng yangi Arduino Due kontrolleri foydalanuvchi imkoniyatlarini kengaytiradi va boshqa mikrokontrollerlarga qaraganda ko'proq vazifalarni amalga oshirish imkonini beradi. Misol uchun, qul qurilmani avtomatik ravishda boshqarish va turli xil konfiguratsiyalarni (soat tezligi, rejim va boshqalar) avtomatik ravishda tanlash mumkin.

Arduino SPI kutubxonasi

Arduino ustida ishlash uchun SPI ni amalga oshiradigan alohida kutubxona yaratilgan. Kodni boshlashdan oldin #include qo'shishingiz kerak kutubxonani yoqish uchun.

Asosiy funktsiyalari:

  • begin() va end() - ishni yoqish va o'chirish. Ishga tushirish vaqtida SCLK, MOSI va SS liniyalari chiqishda sozlanadi, SCLK, MOSI ga past daraja va SS ga yuqori daraja yuboriladi. end() funksiyasi chiziq sathlarini o'zgartirmaydi, Arduino platasidagi interfeys bilan bog'langan blokni o'chirish uchun kerak bo'ladi.
  • setBitOrder(order) – axborot bitlarini yuborish tartibini belgilash (MSBFIRST – eng muhim bitning ustuvorligi, LSBFIRST – eng kam ahamiyatli bitning ustuvorligi).
  • setClockDivider(divider) - asosiy chastotali soat bo'luvchilarini o'rnatish. 2, 4, 8, 16, 32, 64 va 128 ning bo'luvchilarini o'rnatishingiz mumkin. U quyidagicha yoziladi - SPI_CLOCK_DIVn, bu erda n - tanlangan bo'luvchi.
  • setDataMode(rejim) - to'rtta ish rejimidan birini tanlang.
  • uzatish(qiymat) - asosiy qurilmadan baytni uzatadi va tobe qurilmadan olingan baytni qaytaradi.
  • shiftIn(miso_pin, sclk_pin, bit_order) va shiftOut(mosi_pin, sclk_pin, buyurtma, qiymat) - ma'lumotlarni qabul qilish va yuborish, har qanday raqamli pinlarga ulanishi mumkin, lekin bundan oldin ularni o'zingiz sozlashingiz kerak.

SPI ning afzalliklari va kamchiliklari

SPI interfeysining afzalliklari:

  • 8 bit bilan cheklanmagan katta hajmdagi ma'lumotlarni uzatish qobiliyati.
  • Dasturiy ta'minotni amalga oshirish oson.
  • Uskunani amalga oshirishning soddaligi.
  • Parallel interfeyslarga qaraganda kamroq pin kerak.
  • Faqat qurilmalarning tezligi maksimal soat chastotasini cheklaydi.

Kamchiliklari:

  • I2C bilan solishtirganda ko'p sonli pinlar.
  • Qul axborot oqimini boshqara olmaydi.
  • Standart xatolarni aniqlash protokolining yo'qligi.
  • Interfeysni amalga oshirishning ko'plab usullari.
  • Ma'lumotni qabul qilishni tasdiqlashning yo'qligi.

Bosim sensori bilan loyihada Arduino SPI dan foydalanishga misol

Loyihani amalga oshirish uchun bizga Arduino, bosim sensori, non paneli va simlar kerak. Sensor ulanishining namunasi rasmda ko'rsatilgan.

SCP1000 sensori yordamida bosim va harorat kabi parametrlarni tanib olish va bu qiymatlarni SPI orqali uzatish mumkin.

Dastur eskizining asosiy elementlari

Avvalo, sensor registrlari setup() yordamida kodda qayd etiladi. Qurilmadan bir nechta qiymat qaytariladi - qabul qilingan bosim uchun 19 bitdan biri, harorat uchun 16 bitdan biri. Shundan so'ng, ikkita harorat bayti o'qiladi va bosim ikki bosqichda o'qiladi. Birinchidan, dastur uchta eng muhim bitni, so'ngra keyingi 16 bitni oladi, shundan so'ng bitni siljitish orqali bu ikki qiymat bittaga birlashtiriladi. Haqiqiy bosim 4 ga bo'lingan 19 raqamli qiymatdir.

const int PRESSURE = 0x1F; // bosimni aniqlashning birinchi bosqichi (uchta eng muhim bit aniqlangan)

const int PRESSURE_LSB = 0x20; // bosim uchun 16 bitni belgilaydigan ikkinchi bosqich

const int TEMPERATURE = 0x21; //harorat uchun 16 bit

Harorat ma'lumotlarini o'qish va uni Selsiyga aylantirish uchun quyidagi kod elementi ishlatiladi:

int tempData = readRegister (0x21, 2);

float realTemp = (float)tempData / 20.0; // Selsiy bo'yicha haqiqiy harorat qiymatini aniqlash uchun siz olingan sonni 20 ga bo'lishingiz kerak

Serial.print (“Temp

Serial.print(realTemp);

Bosim bitlarini o'qish va ularni birlashtirish:

bayt bosimi_data_high = o'qingRegister(0x1F, 1);

press_data_high &= 0b00000111;

unsigned int pressure_data_low = readRegister (0x20, 2);

uzoq bosim = ((bosim_ma'lumotlari_yuqori<< 16) | pressure_data_low) / 4; //определение давления в Паскалях.

SPI haqida qisqacha xulosalar

SPI qalqonlari va sensorlari ko'pincha Arduino loyihalarida topiladi, shuning uchun siz ushbu protokol qanday ishlashini bilishingiz kerak. Aslida, SPI qurilmalarini ulashda hech qanday murakkab narsa yo'q. Asosiysi, simlarni to'g'ri ulash va standart kutubxona usullarini to'g'ri ketma-ketlikda ishlatishdir. Ba'zi qurilmalar uchun, masalan, SD-kartalar yoki OLED ekranlar uchun, printsipial jihatdan, alternativa yo'q.

Xayrli kun! Bugungi maqola Arduino dasturlash kursini o'zlashtirishda bizga yordam beradigan kichik nazariy tahlildir. Biz SPI interfeysi haqida gaplashamiz. Bu nima va u nima bilan iste'mol qilinadi, biz ushbu maqolada buni tushunishga harakat qilamiz.

Boshlash uchun, ta'rif. SPI(Serial Peripheral Interface - ketma-ket periferik interfeys) ketma-ket sinxron ma'lumotlarni uzatish standarti bo'lib, u boshqaruvchini turli tashqi qurilmalar bilan bog'lash uchun mo'ljallangan. Ushbu interfeys oddiy va qulay. Arduino uchun SPI bilan ishlash uchun maxsus kutubxona yozilgan.

Muloqot "usta-qul" tamoyiliga asoslanadi. Nazoratchi odatda asosiy qurilma hisoblanadi. Tizimga ulangan barcha boshqa qurilmalar quldir. Asosiy qurilmadan olingan ma'lumotlar ma'lumotlar shinasi orqali tanlangan tobelardan biriga yoki aksincha, asosiy soat signali yordamida asosiy qurilmadan masterga sinxron uzatiladi.

SPI ma'lumotlar avtobusining pinouti 4 qatordan iborat: MOSI, MISO, CS va SCLK:

  • MOSI(Master Out Slave In - Master-chiqish, Slave-kirish) yoki oddiygina S.I.– asosiy qurilmadan tobe qurilmaga ma’lumotlarni uzatish sodir bo‘ladi.
  • MISO(Master In Slave Out - Master-kirish, Slave-chiqish) yoki oddiygina SO– ma’lumotlar to‘g‘ri qurilmadan asosiy qurilmaga uzatiladi.
  • C.S.(Chip Select - Chip tanlash) yoki SS(Tobe tanlash — Tobe tanlash) – tobe qurilmani tanlash.
  • SCLK(Serial SOAT) yoki oddiygina SCK– soat signalini masterdan qulga uzatish.

Ma'lumotni masterdan qulga o'tkazish uchun master aloqa o'rnatmoqchi bo'lgan qulning CS liniyasida past signal darajasini o'rnatishi kerak. Keyin bitlar MOSI liniyasi orqali uzatiladi. Ma'lumot uzatishni to'xtatish uchun etakchi CS liniyasini "bo'shatadi", xuddi yuqori signal darajasini o'rnatadi.

SPI ma'lumotlar shinasiga bir nechta tobe qurilmalarni ulash uchun ularning har biri o'z shaxsiy CS liniyasiga ega bo'lishi kerak. Bu amalga oshirilgandan so'ng, asosiy qurilma navbatma-navbat chiziqlarni "tortib olishi", tobe qurilmalar o'rtasida almashishi mumkin. Bir nechta qullarni turli yo'llar bilan ulash mumkin: parallel yoki ketma-ket.

SPI ma'lumotlar shinasi orqali qul qurilmalarning parallel ulanishi

Bir nechta tobe qurilmalarning parallel ulanishining o'ziga xos xususiyati shundaki, aloqani yaratish uchun SCLK, MOSI va MISO umumiy liniyalari qo'llaniladi. Bunday holda, har bir tobe qurilma o'z SS(CS) liniyasiga ega. Asosiy qurilma mos keladigan SSn liniyasida past signal darajasini hosil qilish orqali ma'lumotlar almashinuvini qaysi "joriy qul" bilan o'rnatishni aniqlaydi (bu erda n - 1,2...).

SPI interfeysi orqali n-sonli tobe qurilmalarni kontrollerga ulash uchun siz ularni shu maqsadda ajratishingiz kerak. n+3 mikrokontroller pinlari.

SPI shinasiga qul qurilmalarning ketma-ket ulanishi

To'g'ri qurilmalarning ketma-ket ulanishiga kelsak, ular SCLK va SS umumiy liniyalaridan foydalanadilar va birining chiqishi ikkinchisining kirishiga ulanadi. Magistrning MOSI liniyasi birinchi tobega, MISO liniyasi esa oxirgisiga ulanadi. Agar siz ushbu ulanishga asosiy qurilma nuqtai nazaridan qarasangiz, SPI ma'lumotlar shinasi orqali bitta tobe qurilma ulanadi.

Ushbu turdagi ulanishning afzalligini ta'kidlash kerak: bu maqsadda mikrokontrollerning faqat 4 ta pinini ishlatib, n-sonli qurilmalarni ulashingiz mumkin.

Hozircha hammasi shu, davomi...

Bugun biz shinalar bilan tanishishni boshlaymiz SPI (seriyali periferik interfeys).

Ushbu avtobus elektronikada juda keng qo'llaniladi. Bu juda qulay, sinxron va to'liq dupleks, shuning uchun u turli xil raqamli qurilmalar - sensorlar, kontrollerlar, drayverlar va boshqa qurilmalar o'rtasidagi aloqa uchun ko'plab sxemalarda qo'llaniladi.

U bilan tanishish zaruratining yana bir muhim omili shundaki, bu avtobus apparaturada kontrollerlarda tashkil etilgan. AVR.

Bundan tashqari, biz xohlaymizmi yoki yo'qmi, biz SPI interfeysi bilan uzoq vaqt davomida aloqa o'rnatdik, chunki biz birinchi marta kontrollerimizni miltillashni boshlaganimizdan so'ng, u ushbu interfeys orqali miltillaydi.

Shuning uchun men bu shinani yaxshiroq bilishni xohlayman.

Keling, Atmega8 kontroller uchun texnik hujjatlarni ochamiz, ushbu kontrollerning pinouti ko'rsatilgan sahifani oching va 16 dan 19 gacha pinlar SPI avtobus pinlari joylashganligini ko'ring.

Endi bu topilmalar haqida bir oz ko'proq

SS (chip tanlash)— bu qurilma tanlash oyog'i. Agar ushbu pindagi tobe qurilma past darajaga o'rnatilgan bo'lsa, u holda bu qurilma javob beradi va SPI shinasi orqali ma'lumot almashadi, agar u yuqori bo'lsa, u bo'lmaydi.

MOSI (master chiqish qul kirish)- Bu asosiy qurilmaning chiqish pimi va tobe qurilmaning kirishi.

MISO (master kirish qul chiqishi)- aksincha, qulning chiqishi, xo'jayinning kirishi.

SCK- sinxronizatsiya oyog'i. Ushbu avtobusda ma'lumot almashishda ishtirok etuvchi barcha qurilmalar ma'lum bir chastotada takt pulslari bilan ta'minlanadi.

Mana Atmega8 kontrollerida SPI avtobusini amalga oshirish diagrammasi

Har qanday avtobus singari, ma'lum ma'lumotlarni saqlaydigan bir qator registrlar mavjud.

Bizni SHIFT REGISTER qiziqtiradi, u orqali ma'lumotlar almashiladi. Sozlamalarga qarab, sinxronlash pinida ma'lum bir chekka bo'lishi bilanoq, pasayuvchi yoki ko'tarilgan holda, qul va asosiy qurilmalarning ushbu registrlari ma'lumot almashadi va barcha ma'lumotlar emas, balki faqat bitta bit. Ushbu registrlar chapga siljiydi va har bir registrning eng muhim bitlari bog'langan qurilmaning bir xil registrining eng kam ahamiyatli bitlariga o'tadi. Ya'ni, qul o'zining eng muhim bitini MOSI pin orqali liderga uzatadi, u chap siljish tufayli uni bo'shatilgan past tartibli bitga yozadi va qul o'zining almashtirilgan yuqori tartibli bitini MISO orqali uzatadi. yetakchining past tartibli bitiga pin. Ayirboshlash shunday davom etadi, ya'ni 8 to'liq soat siklida ular baytlarni to'liq almashtiradilar

Bir bayt ma'lumotning barcha 8 biti uzatilishi bilanoq, ma'lum bir registr bizga bu jarayon tugaganligi haqida signal beradi. To'g'rirog'i, ma'lum bir registrning ma'lum bir qismi.

Shuningdek, blok-sxemada biz ajratgichni ko'ramiz, uning kirish qismi soat impulslarini oladi va keyin ma'lum bir qiymatga bo'linadi, ular zanjir orqali SCK piniga yuboriladi va u erdan ular pin ustidagi tobe qurilmaga beriladi. bir xil ism. Bu qurilmalarning sinxron ishlashini ta'minlaydi. Soat chastotasi almashinuvda ishtirok etuvchi barcha qurilmalar tomonidan qo'llab-quvvatlanadigan eng past chastotadan tanlanadi.

Men ko'plik deyman, chunki berilgan sxemada ikkitadan ortiq qurilma bo'lishi mumkin. Bu qanday ta'minlanadi, agar qurilmalarda hech qanday manzil bo'lmasa, men hozir sizga aytaman.

Bir nechta qurilmalar o'rtasida ma'lumot almashishning bir necha usullari mavjud, ya'ni bitta asosiy qurilmada bir nechta qullar mavjud bo'lganda. Biz ulardan eng keng tarqalgan ikkitasini ko'rib chiqamiz.

Birinchi usul radial (tasvirni kattalashtirish uchun rasm ustiga bosing)

Bu erda master ma'lumotlarni ma'lum bir qurilmaga yo'naltiradi, SS pinidagi mantiqiy 0 ni yoqadi.Ushbu usul yordamida faqat bitta qurilmani tanlash mumkin, shuningdek, sizga kontroller portlarining bir nechta bo'sh pinlari kerak bo'ladi.

Yana bir qiziqarli usul bor - qo'ng'iroq yoki kaskad (rasmni kattalashtirish uchun rasmga bosing)

Bu erda biz tanlov oyoqlarining barchasi parallel ekanligini va almashinuv aylana bo'ylab ketayotganini ko'ramiz. Shunday qilib, uzatish doirasi ortib borayotganligi sababli tezlik pasayadi, lekin port oyoqlari saqlanadi.

Bularning barchasini keyingi darslarda, loyihalarimizda ma'lum qurilmalardan foydalanganda batafsil o'rganamiz.

Bu avtobus orqali ma'lumotlarni uzatish sxemasiga o'xshaydi SPI biz buni aniqladik.

Keling, ushbu jarayonni AVR kontroller apparati registrlari darajasida qanday boshqarishni aniqlaylik.

Biz ushbu registrlarni sahifadagi yuqoridagi blok-sxemada ko'ramiz.

Atmega8 SPI avtobusiga xizmat ko'rsatish uchun quyidagi registrlarga ega.

SPDR (SPI ma'lumotlar registri)- ma'lumotlar registri, blok-sxemada bu DATA BUFFER. Biz ushbu registrga keyinchalik uni tobe qurilmaga uzatish uchun baytni kiritamiz va undan biz tobe qurilmadan kelgan ma'lumot baytini o'qiymiz. Bizning boshqaruvchimiz asosiy qurilma bo'lishi ham shart emas. Keyinchalik, biz ikkita kontroller sxemasini yig'amiz, ulardan biri qul bo'ladi. Shunday qilib, jo'natish va qabul qilish uchun bayt aynan shu registrda joylashgan bo'ladi.

SPCR (SPI nazorat registri)- nazorat registri

Ushbu registr quyidagi bitlarni o'z ichiga oladi:

SPIE (SPI uzilishini yoqish)- uzilishlarni ta'minlaydigan bit.

SPE (SPI yoqish)— SPI avtobusini ishga tushiradigan bir oz.

DORD (ma'lumotlar tartibi)— bitlarning yuborilish tartibini belgilovchi bit.Agar u 1 ga o‘rnatilgan bo‘lsa, u holda birinchi navbatda eng kam ahamiyatli bit yuboriladi, agar u 0 ga o‘rnatilgan bo‘lsa, eng muhim bit yuboriladi.

MSTR (Master/Slave tanlash)— qurilmani master yoki qul sifatida belgilaydigan bit. Ushbu bit 1 ga o'rnatilganda, qurilma master bo'ladi.

CPOL (soat polaritesi)— sinxronlash polaritesi, sinxronlash impulsining qaysi chetida kutish rejimi ishga tushishini aniqlaydi.

Agar bu bit 1 bo'lsa, u holda biz ko'tarilgan chekka bilan kutish rejimiga ega bo'lamiz va agar u 0 bo'lsa, u holda pasayish tomoni bilan.

CPHA (soat bosqichi)— soat fazasi uchun biroz mas'ul, ya'ni bit qaysi chekkada uzatiladi.

Keling, CPOL va CPHA o'rnatilishiga qarab ma'lumotlarni uzatish diagrammalarini ko'rib chiqaylik

Bu juda qiziq qaramlik. Ba'zida biz qurilmaning texnik xususiyatlarida, masalan, SPI 0:0 va SPI 1:1 rejimlarida ishlashi mumkinligini ko'ramiz va bu bitlarni o'rnatishga tegishli.

SPR1, SPR0 (SPI soat tezligini tanlash)- bu sinxronizatsiya chastotasi bo'luvchisining qiymati uchun mas'ul bo'lgan bitlar, ular bit bilan birga ishlaydi SPI2X holat reestrida joylashgan. Bu, shuningdek, boshqaruvchidir, chunki boshqaruv registridagi sakkiz bit barcha sozlamalar uchun etarli emas edi va holat registrida juda ko'p bepullar mavjud.

SPSR (SPI Status Register)- holat reestri

SPI2X (Double SPI Speed ​​​​bit)- boshqaruv registrining SPR1 va SPR0 bitlari bilan birgalikda ishlaydigan tezlikni ikki baravar oshiradigan bit.

Keling, chastotaning ushbu uch bitga bog'liqligini ko'rib chiqaylik

SPIF (SPI uzilish bayrog'i)— Interrupt belgisi. Biz bu bitni bittaga o'rnatilishini kutmoqdamiz. bayt olganimizda. Boshqa qurilmadagi bayt bizning buferimizda to'liq paydo bo'lishi bilanoq, bu bayroq o'rnatiladi. Bu bayroq faqat uzilishlarni faollashtiruvchi bit o'rnatilgan bo'lsa, shuningdek, global uzilishlar yoqilgan bo'lsa ishlaydi.

WCOL (to'qnashuv bayrog'ini yozish)— agar maʼlumotlarni uzatishda bir oz ziddiyat yuzaga kelsa, agar maʼlumotlarni uzatishda maʼlumotlar registriga yozishga urinilsa, ziddiyat yoki toʻqnashuv bayrogʻi oʻrnatiladi.

Xo'sh, endi aytishimiz mumkinki, biz SPI interfeysi bilan biroz tanish bo'ldik.

VIDEO TUTORIALNI tomosha qiling(rasm ustiga bosing)

Ko'rishlar soni: 6 294

10 Ohm dan 1 MOhm gacha bo'lgan ko'rsatkichlar bilan);

  • ulash simlari (masalan, bu yaxshi to'plam);
  • Arduino IDE ishlab chiqish muhitiga ega shaxsiy kompyuter.
  • 1 Serial tavsifi SPI interfeysi

    SPI - Seriyali periferik interfeys yoki "Serial periferik interfeys" ulanish uchun sinxron ma'lumotlarni uzatish protokoli hisoblanadi asosiy qurilma Bilan periferik qurilmalar (qul). Asosiy qurilma ko'pincha mikrokontrollerdir. Qurilmalar orasidagi aloqa to'rtta sim orqali amalga oshiriladi, shuning uchun SPI ba'zan "to'rt simli interfeys" deb ataladi. Bu shinalar:

    Ma'lumot uzatishning to'rtta rejimi mavjud ( SPI_MODE0, SPI_MODE1, SPI_MODE2, SPI_MODE3), soat impulslarining qutbliligi kombinatsiyasidan kelib chiqadi (biz YUQORI yoki PAST darajasida ishlaymiz), Soat polaritesi, CPOL, va soat pulslarining fazasi (soat pulsining ko'tarilishi yoki tushishi bo'yicha sinxronizatsiya), Soat bosqichi, CPHA.

    Rasm ushbu jadvalni tushuntiradi.

    SPI interfeysi qul qurilmalarni ulash uchun bir nechta variantlarni taqdim etadi: mustaqil Va kaskad. SPI shinasiga mustaqil ravishda ulanganda, asosiy qurilma har bir tobe qurilmaga alohida kirishadi. Kaskadli ulanish bilan qul qurilmalari kaskadda bo'lgani kabi birma-bir ishlaydi.


    SPI interfeysi orqali ishlash uchun qurilma ulanishi turlari: mustaqil va kaskad

    2 SPI interfeysini amalga oshirish Arduino oilaviy taxtalarida

    Arduino-da SPI interfeys avtobuslari ma'lum portlarda joylashgan. Har bir taxtada o'z pin tayinlash mavjud. Qulaylik uchun xulosalar takrorlanadi va alohida joylashtiriladi ICSP ulagichi(Sxemada ketma-ket dasturlashda, sxemaga kiritilgan qurilmani ketma-ket protokol yordamida dasturlash). E'tibor bering, ICSP ulagichida tobe tanlash pin - SS yo'q, chunki Arduino tarmog'ida asosiy qurilma sifatida qo'llanilishi taxmin qilinmoqda. Agar kerak bo'lsa, Arduino-ning istalgan raqamli pinini SS sifatida belgilashingiz mumkin.

    Rasmda Arduino UNO va Nano uchun pinlarning SPI avtobuslariga standart muvofiqligi ko'rsatilgan.


    3 Ish uchun kutubxona SPI interfeysi bilan

    Arduino uchun SPI protokolini amalga oshiradigan maxsus kutubxona yozilgan. U shunday bog'lanadi: dasturning boshida biz qo'shamiz #sPI.h kiradi.

    SPI protokolidan foydalanishni boshlash uchun siz sozlamalarni o'rnatishingiz va keyin protsedura yordamida protokolni ishga tushirishingiz kerak. SPI.beginTransaction(). 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'lumotlarni uzatish MSB dan (eng muhim bit) SPI_MODE0 rejimida amalga oshiriladi.

    Ishga tushirgandan so'ng, tegishli SS pinini holatga o'tkazish orqali tobe qurilmani tanlang PAST.

    Keyin buyruq bilan ma'lumotlarni tobe qurilmaga o'tkazamiz SPI.transfer().

    Transferdan so'ng biz SSni davlatga qaytaramiz YUQORI.


    Protokol bilan ishlash buyruq bilan yakunlanadi SPI.endTransaction().

    Agar boshqa qurilma turli xil sozlamalar yordamida ma'lumotlarni uzatishni boshlashga harakat qilsa, muammolarni oldini olish uchun SPI.beginTransaction() va SPI.endTransaction() ko'rsatmalari o'rtasidagi uzatish vaqtini minimallashtirish tavsiya etiladi.

    4 Shift registrini ulash Arduino uchun

    Keling, SPI interfeysining amaliy qo'llanilishini ko'rib chiqaylik. SPI shinasi orqali 8 bitli siljish registrini boshqarish orqali biz LEDlarni yoqamiz. Keling, Arduino-ga ulanamiz Shift registri 74HC595. Cheklovchi qarshilik orqali 8 ta registr chiqishining har biriga nominal qiymati 220 Ohm bo'lgan LEDni ulaymiz. Diagramma rasmda ko'rsatilgan.


    5 Shift registrini boshqarish uchun eskiz SPI interfeysi orqali

    Keling, shunday eskiz yozaylik.

    #o'z ichiga oladi const int pinSelect = 8; // tanlash pinini ro'yxatdan o'tkazish bekor o'rnatish() ( SPI.begin(); // SPI interfeysini ishga tushirish pinMode(pinSelect, OUTPUT); // digitalWrite(pinSelect, LOW); // tobe qurilmalarni tanlash (ro'yxatdan o'tish) SPI.transfer(0); // digitalWrite(pinSelect, HIGH) registrining mazmunini tozalang; // uzatishning oxiri Serial.begin(9600); } void loop() ( uchun (int i=0; i )

    Birinchidan, SPI kutubxonasini ulaymiz va SPI interfeysini ishga tushiramiz. Keling, 8 pinni SS tobe tanlash pin sifatida belgilaylik. Keling, siljish registrini unga "0" qiymatini yuborib, tozalaymiz. Seriyali portni ishga tushiring.

    Shift registridan foydalangan holda ma'lum bir LEDni yoqish uchun siz uning kiritilishiga 8 bitli raqamni qo'llashingiz kerak. Masalan, birinchi LED yonishi uchun biz ikkilik raqamni 00000001, ikkinchisiga - 00000010, uchinchisiga - 00000100 va hokazolarni beramiz. Bu ikkilik sonlar oʻnlik sanoq sistemasiga oʻtkazilganda quyidagi ketma-ketlikni hosil qiladi: 1, 2, 4, 8, 16, 32, 64, 128 va 0 dan 7 gacha boʻlgan ikkitaning darajalari.

    Shunga ko'ra, tsiklda loop() LEDlar soniga asoslanib, biz 0 dan 7 gacha qayta hisoblaymiz. Funktsiya pow (tayanch, daraja) 2 ni pastadir hisoblagichining kuchiga ko'taradi. Mikrokontrollerlar "ikki" turdagi raqamlar bilan unchalik aniq ishlamaydi, shuning uchun natijani butun songa aylantirish uchun yaxlitlash funktsiyasidan foydalanamiz. dumaloq(). Va natijada olingan raqamni smenali registrga o'tkazamiz. Aniqlik uchun ketma-ket port monitori ushbu operatsiya davomida olingan qiymatlarni ko'rsatadi: Qurilma razryadlar orqali "ishlaydi" - LEDlar to'lqin shaklida yonadi.

    6 "Yugurish to'lqini" LEDlardan

    LEDlar birma-bir yonadi va biz chiroqlarning ishlaydigan "to'lqinini" kuzatamiz. LEDlar SPI interfeysi orqali ulangan siljish registri yordamida boshqariladi. Natijada, 8 ta LEDni boshqarish uchun faqat 3 ta Arduino pinlari ishlatiladi. Agar biz LEDlarni to'g'ridan-to'g'ri Arduino raqamli portlariga ulagan bo'lsak, har bir LED uchun alohida portdan foydalanishimiz kerak bo'ladi.

    Biz Arduino-ning SPI avtobusi bilan ishlashning eng oddiy misolini o'rganib chiqdik. Biz alohida maqolada mustaqil va kaskadli ulanishlar bilan bir nechta smenali registrlarning ishlashini batafsil ko'rib chiqamiz.