Preučujemo vmesnik SPI in na Arduino povežemo premični register, do katerega bomo dostopali s pomočjo tega protokola za nadzor LED.
Potrebno
- - Arduino;
- - prestavni register 74HC595;
- - 8 LED;
- - 8 uporov 220 Ohm.
Navodila
Korak 1
SPI - serijski periferni vmesnik ali "serijski periferni vmesnik" je sinhroni protokol za prenos podatkov za povezovanje glavne naprave z zunanjimi napravami (pomožni). Mojster je pogosto mikrokrmilnik. Komunikacija med napravami poteka prek štirih žic, zato SPI včasih imenujemo tudi "štirisilenski vmesnik". Te pnevmatike so:
MOSI (Master Out Slave In) - prenos podatkov od glavne enote do pomožne naprave;
MISO (Master In Slave Out) - prenosni vod od podrejenega do glavnega;
SCLK (serijska ura) - sinhronizacijski impulzi ure, ki jih generira glavni;
SS (Slave Select) - vrstica za izbiro podrejene naprave; ko je v vrstici "0", pomožni "razume", da je do nje dostopen.
Obstajajo štirje načini prenosa podatkov (SPI_MODE0, SPI_MODE1, SPI_MODE2, SPI_MODE3), in sicer zaradi kombinacije polarnosti urnega impulza (delamo na VISOKI ali NIZKI ravni), Polarnosti ure, CPOL in faze taktnih impulzov (sinhronizacija na naraščajočem ali padajočem robu urnega impulza), Clock Phase, CPHA.
Slika prikazuje dve možnosti za povezovanje naprav s protokolom SPI: neodvisno in kaskadno. Ko je poveljnik neodvisno povezan z vodilom SPI, komunicira z vsakim pomožnim sistemom posebej. Pri kaskadno - podrejeni napravi se sprožijo izmenično, kaskadno.
2. korak
V Arduinu so vodila SPI v določenih vratih. Vsaka plošča ima svojo dodelitev pinov. Za udobje so nožice podvojene in nameščene na ločenem priključku ICSP (In Circuit Serial Programming). Upoštevajte, da na priključku ICSP - SS ni nobenega izbranega zatiča, saj predpostavlja se, da bo Arduino uporabljen kot glavni v omrežju. Če je potrebno, lahko kateri koli digitalni pin Arduina dodelite kot SS.
Slika prikazuje standardno dodelitev zatičev na vodila SPI za Arduino UNO in Nano.
3. korak
Za Arduino je bila napisana posebna knjižnica, ki izvaja protokol SPI. Povezan je takole: na začetku programa dodajte #include SPI.h
Če želite začeti delo s protokolom SPI, morate nastaviti nastavitve in nato inicializirati protokol s postopkom SPI.beginTransaction (). To lahko storite z enim navodilom: SPI.beginTransaction (SPISettings (14000000, MSBFIRST, SPI_MODE0)).
To pomeni, da protokol SPI inicializiramo s frekvenco 14 MHz, prenos podatkov poteka, začenši z MSB (najpomembnejši bit), v načinu "0".
Po inicializaciji izberemo podrejeno napravo, tako da ustrezen SS-pin vstavimo v LOW stanje.
Nato podatke prenesemo v pomožno napravo z ukazom SPI.transfer ().
Po prenosu vrnemo SS v HIGH stanje.
Delo s protokolom se konča z ukazom SPI.endTransaction (). Zaželeno je čim bolj zmanjšati čas izvajanja prenosa med navodiloma SPI.beginTransaction () in SPI.endTransaction (), da ne bo prekrivanja, če druga naprava poskuša inicializirati prenos podatkov z drugačnimi nastavitvami.
4. korak
Razmislimo o praktični uporabi vmesnika SPI. Lučke bomo prižgali z upravljanjem 8-bitnega prestavnega registra prek vodila SPI. Priključimo pomični register 74HC595 na Arduino. Na vsakega od 8 izhodov se povežemo prek LED (preko omejevalnega upora). Diagram je prikazan na sliki.
5. korak
Napišimo takšno skico.
Najprej povežemo knjižnico SPI in inicializiramo vmesnik SPI. Določimo pin 8 kot podrejeni pin za izbiro. Počistimo register premikov, tako da mu pošljemo vrednost "0". Inicializiramo serijska vrata.
Če želite osvetliti določeno LED s pomočjo prestavnega registra, morate na njen vhod uporabiti 8-bitno številko. Na primer, da se prižge prva LED, vnesemo binarno številko 00000001, za drugo - 00000010, za tretjo - 00000100 itd. Ta binarna števila v decimalnem zapisu tvorijo naslednje zaporedje: 1, 2, 4, 8, 16, 32, 64, 128 in so moči dveh od 0 do 7.
V skladu s tem v zanki () s številom LED pretvorimo od 0 do 7. Funkcija pow (osnova, stopinja) dvigne 2 na moč števca ciklov. Mikrokrmilniki s številkami tipa "dvojno" ne delujejo zelo natančno, zato za pretvorbo rezultata v celo število uporabimo funkcijo round (). In dobljeno številko prenesemo v register premikov. Zaradi jasnosti monitor serijskih vrat prikazuje vrednosti, ki jih dobimo med to operacijo: ena teče skozi številke - LED-diode zasvetijo v valu.
6. korak
LED diode zasvetijo po vrsti in opazujemo potujoči "val" luči. LED-diode nadzorujemo s pomočjo pomičnega registra, na katerega smo se povezali prek vmesnika SPI. Posledično se za pogon 8 LED uporabljajo samo 3 zatiči Arduino.
Preučili smo najpreprostejši primer, kako Arduino deluje z vodilom SPI. Povezavo registrov premikov bomo podrobneje obravnavali v ločenem članku.