Tanulmányozzuk az SPI interfészt, és egy shift regisztert csatlakoztatunk az Arduino-hoz, amelyhez ezen a protokollon keresztül fogunk hozzáférni a LED-ek vezérléséhez.
Szükséges
- - Arduino;
- - műszakregiszter 74HC595;
- - 8 LED;
- - 8 220 Ohmos ellenállás.
Utasítás
1. lépés
Az SPI - soros perifériás interfész vagy a "soros perifériás interfész" egy szinkron adatátviteli protokoll a mestereszköz és a perifériás eszközök (slave) összekapcsolására. A mester gyakran mikrovezérlő. Az eszközök közötti kommunikációt négy vezetéken keresztül folytatják, ezért az SPI-t néha "négyvezetékes interfésznek" nevezik. Ezek a gumik:
MOSI (Master Out Slave In) - adatátviteli vonal a mastertől a slave eszközökig;
MISO (Master In Slave Out) - távvezeték a rabszolgától a masterig;
SCLK (soros óra) - a master által generált szinkronizációs óra impulzusok;
SS (Slave Select) - slave eszköz választó vonal; amikor a "0" vonalon a rabszolga "megérti", hogy hozzá férnek.
Az adatátvitelnek négy módja van (SPI_MODE0, SPI_MODE1, SPI_MODE2, SPI_MODE3), az óraimpulzus polaritásának (HIGH vagy LOW szinten dolgozunk), az Órapolaritás, a CPOL és az óraimpulzusok fázisának (szinkronizálás) miatt az órajel impulzusának emelkedő vagy csökkenő peremén), Órafázis, CPHA.
Az ábra két lehetőséget mutat be az eszközök csatlakoztatásához az SPI protokoll használatával: független és lépcsőzetes. Ha önállóan csatlakozik az SPI buszhoz, a master külön-külön kommunikál minden egyes slave-mel. Kaszkáddal - a szolga eszközök váltakozva, kaszkádban működnek.
2. lépés
Az Arduinóban az SPI buszok meghatározott kikötőkön vannak. Minden táblának megvan a saját pin-hozzárendelése. A kényelem érdekében a csapokat megkettőzik, és külön ICSP (In Circuit Serial Programming) csatlakozóra helyezik. Felhívjuk figyelmét, hogy az ICSP csatlakozón - SS - nincs slave választó tű feltételezzük, hogy az Arduino-t fogják használni a hálózat mestereként. De ha szükséges, az Arduino bármely digitális tűjét SS-ként rendelheti hozzá.
Az ábra mutatja a csapok szabványos hozzárendelését az SPI buszokhoz az Arduino UNO és a Nano számára.
3. lépés
Az Arduino számára egy speciális könyvtárat írtak, amely megvalósítja az SPI protokollt. Így kapcsolódik: a program elején adja hozzá az #include SPI.h fájlt
Az SPI protokoll használatának megkezdéséhez meg kell adnia a beállításokat, majd az SPI.beginTransaction () eljárással inicializálnia kell a protokollt. Ezt egy utasítással teheti meg: SPI.beginTransaction (SPISettings (14000000, MSBFIRST, SPI_MODE0)).
Ez azt jelenti, hogy az SPI protokollt 14 MHz-es frekvencián inicializáljuk, az adatátvitel az MSB-től indul (a legjelentősebb bit), "0" módban.
Az inicializálás után kiválasztjuk a szolga eszközt úgy, hogy a megfelelő SS tűt LOW állapotba helyezzük.
Ezután az SPI.transfer () paranccsal átvisszük az adatokat a szolga eszközre.
Az átvitel után visszatérünk az SS-hez a HIGH állapotba.
A protokollal végzett munka az SPI.endTransaction () paranccsal fejeződik be. Kívánatos minimalizálni az SPI.beginTransaction () és az SPI.endTransaction () utasítások közötti átvitel végrehajtási idejét, hogy ne legyen átfedés, ha egy másik eszköz különböző beállítások segítségével próbálja meg inicializálni az adatátvitelt.
4. lépés
Vizsgáljuk meg az SPI felület gyakorlati alkalmazását. Megvilágítjuk a LED-eket úgy, hogy az SPI buszon keresztül vezéreljük a 8 bites shift regisztert. Csatlakoztassuk a 74HC595 váltóregisztert az Arduinóhoz. A 8 kimenet mindegyikéhez LED-en keresztül csatlakozunk (korlátozó ellenálláson keresztül). A diagram az ábrán látható.
5. lépés
Írjunk egy ilyen vázlatot.
Először csatlakoztassuk az SPI könyvtárat, és inicializáljuk az SPI felületet. Határozzuk meg a 8. csapot a szolga kiválasztó tüskeként. Tisztítsuk meg a shift regisztert úgy, hogy elküldjük neki a "0" értéket. Inicializáljuk a soros portot.
Egy adott LED megvilágításához egy shift regiszter segítségével 8 bites számot kell alkalmaznia a bemenetére. Például az első LED kigyulladásához a 00000001 bináris számot tápláljuk, a másodiké 00000010, a harmadiké 00000100 stb. Ezek a bináris számok decimális jelöléssel a következő sorrendet alkotják: 1, 2, 4, 8, 16, 32, 64, 128 és kettő hatványai 0 és 7 között.
Ennek megfelelően a ciklusban () a LED-ek száma alapján 0-ról 7-re számolunk. A pow (alap, fok) függvény 2-t emel a ciklusszámláló erejéig. A mikrovezérlők nem nagyon működnek pontosan a "kettős" típusú számokkal, ezért az eredmény egész számra konvertálásához a round () függvényt használjuk. És az így kapott számot áttesszük a műszak regiszterbe. Az érthetőség kedvéért a soros portmonitor megjeleníti az e művelet során kapott értékeket: az egyik végigfut a számjegyeken - a LED-ek hullámként világítanak.
6. lépés
A LED-ek felváltva világítanak, és megfigyeljük a fények mozgó "hullámát". A LED-eket egy shift regiszter segítségével lehet vezérelni, amelyhez az SPI interfészen keresztül kapcsolódtunk. Ennek eredményeként csak 3 Arduino csapot használnak 8 LED meghajtására.
Megvizsgáltuk a legegyszerűbb példát arra, hogyan működik egy Arduino egy SPI busszal. A műszakregiszterek összekapcsolását külön cikkben vizsgáljuk meg részletesebben.