SPI- Ja Arduino-käyttöliittymä

Sisällysluettelo:

SPI- Ja Arduino-käyttöliittymä
SPI- Ja Arduino-käyttöliittymä

Video: SPI- Ja Arduino-käyttöliittymä

Video: SPI- Ja Arduino-käyttöliittymä
Video: Видеоуроки по Arduino. Интерфейсы SPI (8-я серия, ч1) 2024, Saattaa
Anonim

Tutkimme SPI-liitäntää ja yhdistämme siirtorekisterin Arduinoon, johon pääsemme tällä protokollalla ohjaamaan ledejä.

SPI-liitäntä
SPI-liitäntä

Tarpeellinen

  • - Arduino;
  • - siirtorekisteri 74HC595;
  • - 8 LEDiä;
  • - 8 vastusta, 220 ohmia.

Ohjeet

Vaihe 1

SPI - Serial Peripheral Interface tai "Serial Peripheral Interface" on synkroninen tiedonsiirtoprotokolla isäntälaitteen ja oheislaitteiden (orja) liittämistä varten. Päällikkö on usein mikrokontrolleri. Laitteiden välinen tiedonsiirto tapahtuu neljän johtimen kautta, minkä vuoksi SPI: tä kutsutaan joskus "nelijohtimiseksi rajapinnaksi". Nämä renkaat ovat:

MOSI (Master Out Slave In) - tiedonsiirtolinja isännältä orjalaitteille;

MISO (Master In Slave Out) - siirtolinja orjasta isäntään;

SCLK (sarjakello) - isännän tuottamat synkronointikellopulssit;

SS (Slave Select) - orjalaitteen valintalinja; kun linjalla "0", orja "ymmärtää", että sitä käytetään.

Tiedonsiirtotapoja on neljä (SPI_MODE0, SPI_MODE1, SPI_MODE2, SPI_MODE3), johtuen kellopulssin napaisuuden (toimimme HIGH tai LOW tasolla), kellon napaisuuden, CPOL ja kellopulssien vaiheen (synkronointi) yhdistelmästä kellopulssin nousevalla tai laskevalla reunalla), Clock Phase, CPHA.

Kuvassa on kaksi vaihtoehtoa laitteiden liittämiseksi SPI-protokollaa käyttäen: itsenäinen ja kaskadinen. Kun yhteys itsenäisesti SPI-väylään on kytketty, isäntä kommunikoi jokaisen orjan kanssa erikseen. Kaskadilla - orjalaitteet laukaistaan vuorotellen kaskadissa.

SPI-yhteyksien tyypit
SPI-yhteyksien tyypit

Vaihe 2

Arduinossa SPI-väylät ovat tietyissä satamissa. Jokaisella levyllä on oma tappiosoitteensa. Mukavuuden vuoksi tapit kopioidaan ja sijoitetaan erilliseen ICSP (In Circuit Serial Programming) -liittimeen. Huomaa, että ICSP-liittimessä ei ole orjavalintatappia - SS, koska oletetaan, että Arduinoa käytetään verkon isäntänä. Mutta tarvittaessa voit määrittää minkä tahansa Arduinon digitaalisen nastan SS: ksi.

Kuvassa näkyy tapien vakiomäärä SPD-väylille Arduino UNO: lle ja Nanolle.

SPI-toteutus Arduinossa
SPI-toteutus Arduinossa

Vaihe 3

Arduinolle on kirjoitettu erityinen kirjasto, joka toteuttaa SPI-protokollan. Se on kytketty seuraavasti: Lisää ohjelman alkuun #include SPI.h

SPI-protokollan kanssa työskentelemisen aloittamiseksi sinun on määritettävä asetukset ja alustettava protokolla sitten SPI.beginTransaction () -menetelmällä. Voit tehdä tämän yhdellä käskyllä: SPI.beginTransaction (SPISettings (14000000, MSBFIRST, SPI_MODE0)).

Tämä tarkoittaa sitä, että alustamme SPI-protokollan taajuudella 14 MHz, tiedonsiirto menee, alkaen MSB: stä (merkittävin bitti), "0" -tilassa.

Alustamisen jälkeen valitsemme orjalaitteen asettamalla vastaavan SS-nastan LOW-tilaan.

Sitten siirrämme tiedot orjalaitteeseen SPI.transfer () -komennolla.

Lähetyksen jälkeen palautamme SS: n HIGH-tilaan.

Työskentely protokollan kanssa päättyy SPI.endTransaction () -komentoon. On toivottavaa minimoida SPI.beginTransaction () - ja SPI.endTransaction () -ohjeiden välisen siirron suoritusaika niin, ettei päällekkäisyyksiä ole, jos toinen laite yrittää aloittaa tiedonsiirron eri asetuksilla.

SPI-lähetys
SPI-lähetys

Vaihe 4

Tarkastellaan SPI-käyttöliittymän käytännön soveltamista. Valot sytytetään ohjaamalla 8-bittistä siirtorekisteriä SPI-väylän kautta. Yhdistetään 74HC595 siirtorekisteri Arduinoon. Yhdistämme kuhunkin 8 lähtöön LED: n kautta (rajoittavan vastuksen kautta). Kaavio on esitetty kuvassa.

Yhdistetään siirtorekisteri 74HC595 Arduinoon
Yhdistetään siirtorekisteri 74HC595 Arduinoon

Vaihe 5

Kirjoitetaan sellainen luonnos.

Yhdistä ensin SPI-kirjasto ja alustaa SPI-käyttöliittymä. Määritetään nasta 8 orjan valintanastaksi. Tyhjennetään siirtorekisteri lähettämällä sille arvo "0". Alustamme sarjaportin.

Tietyn LED-valon sytyttämiseksi siirtorekisterin avulla sinun on käytettävä 8-bittistä numeroa sen tuloon. Esimerkiksi, jotta ensimmäinen LED syttyy, syötämme binääriluvun 00000001, toiselle - 00000010, kolmannelle - 00000100 jne. Nämä desimaalimuodossa olevat binääriluvut muodostavat seuraavan sekvenssin: 1, 2, 4, 8, 16, 32, 64, 128 ja ovat kahden potensseja 0: sta 7: een.

Vastaavasti, silmukassa () LEDien lukumäärän mukaan, laskemme uudelleen 0: sta 7: een. Toiminto (perus, aste) nostaa 2 jaksolaskurin tehoon. Mikro-ohjaimet eivät toimi kovin tarkasti kaksoistyyppisten numeroiden kanssa, joten tuloksen muuntamiseksi kokonaisluvuksi käytämme round () -funktiota. Ja siirrämme tuloksena olevan numeron siirtorekisteriin. Selkeyden vuoksi sarjaporttimonitori näyttää tämän toiminnon aikana saadut arvot: yksi kulkee numeroiden läpi - LED-valot syttyvät aaltoina.

Luonnos siirtorekisterin ohjaamiseksi SPI-väylän kautta
Luonnos siirtorekisterin ohjaamiseksi SPI-väylän kautta

Vaihe 6

LED-valot syttyvät vuorotellen, ja havaitsemme liikkuvan valojen aallon. LEDejä ohjataan siirtorekisterillä, johon yhdistimme SPI-liitännän kautta. Tämän seurauksena vain 3 Arduino-nastaa käytetään 8 LEDin ohjaamiseen.

Olemme tutkineet yksinkertaista esimerkkiä siitä, kuinka Arduino toimii SPI-väylän kanssa. Harkitsemme siirtorekistereiden kytkemistä tarkemmin erillisessä artikkelissa.

Suositeltava: