Tutkimme SPI-liitäntää ja yhdistämme siirtorekisterin Arduinoon, johon pääsemme tällä protokollalla ohjaamaan ledejä.
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.
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.
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.
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.
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.
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.