Mes studijuojame SPI sąsają ir prijungiame poslinkių registrą prie „Arduino“, prie kurio prisijungsime naudodami šį protokolą šviesos diodams valdyti.
Būtinas
- - Arduino;
- - pamainų registras 74HC595;
- - 8 šviesos diodai;
- - 8 220 omų rezistoriai.
Nurodymai
1 žingsnis
SPI - nuoseklioji periferinė sąsaja arba „nuoseklioji periferinė sąsaja“yra sinchroninis duomenų perdavimo protokolas, skirtas pagrindiniam įrenginiui susieti su periferiniais įrenginiais (vergais). Meistras dažnai yra mikrovaldiklis. Ryšys tarp prietaisų vykdomas per keturis laidus, todėl SPI kartais vadinama „keturių laidų sąsaja“. Šios padangos yra:
MOSI (Master Out Slave In) - duomenų perdavimo linija nuo pagrindinio iki vergo įrenginių;
MISO (Master In Slave Out) - perdavimo linija nuo vergo iki šeimininko;
SCLK (nuoseklusis laikrodis) - pagrindinio kompiuterio generuojami sinchronizavimo laikrodžio impulsai;
SS (Slave Select) - vergo įrenginio pasirinkimo linija; kai „0“eilutėje vergas „supranta“, kad prie jo prieinama.
Yra keturi duomenų perdavimo būdai (SPI_MODE0, SPI_MODE1, SPI_MODE2, SPI_MODE3) dėl laikrodžio impulso poliškumo (mes dirbame HIGH arba LOW lygyje), laikrodžio poliškumo, CPOL ir laikrodžio impulsų fazės (sinchronizavimas) derinio. laikrodžio pulso kylančiame ar krintančiame krašte), Clock Phase, CPHA.
Paveikslėlyje parodytos dvi prietaisų prijungimo naudojant SPI protokolą galimybės: nepriklausomos ir pakopinės. Nepriklausomai prisijungęs prie SPI magistralės, kapitonas bendrauja su kiekvienu vergu atskirai. Naudojant kaskadą - vergų įrenginiai įjungiami pakaitomis, kaskadoje.
2 žingsnis
„Arduino“mieste SPI autobusai važiuoja konkrečiuose uostuose. Kiekviena lenta turi savo kaiščių priskyrimą. Kad būtų patogiau, kaiščiai yra dubliuojami ir dedami į atskirą ICSP (In Circuit Serial Programming) jungtį. Atkreipkite dėmesį, kad ICSP jungtyje nėra SSL vergo pasirinkimo kaiščio - SS daroma prielaida, kad „Arduino“bus naudojamas kaip pagrindinis tinklo savininkas. Bet jei reikia, galite priskirti bet kurį „Arduino“skaitmeninį kaištį kaip SS.
Paveikslėlyje parodytas standartinis kaiščių priskyrimas „Arduino UNO“ir „Nano“SPI autobusams.
3 žingsnis
„Arduino“parašyta speciali biblioteka, įgyvendinanti SPI protokolą. Jis sujungtas taip: programos pradžioje pridėkite #include SPI.h
Norėdami pradėti dirbti su SPI protokolu, turite nustatyti parametrus ir inicijuoti protokolą naudodami procedūrą SPI.beginTransaction (). Tai galite padaryti atlikdami vieną instrukciją: SPI.beginTransaction (SPISettings (14000000, MSBFIRST, SPI_MODE0)).
Tai reiškia, kad mes inicijuojame SPI protokolą 14 MHz dažniu. Duomenų perdavimas eina, pradedant nuo MSB (reikšmingiausias bitas), „0“režimu.
Po inicijavimo mes pasirenkame vergo įrenginį, įvesdami atitinkamą SS kaištį į LOW būseną.
Tada mes perduodame duomenis į vergo įrenginį naudodami komandą SPI.transfer ().
Po perdavimo mes grąžiname SS į AUKŠTĄ būseną.
Darbas su protokolu baigiasi komanda SPI.endTransaction (). Pageidautina sumažinti perdavimo tarp SPI.beginTransaction () ir SPI.endTransaction () instrukcijų vykdymo laiką, kad nebūtų persidengimo, jei kitas įrenginys bando inicijuoti duomenų perdavimą naudodamas skirtingus nustatymus.
4 žingsnis
Apsvarstykime praktinį SPI sąsajos pritaikymą. Šviesos diodus įžiebsime valdydami 8 bitų poslinkio registrą per SPI magistralę. Prijunkime 74HC595 pamainų registrą prie „Arduino“. Mes prisijungiame prie kiekvieno iš 8 išėjimų per šviesos diodą (per ribojantį rezistorių). Diagrama parodyta paveikslėlyje.
5 žingsnis
Parašykime tokį eskizą.
Pirmiausia prijunkime SPI biblioteką ir inicializuokime SPI sąsają. Apibrėžkime 8 kaištį kaip vergo pasirinkimo kaištį. Išvalykime pamainų registrą, nusiųsdami jam vertę „0“. Inicializuojame nuoseklųjį prievadą.
Norėdami apšviesti konkretų šviesos diodą naudodami poslinkių registrą, jo įėjimui turite pritaikyti 8 bitų skaičių. Pavyzdžiui, kad užsidegtų pirmasis šviesos diodas, mes tiekiame dvejetainį skaičių 00000001, antrajam - 00000010, trečiam - 00000100 ir kt. Šie dvejetainiai skaičiai dešimtainiais ženklais sudaro tokią seką: 1, 2, 4, 8, 16, 32, 64, 128 ir yra dviejų galios nuo 0 iki 7.
Atitinkamai, cikle () pagal šviesos diodų skaičių, mes perskaičiuojame nuo 0 iki 7. Pow (bazės, laipsnio) funkcija pakelia 2 iki ciklo skaitiklio galios. Mikrovaldikliai neveikia labai tiksliai su „dvigubo“tipo skaičiais, todėl norėdami konvertuoti rezultatą į sveiką skaičių, naudojame „round“() funkciją. Ir gautą skaičių perkeliame į pamainų registrą. Aiškumo dėlei nuoseklaus prievado monitoriuje rodomos šios operacijos metu gautos vertės: vienas eina per skaitmenis - šviesos diodai užsidega banga.
6 žingsnis
Šviesos diodai savo ruožtu užsidega ir mes stebime keliaujančią šviesų „bangą“. Šviesos diodai valdomi naudojant poslinkių registrą, prie kurio prisijungėme per SPI sąsają. Todėl 8 šviesos diodams valdyti naudojami tik 3 „Arduino“kaiščiai.
Mes ištyrėme paprasčiausią pavyzdį, kaip „Arduino“veikia su SPI magistrale. Išsamiau mes apsvarstysime pamainų registrų sujungimą atskirame straipsnyje.