SPI և Arduino ինտերֆեյս

Բովանդակություն:

SPI և Arduino ինտերֆեյս
SPI և Arduino ինտերֆեյս

Video: SPI և Arduino ինտերֆեյս

Video: SPI և Arduino ինտերֆեյս
Video: Видеоуроки по Arduino. Интерфейсы SPI (8-я серия, ч1) 2024, Մայիս
Anonim

Մենք ուսումնասիրում ենք SPI ինտերֆեյսը և հերթափոխի գրանցամատյանը միացնում ենք Arduino- ին, որին մուտք կգործենք ՝ օգտագործելով այս պրոտոկոլը ՝ LED- ները վերահսկելու համար:

SPI ինտերֆեյս
SPI ինտերֆեյս

Անհրաժեշտ է

  • - Arduino;
  • - հերթափոխի գրանցամատյան 74HC595;
  • - 8 LED;
  • - 220 Օմ-ի 8 դիմադրություն:

Հրահանգներ

Քայլ 1

SPI - Սերիական ծայրամասային միջերես կամ «Սերիական ծայրամասային միջերես» տվյալների փոխանցման սինքրոն արձանագրություն է `հիմնական սարքը ծայրամասային սարքերով (ստրուկ) փոխանակելու համար: Վարպետը հաճախ միկրոհսկիչ է: Սարքերի միջեւ կապն իրականացվում է չորս լարերի միջոցով, այդ իսկ պատճառով SPI- ն երբեմն անվանում են «չորս լարային միջերես»: Այս անվադողերն են.

MOSI (Master Out Slave In) - տվյալների փոխանցման գիծ վարպետից ստրուկ սարքեր;

MISO (Master In Slave Out) - փոխանցման գիծ ստրուկից տիրոջը;

SCLK (սերիական ժամացույց) - վարպետի կողմից առաջացած համաժամացման ժամացույցի իմպուլսներ;

SS (Ստրուկի ընտրություն) - ստրուկ սարքի ընտրության գիծ; երբ «0» տողում ստրուկը «հասկանում է», որ մուտք է գործում:

Տվյալների փոխանցման չորս եղանակ կա (SPI_MODE0, SPI_MODE1, SPI_MODE2, SPI_MODE3), ժամացույցի զարկերակի բևեռականության համադրության շնորհիվ (աշխատում ենք բարձր կամ ցածր մակարդակում), ժամացույցի բևեռականություն, CPOL և ժամային զարկերակների փուլ (համաժամացում) ժամացույցի զարկերակի բարձրացման կամ ընկնելու եզրին), ockամացույցի փուլ, CPHA:

Նկարում ներկայացված են SPI պրոտոկոլը օգտագործող սարքերը միացնելու երկու տարբերակ ՝ անկախ և կասկադային: Երբ ինքնուրույն միանում է SPI ավտոբուսին, վարպետը շփվում է յուրաքանչյուր ստրուկի հետ անհատապես: Կասկադով - ստրուկ սարքերը գործարկվում են հերթափոխով, կասկադում:

SPI միացումների տեսակները
SPI միացումների տեսակները

Քայլ 2

Arduino- ում SPI ավտոբուսները գտնվում են հատուկ նավահանգիստներում: Յուրաքանչյուր տախտակ ունի իր սեփական քորոցը: Հարմարության համար քորոցները կրկնօրինակվում են և տեղադրվում են առանձին ICSP (In Circuit Serial Programming) միակցիչի վրա: Խնդրում ենք նկատի ունենալ, որ քանի որ ICSP միակցիչի վրա SS չկա ստրուկի ընտրության քորոց ենթադրվում է, որ Arduino- ն կօգտագործվի որպես ցանցում տիրապետող: Բայց անհրաժեշտության դեպքում, դուք կարող եք նշանակել Arduino- ի ցանկացած թվային փին որպես SS:

Նկարը ցույց է տալիս Arduino UNO- ի և Nano- ի համար SPI ավտոբուսների քորոցների ստանդարտ նշանակումը:

Արդուինոյում SPI իրականացում
Արդուինոյում SPI իրականացում

Քայլ 3

Արդուինոյի համար գրվել է հատուկ գրադարան, որն իրականացնում է SPI պրոտոկոլը: Այն միացված է այսպես. Beginningրագրի սկզբում ավելացրեք #include SPI.h

SPI արձանագրության հետ աշխատանքը սկսելու համար հարկավոր է սահմանել պարամետրերը, այնուհետև նախաստորագրել արձանագրությունը ՝ օգտագործելով SPI.beginTransaction () ընթացակարգը: Դուք կարող եք դա անել մեկ ցուցումով ՝ SPI.beginTransaction (SPISettings (14000000, MSBFIRST, SPI_MODE0)):

Սա նշանակում է, որ մենք նախաստորագրում ենք SPI պրոտոկոլը 14 ՄՀց հաճախականությամբ, տվյալների փոխանցումը շարունակվում է ՝ սկսած MSB- ից (ամենանշանակալից բիտը), «0» ռեժիմով:

Նախնականացումից հետո մենք ընտրում ենք ստրուկ սարքը `համապատասխան SS քորոցը դնելով OWԱ stateՐ վիճակում:

