Մենք ուսումնասիրում ենք SPI ինտերֆեյսը և հերթափոխի գրանցամատյանը միացնում ենք Arduino- ին, որին մուտք կգործենք ՝ օգտագործելով այս պրոտոկոլը ՝ LED- ները վերահսկելու համար:
Անհրաժեշտ է
- - 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 ավտոբուսին, վարպետը շփվում է յուրաքանչյուր ստրուկի հետ անհատապես: Կասկադով - ստրուկ սարքերը գործարկվում են հերթափոխով, կասկադում:
Քայլ 2
Arduino- ում SPI ավտոբուսները գտնվում են հատուկ նավահանգիստներում: Յուրաքանչյուր տախտակ ունի իր սեփական քորոցը: Հարմարության համար քորոցները կրկնօրինակվում են և տեղադրվում են առանձին ICSP (In Circuit Serial Programming) միակցիչի վրա: Խնդրում ենք նկատի ունենալ, որ քանի որ ICSP միակցիչի վրա SS չկա ստրուկի ընտրության քորոց ենթադրվում է, որ Arduino- ն կօգտագործվի որպես ցանցում տիրապետող: Բայց անհրաժեշտության դեպքում, դուք կարող եք նշանակել Arduino- ի ցանկացած թվային փին որպես SS:
Նկարը ցույց է տալիս Arduino UNO- ի և Nano- ի համար 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 () հրահանգների միջև, որպեսզի համընկնում չլինի, եթե մեկ այլ սարք փորձում է տվյալների փոխանցումը նախնական կարգավորել ՝ օգտագործելով տարբեր պարամետրեր:
Քայլ 4
Եկեք քննարկենք SPI ինտերֆեյսի գործնական կիրառումը: Մենք կվառենք LED- ները ՝ SPI ավտոբուսի միջոցով վերահսկելով 8-բիթանոց հերթափոխի ռեգիստրը: Եկեք միացնենք 74HC595 հերթափոխի գրանցամատյանը Arduino- ին: Մենք 8 ելքից յուրաքանչյուրին միանում ենք LED- ի միջոցով (սահմանափակող դիմադրության միջոցով): Դիագրամը ներկայացված է նկարում:
Քայլ 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- ները լուսավորվում են ալիքի մեջ:
Քայլ 6
LED- ները իրենց հերթին վառվում են, և մենք դիտում ենք լույսերի շրջիկ «ալիք»: LED- ները վերահսկվում են հերթափոխի ռեգիստրի միջոցով, որին մենք միացանք SPI ինտերֆեյսի միջոցով: Արդյունքում, 8 LED- ներ քշելու համար օգտագործվում է ընդամենը 3 Arduino քորոց:
Մենք ուսումնասիրել ենք այն ամենապարզ օրինակը, թե ինչպես է Arduino- ն աշխատում SPI ավտոբուսի հետ: Մենք ավելի մանրամասն կքննարկենք հերթափոխի գրանցումների միացումը առանձին հոդվածում: