Mēs pētām SPI saskarni un savienojam maiņas reģistru ar Arduino, kuram piekļūsim, izmantojot šo protokolu, lai kontrolētu gaismas diodes.
Nepieciešams
- - Arduino;
- - maiņu reģistrs 74HC595;
- - 8 gaismas diodes;
- - 8 rezistori ar 220 Ohm.
Instrukcijas
1. solis
SPI - seriālā perifērā saskarne vai "seriālā perifērā saskarne" ir sinhronais datu pārsūtīšanas protokols galvenās ierīces saskarnei ar perifērām ierīcēm (vergiem). Kapteinis bieži ir mikrokontrolleris. Saziņa starp ierīcēm tiek veikta pa četriem vadiem, tāpēc SPI dažreiz sauc par "četru vadu saskarni". Šīs riepas ir:
MOSI (Master Out Slave In) - datu pārraides līnija no kapteiņa līdz vergu ierīcēm;
MISO (Master In Slave Out) - pārraides līnija no verga līdz galvenajam;
SCLK (Serial Clock) - kapteiņa ģenerētie sinhronizācijas pulksteņa impulsi;
SS (Slave Select) - vergu ierīču izvēles līnija; atrodoties rindā "0", vergs "saprot", ka tam piekļūst.
Ir četri datu pārsūtīšanas režīmi (SPI_MODE0, SPI_MODE1, SPI_MODE2, SPI_MODE3) pulksteņa impulsa polaritātes (mēs strādājam HIGH vai LOW līmenī), pulksteņa polaritātes, CPOL un pulksteņa impulsu fāzes (sinhronizācijas) dēļ. pulksteņa impulsa augšupejošā vai krītošā malā), Clock Phase, CPHA.
Attēlā redzamas divas ierīču savienošanas iespējas, izmantojot SPI protokolu: neatkarīgas un kaskādes. Kad tas ir neatkarīgi savienots ar SPI kopni, kapteinis sazinās ar katru vergu atsevišķi. Ar kaskādi - vergu ierīces tiek iedarbinātas pārmaiņus, kaskādē.
2. solis
Arduino SPI autobusi atrodas noteiktās ostās. Katram dēlim ir savs piespraude. Ērtības labad tapas tiek dublētas un novietotas uz atsevišķa ICSP (In Circuit Serial Programming) savienotāja. Lūdzu, ņemiet vērā, ka ICSP savienotājā nav verga atlases tapas - SS tiek pieņemts, ka Arduino tiks izmantots par galveno tīklu tīklā. Bet, ja nepieciešams, varat piešķirt jebkuru Arduino digitālo tapu kā SS.
Attēlā parādīts standarta tapu piešķiršana SPD autobusiem Arduino UNO un Nano.
3. solis
Arduino ir uzrakstīta īpaša bibliotēka, kas ievieš SPI protokolu. Tas ir savienots šādi: programmas sākumā pievienojiet #include SPI.h
Lai sāktu strādāt ar SPI protokolu, jums jāiestata iestatījumi un pēc tam inicializējiet protokolu, izmantojot procedūru SPI.beginTransaction (). To var izdarīt ar vienu instrukciju: SPI.beginTransaction (SPISettings (14000000, MSBFIRST, SPI_MODE0)).
Tas nozīmē, ka mēs inicializējam SPI protokolu ar frekvenci 14 MHz, datu pārsūtīšana notiek, sākot no MSB (vissvarīgākais bits) režīmā "0".
Pēc inicializācijas mēs izvēlamies vergu ierīci, ievietojot atbilstošo SS tapu LOW stāvoklī.
Tad mēs ar komandu SPI.transfer () pārsūtām datus uz vergu ierīci.
Pēc pārsūtīšanas mēs atgriežam SS stāvoklī AUGSTS.
Darbs ar protokolu beidzas ar komandu SPI.endTransaction (). Ir vēlams samazināt pārsūtīšanas izpildes laiku starp instrukcijām SPI.beginTransaction () un SPI.endTransaction (), lai nebūtu pārklāšanās, ja cita ierīce mēģina inicializēt datu pārsūtīšanu, izmantojot dažādus iestatījumus.
4. solis
Apsvērsim SPI saskarnes praktisko pielietojumu. Mēs iedegsim gaismas diodes, kontrolējot 8 bitu maiņas reģistru, izmantojot SPI kopni. Savienosim 74HC595 maiņu reģistru ar Arduino. Mēs savienojamies ar katru no 8 izejām, izmantojot gaismas diodi (caur ierobežojošo rezistoru). Shēma parādīta attēlā.
5. solis
Uzrakstīsim šādu skici.
Vispirms pievienosim SPI bibliotēku un inicializēsim SPI saskarni. Definēsim 8. tapu kā vergu atlases tapu. Notīrīsim maiņu reģistru, nosūtot tam vērtību "0". Mēs inicializējam seriālo portu.
Lai apgaismotu konkrētu LED, izmantojot maiņu reģistru, tā ieejai jāpielieto 8 bitu numurs. Piemēram, lai iedegtos pirmā gaismas diode, mēs barojam bināro skaitli 00000001, otrajam - 00000010, trešajam - 00000100 utt. Šie binārie skaitļi aiz komata veido šādu secību: 1, 2, 4, 8, 16, 32, 64, 128, un tie ir divu spēki no 0 līdz 7.
Attiecīgi cilpā () pēc gaismas diožu skaita mēs pārrēķinām no 0 līdz 7. Pow (bāzes, grāda) funkcija paaugstina 2 līdz cikla skaitītāja jaudai. Mikrokontrolleri nedarbojas ļoti precīzi ar "dubultā" tipa skaitļiem, tāpēc, lai rezultātu pārvērstu par veselu skaitli, mēs izmantojam round () funkciju. Un mēs pārsūtām iegūto numuru uz maiņu reģistru. Skaidrības labad sērijveida porta monitorā tiek rādītas vērtības, kas iegūtas šīs operācijas laikā: viens iet cauri cipariem - gaismas diodes iedegas vilnī.
6. solis
Gaismas diodes iedegas pēc kārtas, un mēs novērojam ceļojošo gaismas "vilni". Gaismas diodes tiek kontrolētas, izmantojot maiņu reģistru, kuram mēs pievienojāmies caur SPI interfeisu. Tā rezultātā, lai vadītu 8 gaismas diodes, tiek izmantoti tikai 3 Arduino tapas.
Mēs esam izpētījuši vienkāršāko piemēru tam, kā Arduino darbojas ar SPI autobusu. Mēs detalizētāk apsvērsim maiņu reģistru savienojumu atsevišķā rakstā.