Դրանից հետո մենք տվյալները փոխանցում ենք ստրուկ սարքին SPI.transfer () հրամանով:

Փոխանցումից հետո մենք SS- ն վերադարձնում ենք ԲԱՐՁՐ նահանգ:

Արձանագրության հետ աշխատանքը ավարտվում է SPI.endTransaction () հրամանով: Iանկալի է նվազագույնի հասցնել փոխանցման կատարման ժամանակը SPI.beginTransaction () և SPI.endTransaction () հրահանգների միջև, որպեսզի համընկնում չլինի, եթե մեկ այլ սարք փորձում է տվյալների փոխանցումը նախնական կարգավորել ՝ օգտագործելով տարբեր պարամետրեր:

SPI փոխանցում
SPI փոխանցում

Քայլ 4

Եկեք քննարկենք SPI ինտերֆեյսի գործնական կիրառումը: Մենք կվառենք LED- ները ՝ SPI ավտոբուսի միջոցով վերահսկելով 8-բիթանոց հերթափոխի ռեգիստրը: Եկեք միացնենք 74HC595 հերթափոխի գրանցամատյանը Arduino- ին: Մենք 8 ելքից յուրաքանչյուրին միանում ենք LED- ի միջոցով (սահմանափակող դիմադրության միջոցով): Դիագրամը ներկայացված է նկարում:

74HC595 հերթափոխի գրանցամատյանը Arduino- ին միացնող
74HC595 հերթափոխի գրանցամատյանը Arduino- ին միացնող

Քայլ 5

Եկեք գրենք այսպիսի ուրվագիծ:

Նախ եկեք միացնենք SPI գրադարանը և նախաձեռնարկենք SPI ինտերֆեյսը: Եկեք սահմանենք քորոց 8-ը որպես ստրուկների ընտրության քորոց: Եկեք մաքրենք հերթափոխի գրանցամատյանը ՝ դրան ուղարկելով «0» արժեքը: Մենք նախնականացնում ենք սերիական պորտը:

Հատուկ լուսադիոդ լուսավորելու համար, օգտագործելով հերթափոխի ռեգիստր, դրա մուտքին պետք է 8-բիթանոց համար կիրառեք: Օրինակ, որպեսզի առաջին LED- ը վառվի, մենք կերակրում ենք երկուական համարը 00000001, երկրորդի համար `00000010, երրորդի համար` 00000100 և այլն: Տասնորդական նշագրման այս երկուական թվերը կազմում են հետևյալ հաջորդականությունը. 1, 2, 4, 8, 16, 32, 64, 128 և երկուսի ուժերն են ՝ 0-ից 7:

Ըստ այդմ, հանգույցում () LED- ների քանակով մենք վերահաշվարկում ենք 0-ից 7-ը: Pow (հիմք, աստիճան) գործառույթը 2-ը բարձրացնում է ցիկլի հաշվիչի հզորության: Միկրոհսկիչները շատ ճշգրիտ չեն աշխատում «կրկնակի» տիպի թվերի հետ, ուստի արդյունքը ամբողջ թվին վերածելու համար օգտագործում ենք կլոր () գործառույթը: Եվ արդյունքում ստացված թիվը փոխանցում ենք հերթափոխի մատյանին: Հստակության համար սերիական պորտի մոնիտորը ցուցադրում է այս գործողության ընթացքում ստացված արժեքները. Մեկը անցնում է թվանշանների միջով. LED- ները լուսավորվում են ալիքի մեջ:

SPI ավտոբուսի միջոցով հերթափոխի գրանցումը վերահսկելու ուրվագիծ
SPI ավտոբուսի միջոցով հերթափոխի գրանցումը վերահսկելու ուրվագիծ

Քայլ 6

LED- ները իրենց հերթին վառվում են, և մենք դիտում ենք լույսերի շրջիկ «ալիք»: LED- ները վերահսկվում են հերթափոխի ռեգիստրի միջոցով, որին մենք միացանք SPI ինտերֆեյսի միջոցով: Արդյունքում, 8 LED- ներ քշելու համար օգտագործվում է ընդամենը 3 Arduino քորոց:

Մենք ուսումնասիրել ենք այն ամենապարզ օրինակը, թե ինչպես է Arduino- ն աշխատում SPI ավտոբուսի հետ: Մենք ավելի մանրամասն կքննարկենք հերթափոխի գրանցումների միացումը առանձին հոդվածում:

Խորհուրդ ենք տալիս: