- Mi az SPI?
- Az SPI működése
- SPI csapok az Arduino UNO-ban
- Az SPI használata Arduinóban
- Az Arduino SPI kommunikációhoz szükséges elemek
- Arduino SPI kommunikációs áramkör diagram
- Az Arduino programozása az SPI kommunikációhoz:
- Arduino SPI Master programozási magyarázat
- Arduino SPI Slave programozási magyarázat
- Hogyan működik az SPI az Arduino-n? - Teszteljük!
A mikrokontroller sokféle protokollt használ a különböző érzékelőkkel és modulokkal való kommunikációhoz. Sokféle kommunikációs protokoll létezik a vezeték nélküli és vezetékes kommunikációhoz, és a leggyakrabban használt kommunikációs technika a soros kommunikáció. A soros kommunikáció az adatküldés folyamata, egyenként, bitenként, egymás után, kommunikációs csatornán vagy buszon keresztül. Sokféle soros kommunikáció létezik, például UART, CAN, USB, I2C és SPI kommunikáció.
Ebben az oktatóanyagban megismerhetjük az SPI protokollt és az Arduino használatát. Az SPI protokollt két Arduino közötti kommunikációhoz fogjuk használni. Itt egy Arduino mesterként, egy másik pedig Slave-ként fog működni, két LED és nyomógomb csatlakozik mindkét Arduino-hoz. Az SPI kommunikáció bemutatásához a master oldali LED-t a slave oldalon lévő nyomógomb segítségével irányítjuk, és fordítva az SPI Serial kommunikációs protokoll segítségével.
Mi az SPI?
Az SPI (Serial Peripheral Interface) egy soros kommunikációs protokoll. Az SPI interfészt a Motorola 1970-ben találta meg. Az SPI-nek full-duplex kapcsolata van, ami azt jelenti, hogy az adatokat egyszerre küldik és fogadják. Ez azt jelenti, hogy a mester adatokat küldhet egy rabszolgának és egy rabszolga egyszerre küldhet adatokat a mesternek. Az SPI szinkron soros kommunikáció, vagyis az óra kommunikációs célokra van szükség.
Az SPI kommunikációt korábban más mikrovezérlők ismertették:
- SPI kommunikáció a PIC16F877A PIC mikrovezérlővel
- Összekötő 3,5 hüvelykes érintőképernyős TFT LCD és Raspberry Pi
- AVR mikrokontroller programozása SPI csapokkal
- Összekötő Nokia 5110 grafikus LCD és Arduino
Az SPI működése
Az SPI négy vonallal rendelkezik master / slave kommunikációval. Az SPI-nek csak egy masterje lehet, és több slave-je is lehet. A master általában mikrovezérlő, és a rabszolgák lehetnek mikrokontrollerek, érzékelők, ADC, DAC, LCD stb.
Az alábbiakban bemutatjuk az SPI Master Single Slave blokkdiagram-ábráját.
Az SPI négy sorból áll: MISO, MOSI, SS és CLK
- MISO (Master in Slave Out) - A Slave sor az adatok küldéséhez a masterhez.
- MOSI (Master Out Slave In) - A Master vonal adatok küldéséhez a perifériákhoz.
- SCK (soros óra) - Az óra impulzusok, amelyek szinkronizálják a master által generált adatátvitelt.
- SS (Slave Select) - A Master ezt a csapot használhatja bizonyos eszközök engedélyezéséhez és letiltásához.
SPI Master több rabszolgával
A master és a slave közötti kommunikáció megkezdéséhez a szükséges eszköz Slave Select (SS) pinjét LOW-ra kell állítanunk, hogy kommunikálni tudjon a masterrel. Ha magas, akkor figyelmen kívül hagyja a mestert. Ez lehetővé teszi, hogy több SPI eszköz ugyanazon MISO, MOSI és CLK master vonalakkal rendelkezzen. Amint a fenti képen látható, négy szolga van, amelyekben az SCLK, MISO, MOSI közösen csatlakozik a masterhez, és az egyes slave-ek SS-je külön-külön kapcsolódik a master egyedi SS-csapjaihoz (SS1, SS2, SS3). A szükséges SS pin LOW beállításával a master kommunikálhat az adott rabszolgával.
SPI csapok az Arduino UNO-ban
Az alábbi képen láthatóak az SPU csapok, amelyek jelen vannak az Arduino UNO-val (piros dobozban).
SPI vonal |
Tűzd be az Arduino-t |
MOSI |
Vagy az ICSP-4 |
MISO |
Vagy az ICSP-1 |
SCK |
Vagy az ICSP-3 |
SS |
10. |
Az SPI használata Arduinóban
Mielőtt elkezdené programozni az SPI kommunikációt két Arduino között. Meg kell tanulnunk az Arduino IDE-ben használt Arduino SPI könyvtárat.
A könyvtár
1. SPI.begin ()
HASZNÁLAT: Az SPI busz inicializálása az SCK, MOSI és SS kimenetekre állításával, az SCK és MOSI alacsony és SS magasra húzásával.
2. SPI.setClockDivider (osztó)
HASZNÁLAT: Az SPI óraosztó beállítása a rendszer órájához képest. A választható elválasztók 2, 4, 8, 16, 32, 64 vagy 128.
Elválasztók:
- SPI_CLOCK_DIV2
- SPI_CLOCK_DIV4
- SPI_CLOCK_DIV8
- SPI_CLOCK_DIV16
- SPI_CLOCK_DIV32
- SPI_CLOCK_DIV64
- SPI_CLOCK_DIV128
3. SPI.attachInterrupt (kezelő)
HASZNÁLAT: Ezt a funkciót akkor hívják meg, amikor egy rabszolga eszköz adatokat fogad a mastertől.
4. SPI.transzfer (val)
HASZNÁLAT: Ez a funkció az adatok egyidejű küldésére és fogadására szolgál a master és a slave között.
Tehát most kezdjük az SPI protokoll gyakorlati bemutatásával az Arduinóban. Ebben az oktatóanyagban két arduino-t fogunk használni masterként, másikat pedig slave-ként. Mindkét Arduino-t külön-külön LED és nyomógombbal rögzítik. A Master LED vezérelhető a rabszolga Arduino nyomógombjával és a slave Arduino LED-je az Arduino mester nyomógombjával vezérelhető az arduino-ban lévő SPI kommunikációs protokoll segítségével.
Az Arduino SPI kommunikációhoz szükséges elemek
- Arduino UNO (2)
- LED (2)
- Nyomógomb (2)
- Ellenállás 10k (2)
- Ellenállás 2,2k (2)
- Kenyérlemez
- Vezetékek csatlakoztatása
Arduino SPI kommunikációs áramkör diagram
Az alábbi kapcsolási rajz bemutatja az SPI használatát az Arduino UNO rendszeren, de ugyanezt az eljárást követheti az Arduino Mega SPI Communication vagy az Arduino nano SPI kommunikáció esetén is. Szinte minden a régiben marad, kivéve a PIN-kódot. Ellenőriznie kell az Arduino nano vagy a mega pinoutját, hogy megtalálja az Arduino nano SPI és az Arduino Mega csapokat, miután megtette, hogy minden más a régi lesz.
A fent bemutatott áramkört egy kenyérlemez fölé építettem, az alábbiakban láthatja az áramkör felépítését, amelyet tesztelésre használtam.
Az Arduino programozása az SPI kommunikációhoz:
Ez az oktatóprogram két programmal rendelkezik, az egyik az Arduino mester számára, a másik pedig a rabszolga Arduino számára. A projekt végén mindkét fél számára komplett programok találhatók.
Arduino SPI Master programozási magyarázat
1. Először is be kell illesztenünk az SPI könyvtárat az SPI kommunikációs funkciók használatához.
#include
2. Üres beállításban ()
- A soros kommunikációt 115200 átviteli sebességgel kezdjük.
Serial.begin (115200);
- Csatlakoztassa a LED-et a 7-es csaphoz, és nyomja meg a gombot a 2-es csaphoz, és állítsa be ezeket az OUTPUT és INPUT gombokat.
pinMode (ipgomb, INPUT); pinMode (LED, OUTPUT);
- Ezután megkezdjük az SPI kommunikációt
SPI.begin ();
- Ezután beállítottuk az Clockdivider-t az SPI kommunikációhoz. Itt állítottuk be a 8. elválasztót.
SPI.setClockDivider (SPI_CLOCK_DIV8);
- Ezután állítsa HIGH-ra az SS-tűt, mivel nem indítottunk el semmiféle átvitelt a slave arduino-ra.
digitalWrite (SS, HIGH);
3. Üres ciklusban ():
- Olvassuk a pin2-hez (Arduino mester) csatlakoztatott nyomógomb állapotát, hogy ezeket az értékeket elküldjük a rabszolga Arduino-nak.
gombérték = digitalRead (ipgomb);
- Állítsa be a logika beállítást az x érték beállításához (el kell küldeni a szolga számára), a 2. tűtől érkező bemenettől függően
if (gombérték == HIGH) { x = 1; } else { x = 0; }
- Az érték elküldése előtt LOW-t kell adnunk a slave kiválasztási értékének, hogy megkezdjük az átadást a slave-re a master-től.
digitalWrite (SS, LOW);
- Itt jön a fontos lépés, a következő utasításban elküldjük a Mastersend változóban tárolt nyomógomb értékét a slave arduino-nak, és értéket is kapunk a Slave-től, amely a Mastereceive változóban lesz tárolva .
Mastereceive = SPI.transzfer (Mastersend);
- Ezt követően a Mastereceive értékétől függően be- vagy kikapcsoljuk a Master Arduino LED-et.
if (Mastereceive == 1) { digitalWrite (LED, HIGH); // Beállítja a 7-es csapot HIGH Serial.println ("Master LED ON"); } else { digitalWrite (LED, LOW); // Beállítja a 7-es csapot LOW Serial.println ("Master LED OFF"); }
Megjegyzés: A serial.println () paranccsal megtekinthetjük az eredményt az Arduino IDE soros motorjában . Ellenőrizze a videót a végén.
Arduino SPI Slave programozási magyarázat
1. Először is be kell illesztenünk az SPI könyvtárat az SPI kommunikációs funkciók használatához.
#include
2. Üres beállításban ()
- A soros kommunikációt 115200 átviteli sebességgel kezdjük.
Serial.begin (115200);
- Csatlakoztassa a LED-et a 7-es csaphoz, és nyomja meg a gombot a 2-es csaphoz, és állítsa be ezeket az OUTPUT és INPUT gombokat.
pinMode (ipgomb, INPUT); pinMode (LED, OUTPUT);
- A fontos lépés itt a következő állítások
pinMode (MISO, OUTPUT);
A fenti állítás a MISO-t OUTPUT-ként állítja be (adatokat kell küldenie a Master IN-nek). Tehát az adatokat a Slave Arduino MISO-n keresztül küldi.
- Most kapcsolja be az SPI-t Slave módban az SPI Control Register használatával
SPCR - = _BV (SPE);
- Ezután kapcsolja be az SPI kommunikáció megszakítását. Ha adatot kap a mastertől, akkor a megszakítási rutint hívja meg, és a kapott értéket az SPDR (SPI data register) forrásból veszi
SPI.attachInterrupt ();
- A master értékét az SPDR-ből vesszük, és a Slavereceived változóban tároljuk. Ez a megszakítási rutin funkció követésével történik.
ISR (SPI_STC_vect) { Slavereceived = SPDR; kapott = igaz; }
3. Ezután a void ciklusban () a Slave arduino LED-et állítjuk be- vagy kikapcsolásra a Slavereceived értékétől függően.
if (Slavereceived == 1) { digitalWrite (LEDpin, HIGH); // A 7-es csapot HIGH LED ON- ként állítja be Serial.println ("Slave LED ON"); } else { digitalWrite (LEDpin, LOW); // A 7. tűt LOW LED OFF- ként állítja be Serial.println ("Slave LED OFF"); }
- Ezután elolvassuk a Slave Arduino nyomógomb állapotát, és eltároljuk az értéket a Slavesend alkalmazásban , hogy az értéket az SPDR regiszter értékének megadásával elküldjük a Master Arduino-nak.
gombérték = digitalRead (gombostű); if (gombérték == HIGH) {x = 1; } else {x = 0; } Slavesend = x; SPDR = Slavesend;
Megjegyzés: A serial.println () paranccsal megtekinthetjük az eredményt az Arduino IDE soros motorjában . Ellenőrizze a videót a végén.
Hogyan működik az SPI az Arduino-n? - Teszteljük!
Az alábbiakban bemutatjuk a két Arduino tábla közötti SPI kommunikáció végleges beállításának képét .
Amikor megnyomja a Master oldalon lévő nyomógombot, a slave oldalon fehér LED világít.
Amikor pedig a Slave oldalon lévő nyomógombot megnyomják, a Master oldalán piros LED világít.
Az alábbi videót megnézheti az Arduino SPI kommunikáció bemutatásához. Ha bármilyen kérdése van, kérjük, hagyja őket a megjegyzés részben, használja a fórumunkat.