Mikä on 4 johdin spi-liitäntä. Kuinka työskennellä SPI:n kanssa - teoria. Signaalin ajoituskaavio

Tänään aloitamme tutustumisen renkaaseen SPI (Serial Peripheral Interface).

Tätä väylää käytetään erittäin laajasti elektroniikassa. Se on erittäin kätevä, koska se on synkroninen ja full duplex, joten sitä käytetään monissa piireissä viestintään eri digitaalisten laitteiden välillä - anturit, ohjaimet, ajurit ja muut laitteet.

Toinen tärkeä tekijä siihen tutustumisen tarpeessa on, että tämä väylä on järjestetty laitteistoon ohjaimissa AVR.

Lisäksi, halusimme sitä tai emme, olemme kommunikoineet SPI-rajapinnan kanssa jo pitkään, heti kun aloimme vilkkua ohjaimellamme ensimmäistä kertaa, koska se välähtää tämän rajapinnan kautta.

Siksi haluaisin tutustua tähän renkaaseen paremmin.

Avataan Atmega8-ohjaimen tekninen dokumentaatio, avataan sivu, jossa näkyy tämän ohjaimen pinout ja katsotaan, että nastoista 16-19 on SPI-väylän nastat

Nyt vähän enemmän näistä löydöistä

SS (sirun valinta)— Tämä on laitteen valintaosuus. Jos tämän nastan orjalaite laskee alas, niin Tämä laite vastaa ja vaihtaa tietoja SPI-väylän kautta, jos korkea, niin ei.

MOSI (isäntälähdön orjatulo)- Tämä on päälaitteen lähtönasta ja orjalaitteen tulo.

MISO (isäntätulon orjalähtö)- päinvastoin, orjan lähtö, isäntälaitteen tulo.

SCK- synkronointijalka. Kaikki tämän väylän tiedonvaihtoon osallistuvat laitteet syötetään kellopulsseilla tietyllä taajuudella.

Tässä on kaavio SPI-väylän toteutuksesta Atmega8-ohjaimessa

Kuten kaikki linja-autot, on olemassa useita rekistereitä, jotka tallentavat tiettyjä tietoja.

Olemme kiinnostuneita SHIFT REGISTERistä, sen kautta vaihdetaan tietoa. Heti kun synkronointinastassa on tietty reuna, joko laskeva tai nouseva, asetuksista riippuen, nämä orja- ja isäntälaitteiden rekisterit vaihtavat tietoa, eivätkä kaikkea tietoa, vaan vain yhden bitin. Nämä rekisterit siirtyvät vasemmalle ja kunkin rekisterin merkittävimmät bitit siirtyvät liittyvän laitteen saman rekisterin vähiten merkitseviin bitteihin. Toisin sanoen orja lähettää merkittävimmän bittinsä MOSI-nastan kautta johtajalle, joka kirjoittaa sen vapautuneeseen matalan kertaluvun bittiin vasemman siirron vuoksi ja orja siirtää siirretyn korkean kertaluvun bittinsä MISOn kautta. pin johtajan matalan kertaluvun bittiin. Näin vaihto tapahtuu, eli 8 täydessä kellojaksossa ne vaihtavat tavuja kokonaan

Heti kun yhden tavun tiedon kaikki 8 bittiä on lähetetty, tietty rekisteri ilmoittaa meille, että Tämä prosessi valmis. Tai pikemminkin tietty osa tietystä rekisteristä.

Myös lohkokaaviossa näkyy jakaja, jonka sisääntulo vastaanottaa kellopulsseja ja sitten tietyllä arvolla jaettuna lähetetään ketjun kautta SCK-nastalle ja sieltä ne syötetään orjalaitteeseen sama nimi. Tämä varmistaa laitteiden synkronoidun toiminnan. Kellotaajuus valitaan kaikkien vaihtoon osallistuvien laitteiden tukemista alimmasta.

Sanon monikko, koska tietyssä piirissä voi olla enemmän kuin kaksi laitetta. Kuinka tämä varmistetaan, jos laitteilla ei ole osoitteita, kerron nyt sinulle.

On olemassa useita tapoja vaihtaa tietoja useiden laitteiden välillä, toisin sanoen kun isäntälaitetta kohden on useita orjia. Tarkastellaan kahta yleisintä niistä.

Ensimmäinen menetelmä on radiaalinen (klikkaa kuvaa suurentaaksesi kuvaa)

Tässä isäntä ohjaa tiedot tietylle laitteelle ja kytkee päälle loogisen 0:n SS-nastassa.

On toinenkin mielenkiintoinen menetelmä - rengas tai kaskadi (klikkaa kuvaa suurentaaksesi kuvaa)

Tässä näemme, että valintajalat ovat kaikki yhdensuuntaiset ja vaihto kulkee ympyrää. Siten nopeus pienenee johtuen siitä, että lähetysympyrä kasvaa, mutta porttihaarat tallennetaan.

Tutkimme kaikkea tätä tarkemmin seuraavilla tunneilla, kun käytämme projekteissamme tiettyjä laitteita.

Näyttää siltä, ​​​​että tiedonsiirron piirissä väylän kautta SPI keksimme sen.

Nyt selvitetään, kuinka tätä prosessia ohjataan AVR-ohjaimen laitteistorekisterien tasolla.

Näemme nämä rekisterit yllä olevassa lohkokaaviossa sivulla.

Atmega8:ssa on seuraavat rekisterit SPI-väylän huoltoa varten.

SPDR (SPI-tietorekisteri)- tietorekisteri, lohkokaaviossa se on DATA BUFFER. Kirjoitamme tähän rekisteriin tavun sen myöhempää lähettämistä varten orjalaitteelle ja luemme siitä orjalaitteelta tulleen tiedon tavun. Ei myöskään ole välttämätöntä, että ohjaimemme on päälaite. Myöhemmin kokoamme piirin kahdesta ohjaimesta, joista toinen on orja. Joten tässä rekisterissä sekä lähetyksen että vastaanottamisen tavu sijoittuu.

SPCR (SPI Control Register)- valvontarekisteri

Tämä rekisteri sisältää seuraavat bitit:

SPIE (SPI-keskeytyksen käytössä)- vähän joka mahdollistaa keskeytykset.

SPE (SPI käytössä)- vähän, joka mahdollistaa SPI-väylän.

DORD (tietojärjestys)— bitti, joka määrittää bittien lähetysjärjestyksen.

MSTR (Master/Slave Select)- bitti, joka määrittää laitteen isäntä- tai orjalaitteeksi. Kun tämä bitti on asetettu arvoon 1, laite on isäntä.

CPOL (kellon napaisuus)— synkronoinnin polariteetti, määrittää, millä tahdistuspulssin reunalla valmiustila käynnistetään

Jos tämä bitti on 1, meillä on valmiustila, jossa on nouseva reuna, ja jos se on 0, niin laskeva reuna.

CPHA (kellovaihe)— bitti, joka vastaa kellovaiheesta, eli millä reunalla bitti lähetetään.

Katsotaanpa tiedonsiirtokaavioita CPOL:n ja CPHA:n asennuksesta riippuen

Tämä on niin mielenkiintoinen riippuvuus. Joskus näemme sisään tekniset tiedot mistä tahansa laitteesta, joka voi toimia esimerkiksi SPI 0:0- ja SPI 1:1 -tilassa, tämä koskee juuri näiden bittien asetusta.

SPR1, SPR0 (SPI Clock Rate Select)- nämä ovat bittejä, jotka vastaavat synkronointitaajuusjakajan arvosta, ne toimivat yhdessä bitin kanssa SPI2X sijaitsee tilarekisterissä. Se on myös ohjaus, koska ohjausrekisterin kahdeksan bittiä ei riittänyt kaikkiin asetuksiin, ja tilarekisterissä on paljon vapaita.

SPSR (SPI-tilarekisteri)- statusrekisteri

SPI2X (Double SPI Speed ​​​​Bit)- bitti, joka kaksinkertaistaa nopeuden, toimii yhdessä ohjausrekisterin SPR1- ja SPR0-bittien kanssa.

Katsotaanpa taajuuden riippuvuutta näistä kolmesta bitistä

SPIF (SPI-keskeytyslippu)— Keskeytyslippu. Odotamme, että tämä bitti asetetaan yhdeksi. kun saamme tavun. Heti kun toisen laitteen tavu näkyy kokonaan puskurissamme, tämä lippu asetetaan. Tämä lippu toimii vain, jos bitti, joka sallii keskeytykset, on asetettu, samoin kuin yleiset keskeytykset ovat käytössä.

WCOL (kirjoita törmäyslippu)— ristiriita- tai törmäyslippu asetetaan, jos tiedonsiirron aikana on bittiristiriita, jos tiedonsiirron aikana yritetään kirjoittaa tietorekisteriin.

No, nyt voimme sanoa, että olemme tulleet hieman tutuiksi SPI-käyttöliittymään.

Katso VIDEOOPAS(klikkaa kuvaa)

Viestin näyttökerrat: 6 294

SPI(Sarjaväylä) - Serial oheislaitteiden vaihtoprotokolla. Tämän lävistyksen on kehittänyt Motorola, mutta monet valmistajat käyttävät sitä tällä hetkellä. Se on suunniteltu yhdistämään mikro-ohjaimet keskenään sekä kaikenlaisten oheislaitteiden kanssa: anturit, ADC:t, muistisirut, kellot. Mutta silti yleisin käyttö SPI- Tämä kirjoittaa ohjelman mikro-ohjaimen muistiin. Mikrokontrollereissa AVR avulla SPI voit flash-mikro-ohjaimen irrottamatta sitä levyltä, tätä vilkkumistapaa kutsutaan ISP (järjestelmän ohjelmointi). Vaikka nimet SPI Ja ISP hyvin konsonantti, ne eivät ole sama asia AVR SPI käytetään fyysisenä kerroksena ISP, eli käytetään viivoja SPI tiedonsiirtoa varten, mutta itse protokolla (ohjelmistotaso) on erilainen.

Tietojen siirtämiseen SPI:hen käytetään kolmea riviä:

MISO (Master Input Slave Output)– Tämän rivin kautta isäntä (isäntä) vastaanottaa tietoja orjalta (slave).

MOSI (Master Output Slave Input)– Isäntä lähettää tiedot orjalle tämän linjan kautta.

SCK (sarjakello)– lähettää kellosignaalin orjalaitteeseen.

Linja on myös käytössä SS (orjavalinta), joka määrittää laitteen, jolla Hallita vaihtaa tietoja.

Koska monet valmistajat käyttävät SPI:tä laitteissaan, pinnimien nimet voivat vaihdella hieman. Alla on taulukko vaihtoehtoisilla nimillä.


SPI:tä on kahta tyyppiä: laitteisto ja ohjelmisto. Ohjelmistoa toteutettaessa SPI, meidän on asetettava signaali manuaalisesti vastaavan jalkoihin MISO, MOSI, SS vetäessäsi SCK. Laitteistototeutuksen kanssa SPI siirrämme tiedot erityiseen rekisteriin ja mikrokontrolleri itse suorittaa yllä kuvatut käsittelyt alustavien asetusten mukaisesti.

Fyysinen toteutus SPI, edustaa kahta toisiinsa yhdistettyä siirtorekisteriä.


Riippuen loogisen signaalin tasosta SCK, synkronointi tapahtuu Hallita Ja Orja ja millä rintamalla tietoja kaapataan ja siirretään, 4 tilaa on mahdollista SPI.

  • CPOL = 0 - synkronointisignaali alkaa matalalla tasolla;
  • CPOL = 1 - synkronointisignaali alkaa korkealla tasolla;
  • CPHA = 0 - data näytteistetään synkronointisignaalin nousevalla reunalla;
  • CPHA = 1 - data näytteistetään synkronointisignaalin laskevalta reunalta.
Alla olevat oskilogrammit näyttävät miltä paketti 0x17 näyttää eri tiloissa.
CPOL = 0 CPHA = 0


CPOL = 1 CPHA = 0


CPOL = 0 CPHA = 1


CPOL = 1 CPHA = 1

SPI- synkroninen käyttöliittymä, eli joidenkin tietojen vastaanottamiseksi Orja, Hallita pitäisi lähettää jotain. Kaikki näyttää selvältä, mutta entä jos Hallita lähettää yhden tavun ja Orja pitäisikö minun antaa hänelle kaksi takaisin? Tässä tapauksessa päällikön tulee lähettää hänelle jotain 2 kertaa, esimerkiksi 0x00.
//lähetä komento, vastauksen tulee olla kaksi tavua Spi_Master_Transmit(chx); //lähetä jotain ensimmäisen tavun vastaanottamiseksi Spi_Master_Transmit(0X00); touch_x = SPDR; touch_x<<= 8; //отправляем что-нибудь для того чтобы принять второй байт Spi_Master_Transmit(0X00); touch_x |= SPDR; touch_x >>= 3;
Siinä kaikki, yllä oleva koodiesimerkki on otettu työprojektista.

Serial-oheisliitäntä tai SPI- Oheislaitteiden sarjaliitäntä, jota käytetään oheislaitteiden ja mikro-ohjaimen väliseen viestintään. Oheislaite voi olla esimerkiksi: näyttö, erilaisia ​​antureita, FLASH-muisti, SD-kortti (kyllä, kyllä, SD-kortti tai "flash-asema", jota käytät puhelimissa ja kameroissa, kommunikoi ulkopuolinen maailma käyttämällä SPI-liitäntää) jne.

Valitettavasti SPI-rajapinnalle ei ole virallista dokumentaatiota, joten tämä viesti perustuu erilaisiin Internetin artikkeleihin, omaan kokemukseeni ja dokumentaatioon mikrokontrollereista.

Lue Wikipedian artikkeleista, mitä SPI on

SISÄÄN SPI Aina on yksi isäntä ja yksi/useita orjia.

Tiedonsiirron aloittaa aina isäntä.

SPI käyttää neljää viestintälinjaa:

  • MOSI tai SI.- päälähtö, orjatulo (englanniksi) HallitaUlosOrjaSisään). Siirtää tietoja isäntälaitteesta orjalaitteelle.
  • MISO tai NIIN- Master-tulo, orjalähtö (englanniksi) HallitaSisäänOrjaUlos). Siirtää tietoja orjalaitteesta isäntälaitteeseen.
  • SCLK tai SCK- sarja kellosignaali SarjaKello). Toimii kellosignaalin lähettämiseen orjalaitteille.
  • C.S. tai SS- mikropiirin valinta, orjan valinta (eng. Chip Select, Slave Select).

P.S. Yksisuuntaisen tiedonsiirron varmistamiseksi yhden laitteen kanssa riittää käyttöä SCLK, MOSI(jos orjalaite vain vastaanottaa) tai SCLK, MISO(jos orjalaite ei vastaanota mitään, vaan lähettää vain tietoa). Sisäänkäynnillä C.S. orjalaite on asetettava loogiseen nolla, muuten orja ei toimi.

P.S. Jos orjalaite sekä lähettää että vastaanottaa, voit rajoittaa itsesi kolmeen johtoon - MISO, MOSI, SCLK, sisäänkäynnillä C.S. orjalaitteen on myös asetettava looginen nolla.

SPI voidaan toteuttaa mikro-ohjaimessa laitteisto, silloin rajapinnan hallintatehtävä ratkaistaan ​​kullekin mikro-ohjaimelle erikseen, koska toteutukset voivat vaihdella. Esimerkiksi varten ATmega328Р(Atmelin mikro-ohjain) työskennellessäsi SPI meidän on asennettava se ohjelmallisesti SS looginen nolla klo vastaanoton/lähetyksen alkaminen ja aseta looginen yksikkö takaisin lähetyksen loppu.

Jotta voit siirtää tietoja orjalaitteeseen, sinun on vuororekisteri MASTER (kuvassa päämiehen siirtorekisteri on " 8 BITTIINEN SIIRTOREKISTERI") Kirjoita ylös tavu lähetettyä tietoa. Samalla automaattisesti SCK alkaa tuottaa kellon signaali. Tämä on laitteistototeutus.

Jos mikro-ohjaimessa ei ole laitteistotukea SPI:lle, niin liitäntä SPI voidaan aina toteuttaa ohjelmistossa, eli luoda ohjelma, joka ohjaa ohjaimen haaroja SP-vaihtoprotokollan mukaisesti.

Erot SPI-rajapintojen toteutuksissa

Slave-mikropiirit voivat "tulkkia" vastaanotetun signaalin SPI:n kautta eri tavalla, ero voi olla seuraavissa kohdissa:

  • siirrettävän tiedon määrässä tai paketin koko, yleensä tämä 8-bittinen, mutta on muutakin
  • bittijärjestyksessä, ensiksi merkittävin kohta tai ensin vähiten merkittävä bitti
  • Tekijä: mille kellosignaalille tiedot välitetään?(loogisella yksiköllä (HIGH) tai loogisella nollalla (LOW))
  • Tekijä: mihin pulssin reunaan synkronointi tapahtuu?(nousu tai lasku), jota kutsutaan lyhyesti "synkronointivaiheeksi"

Yhdistelmä " kellon signaalin taso"ja" synkronointivaiheet» on määritelty teknisissä tiedoissa nimellä SPI-käyttötilat. Siellä on vain 4:

tila Signaalin voimakkuus (CPOL) Vaihe (CPHA)
0 0 0
1 0 1
2 1 0
3 1 1

Sarakkeessa " Signaalin taso» 1, tarkoittaa että databittiä, hyväksytty orja milloin nolla lähetetään synkronointilinjaa pitkin, toisin sanoen - orjalaite odottaa eikä hyväksy tietoja, kun se on päällä SCK asetettu loogiseen 1.

Sarakkeessa " Vaihe» 1, tarkoittaa, että synkronointisignaalin määrää kellopulssin laskeva reuna, ja loogista 0-l Tekijä: kellopulssin nouseva reuna.

P.S. Lisäksi, jos sarakkeessa " Signaalin taso» asennettu 1, niin laskeva ja nouseva eturintama, jos se on esitetty kaaviossa, on " ylösalaisin».

Kaavioissa, datassa 4 tilaa voidaan kuvata seuraavasti:

Voit lukea lisää SPI:n toimintaperiaatteista artikkelista

http://www.kit-e.ru/articles/interface/2009_03_53.php

SPI:n käyttöönotto AVR-sarjan ATmega-mikro-ohjaimissa (ATmega328P) ja "varhaisissa" Motorola-mikro-ohjaimissa

Mikrokontrollerissa ATmega328P(mikroohjain Atmel AVR -sarjasta) voit ohjata seuraavia parametrit SPI:

SPI-rajapinnan konfigurointiin ja ohjaukseen käytetään kolmea rekisteriä:

  • Valvontarekisteri - SPCR
  • Tilarekisteri - SPSR
  • Rekisteri - SPDR

Lue lisää jokaisesta...

Valvontarekisteri – « SPCR» 0x2C, tallennusosoite 0x4C

— Looginen yksikkö sisään 7. bitti(bitin nimi SPIE) – ota SPI-keskeytykset käyttöön(keskeytys tapahtuu, jos globaalin rekisterin keskeytyksen salliva bitti on asetettu SREG(7. bitti)). Kun tavun siirto on valmis, syntyy keskeytys.

— Looginen yksikkö sisään 6. bitti(bitin nimi - SPE) - kytkeä SS, MOSI, MISO Ja SCK ATmega328P-mikro-ohjaimen portteihin - PB2, PB3, PB4, PB5.

— Looginen yksikkö sisään 5. bitti(bitin nimi DORD) – määrittää sen mukaan SPI lähetetään ensin junioriarvo, A sitten vanhin– "LSB"-tila. Looginen nolla päinvastoin tarkoittaa, että ensin lähetetään tärkein bitti ja sitten vähiten merkitsevä bitti - "MSB"-moodi.

— Looginen yksikkö sisään 4. bitti(bitin nimi - MSTR) — isäntätila käyttöön, nolla – ota orjatila käyttöön

— Looginen yksikkö sisään 3. bitti(bitin nimi CPOL) (synkronointisignaalin napaisuus tai tahdistustaso) – synkronointi suoritetaan mukaisesti impulssin puute(looginen nolla) tai kellosignaali valmiustilassa on yhtä suuri kuin 1. Looginen nolla - synkronointi suoritetaan pulssin läsnäololla (loogisella pulssilla) tai kellosignaali valmiustilassa on 0. Millä rintamalla (lasku tai nousu) synkronointi suoritetaan, määräytyy 2 vähän ( CPHA).

— Looginen yksikkö sisään 2. bitti(bitin nimi CPHA) (synkronointivaihe) – määrittää, että synkronointisignaali määräytyy SCK:n laskevan reunan mukaan, ja looginen nolla nousevalla reunalla SCK. Lisäksi, jos CPOL on asetettu arvoon 1, laskevat ja nousevat rintamat voidaan kuvata "ylösalaisin" kaaviossa.

1 Ja 0 vähän bitin kanssa SPI2x rekisterissä SPSR määrittää SPI-tiedonsiirtonopeus(tai kellonopeus SCK:n kautta). Näillä biteillä on merkitystä vain orjalle, koska ne ovat merkityksettömiä Vastaanottonopeus riippuu isäntälaitteen SCK-taajuudesta.

Missä fosc SPI-isäntäoskillaattorin kellotaajuuden (yleensä se on yhtä suuri kuin prosessorin kellotaajuus).

Tilarekisteri - "SPSR"(osoite ATmega328P:ssä lukemista varten 0x2D, tallennusosoite 0x4D, jos sinulla on eri MK, löydät osoitteet asiakirjoista)

7 rekisteröidy bitti " SPIF": SPI-keskeytyslippu

Terä on asetettu yksikkö, Kun tavun siirto tiedot päällä MOSI valmis. Jos SPI-keskeytyksen salliva bitti (SPIE-bitti) SPCR-rekisterissä on asetettu, SPIF-lipun asettaminen aiheuttaa keskeytyspyynnön generoinnin.

6 rekisteröidy bitti " WCOL": Kirjoita törmäyslippu

Bitti kirjoitus ristiriita rekisteriin SPDR. Terä on asetettu yksikkö, jos sisään lähetysaika tiedot ovat käynnissä kirjoitusyritys V tietorekisteri SPDR.

- Kanssa 5 Tekijä: 1 bit – varatut bitit, niiden arvo on aina yhtä suuri kuin 0

0 vähän" SPI2X": Double SPI Speed ​​​​Bit

vähän " kaksinkertainen nopeus tiedonsiirto" Jos bitti on kirjoitettu yksikkö, Tuo nopeus siirrot data kaksinkertaistui. Käyttämällä tämän bitin ja 1 Ja 0 vähän ( SPR1, SPR0) rekisteröidy SPCR, määritä lähetysnopeus SPI-tiedot. .

Tietorekisteri - "SPDR"(osoite ATmega328P:ssä lukemista varten 0x2E, tallennusosoite 0x4E, jos sinulla on eri MK, löydät osoitteet asiakirjoista)

Rekisterin koko on sama kuin yllä - 8-bittinen. Tätä rekisteriä käytetään tietojen siirtämiseen ja lukemiseen kautta SPI. Sijoittamalla siihen tietoja aloitat siirtoprosessin.

Katsotaanpa kolme esimerkkiä työskentelystä SPI-rajapinnan kanssa ATmega328P:ssä ympäristöissä:

- Arduino

#sisältää tavu x = B11000000; //lähetetty bittitavu y= B00000000; //vastaanottava bitti kirjoitetaan muuttujaan y void setup() ( SPI.begin(); /* SPI alustus */ /* alustus Arduinossa tämä tarkoittaa - aseta yksi SS:ssä - aseta SS-ulostuloksi (Slave Select tai orjavalinta) - 10 nastaa - aseta 1 seuraaviin SPCR-ohjausrekisterin bitteihin: 4. bitissä (bitin nimi - MSTR) - ota isäntätila käyttöön 6. bitissä (bitin nimi - SPE) - yhdistä SS, MOSI, MISO ja SCK portteihin PB4,PB5,PB6,PB7 (10,11,12,13 nastaa Arduinossa) - määritä seuraavat lähtönastat: SCK (Serial Clock tai clock signal) - 13-pin MOSI (Master Out Slave In tai data master) - 11 pin SPI.begin(:n) kautta tehdyn alustuksen seurauksena SPI-rajapinnan konfiguraatio on seuraava: - "MSB"-bittien järjestys, eli tärkein bitti lähetetään ensin, ja sitten vähiten merkitsevä - synkronointi suoritetaan pulssin tai kellosignaalin läsnäololla tilassa odotus on 0 - synkronointisignaalin määrää SCK:n nouseva reuna (kaksi pistettä edellä osoittavat, että SPI-moodi on tässä tapauksessa 0 ) - baudinopeus fosc/4 */ // VOIME ALUSTAA JOITAKIN SPI-TIEDONSIIRTOPARAMETRIÄ itse // tilata bittisekvenssit //SPI.setBitOrder(MSBFIRST); /* LSBFIRST - juniori ensin, sitten vanhempi MSBFIRST - vanhempi ensin, sitten juniori (oletusarvo SPI.beginistä) */ // tiedonsiirron taajuus //SPI.setClockDivider(SPI_CLOCK_DIV4); /* määritellään foscin ja kertoimen väliseksi suhteeksi, jonka mahdolliset arvot ovat: SPI_CLOCK_DIV2 SPI_CLOCK_DIV4 SPI_CLOCK_DIV8 SPI_CLOCK_DIV16 SPI_CLOCK_DIV32 SPI_CLOCK_DIV64 SPI_CLOCK_DIV128 */ //SPI-käyttötila (setDa //MODE); /* SPI_MODE0 - nollatila SPI_MODE1 - ensimmäinen tila SPI_MODE2 - toinen tila SPI_MODE3 - kolmas tila */ ) void loop() ( /* TIEDONSIIRTON TOTEUTUS SPI:N KAUTTA */ digitalWrite(10, HIGH); /* meidän on asetettava se itse SS:ssä 1-tsu */ y=SPI.transfer(x /*) lähettämällä bittibitiltä argumentin (tavu) ja vastaanottamalla vastauksen orjalaitteelta, siirto suoritetaan määrittämällä tavun arvo; SPDR-rekisteriin ja tällä hetkellä automaattisesti SCK:lle (13 pin ) generoidaan kellosignaali */ digitalWrite(10, /* meidän on asetettava SS arvoon 0 */ SPI.end(); SPI-väylä nastoista 10,11,12,13 */ /* Eli asettaa 0:sta SPCR-rekisterin kuudenteen bittiin (SPE) */ )

#sisältää

tavu x = B11000000 ; //lähetetty bitti

tavu y = B00000000 ; //vastaanottobitti kirjoitetaan muuttujaan y

void setup() (

SPI. alkaa(); /* SPI alustus */

/* alustus Arduinossa tämä tarkoittaa

Aseta yksikkö SS-asentoon

Aseta SS-lähtöön (Slave Select tai slave -valinta) - 10 pin

Aseta seuraavat SPCR-ohjausrekisterin bitit arvoon 1:

Neljännessä bitissä (bitin nimi - MSTR) - ota master-tila käyttöön

B 6. bitti (bitin nimi - SPE) - yhdistä

SS, MOSI, MISO ja SCK

Portteihin PB4,PB5,PB6,PB7

(10,11,12,13 nastaa Arduinossa)

Määritä seuraavat lähtönastat:

SCK (Serial Clock tai clock signal) - 13 pin

MOSI (Master Out Slave In tai data isännältä) - 11 pin

SPI.begin()-alustamisen seurauksena

SPI-rajapintakokoonpanomme on seuraava:

Bittien järjestys on "MSB", ts. Ensin lähetetään tärkein bitti ja sitten vähiten merkitsevä bitti

Synkronointi perustuu pulssin läsnäoloon

Tai kellosignaali lepotilassa on 0

Synkronointisignaalin määrää SCK:n nouseva reuna

(kaksi yllä olevaa pistettä osoittavat, että SPI-tila on tässä tapauksessa 0)

Tiedonsiirtonopeus fosc/4

// VOIMME ALUSTAA JOITAKIN SPI-TIEDONSIIRTOPARAMETRIÄ uudelleen itse

// bittijärjestys

//SPI.setBitOrder(MSBFIRST);

// tiedonvaihdon taajuus

//SPI.setClockDivider(SPI_CLOCK_DIV4);

/* määritelty suhteeksi

Fosc kertoimeen, jonka mahdolliset arvot ovat:

SPI_CLOCK_DIV2

SPI_CLOCK_DIV4

SPI_CLOCK_DIV8

SPI_CLOCK_DIV16

SPI_CLOCK_DIV32

SPI_CLOCK_DIV64

SPI_CLOCK_DIV128

//SPI-käyttötila

//SPI.setDataMode(SPI_MODE0);

SPI_MODE0 - nollatila

SPI_MODE1 - ensimmäinen tila

SPI_MODE2 - toinen tila

SPI_MODE3 - kolmas tila

void loop()

/* SPI:N KAUTTA TIEDONSIIRTON TOTEUTUS */

digitalWrite(10, KORKEA); /* meidän on asennettava 1-tsu itse SS:ään */

y = SPI. siirto(x); /* lähettää bittikohtaisen argumentin (tavun) ja vastaanottaa vastauksen orjalaitteelta

Siirto suoritetaan antamalla SPDR-rekisteriin tavun arvo

Ja tällä hetkellä automaattisesti SCK:ssa (13 pin)

Kellosignaali syntyy */

digitalWrite(10, LOW); /* meidän on asetettava SS itse arvoon 0 */

SPI. end(); /* poistaa SPI-väylän käytöstä nastoista 10,11,12,13 */

/* Tuo on asettaa 0:sta SPCR-rekisterin bittiin 6 (SPE) */

- Atmel-studio (AVR GCC)

#sisältää #sisältää void init_spi() ( DDRB=(1<

#sisältää

#sisältää

void init_spi() (

DDRB = (1<< PB0 ) | (1 << PB1 ) | (1 << PB2 ) | (0 << PB3 ) ;

//määritä nastat SPI:lle (SS, SCK, MOSI - lähtö, MOSI-tulo)

// SPI-alustus

// SPI-tyyppi: Master

// SPI-kellotaajuus: 2000 000 kHz

// SPI-kellovaihe: Cycle Start

// SPI-kellon napaisuus: Matala

// SPI-tietojärjestys: MSB ensin

SPCR = (0<< SPIE ) | (1 << SPE ) | (0 << DORD ) | (1 << MSTR ) | (0 << CPOL ) | (0 << CPHA ) | (1 << SPR1 ) | (1 << SPR0 ) ;

Siirtoliitännät.

Useita tiedonsiirtorajapintoja on kehitetty siirtämään tietoa laitteesta toiseen tai sirulta toiseen. Jokaisessa käyttöliittymässä on sekä positiivisia että negatiivisia puolia, joten sinun on tiedettävä, mitä rajapintoja on olemassa, niiden hyvät ja huonot puolet, ja käytettävä oikeaa käyttöliittymää tiedon siirtämiseen tietyssä tilanteessa.

Liitännät tulevat asynkronisella ja synkronisella tiedonsiirrolla. Synkronisessa tiedonsiirrossa kellosignaali lähetetään samanaikaisesti datan kanssa, jolloin vastaanotin ja lähetin voivat synkronoida. Esimerkki tällaisesta protokollasta on SPI-liitäntä.

Asynkronisessa tiedonsiirrossa ei ole kellosignaalia. Tällaisissa linjoissa on vaara, että vastaanotin ja lähetin eivät täsmää, minkä seurauksena muita tietoja ei vastaanoteta oikein. Tämän estämiseksi asynkroniset rajapinnat suorittavat säännöllistä synkronointia datalinjoja pitkin. Tällaisten liitäntöjen etuna on siirtoon tarvittava pienempi määrä johtimia.

Tarkastellaanpa tarkemmin useita suosituimpia käyttöliittymiä.

USART käyttöliittymä.

USART-liitäntä on yleiskäyttöinen synkroninen-asynkroninen lähetin-vastaanotin. Tiedot siirretään USART:lle säännöllisin väliajoin. Tämä ajanjakso määräytyy määritetyn USART-nopeuden mukaan ja se määritetään baudeina (merkeille, jotka voivat saada arvoja, jotka ovat yhtä suuria kuin nolla tai yksi, baudi vastaa bittejä sekunnissa). Vakionopeudet ovat yleisesti hyväksyttyjä: 300, 600, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200, 230400, 460800, 92160 baudia.

Databittien lisäksi USART lisää automaattisesti tietovirtaan synkronointimerkit, ns. aloitus- ja lopetusbitit. Vastaanoton yhteydessä nämä ylimääräiset palat poistetaan. Tyypillisesti aloitus- ja lopetusbitit erottavat yhden tavun tietoa (8 bittiä), mutta on olemassa USART-toteutuksia, jotka mahdollistavat 5, 6, 7, 8 tai 9 bitin lähettämisen. Alku- ja lopetussignaalien erottamat bitit ovat minimilähetys. USART:n avulla voit lisätä kaksi pysäytysbittiä lähetyksen aikana vähentääksesi vastaanottimen ja lähettimen epäsynkronoinnin todennäköisyyttä raskaassa liikenteessä. Vastaanotin jättää huomioimatta toisen pysäytysbitin ja pitää sitä lyhyenä taukona linjalla.

Yleissopimus on, että USART-tulon ja -lähdön passiivinen (tietojen puuttuessa) tila on looginen "1". Aloitusbitti on aina looginen "0", joten USART-vastaanotin odottaa siirtymistä "1":stä "0":iin ja laskee siitä aikavälin, joka on puolet bitin kestosta (aloitusbitin lähetyksen puoliväli) . Jos tällä hetkellä syöttö on edelleen "0", vähimmäispaketin vastaanottoprosessi alkaa. Tätä varten vastaanotin laskee 9 bitin kestoa peräkkäin (8-bittiselle datalle) ja tallentaa tulon tilan joka hetki. Ensimmäiset 8 arvoa ovat vastaanotettuja tietoja, viimeinen arvo on testiarvo (pysäytysbitti). Pysäytysbitin arvo on aina "1", jos todellinen vastaanotettu arvo on erilainen, USART tallentaa virheen.

Aikavälien muodostamiseksi lähettävillä ja vastaanottavilla USART:illä on tarkan ajan lähde (kellotus). Tämän lähteen tarkkuuden tulee olla sellainen, että virheiden summa (vastaanotin ja lähetin) asetettaessa aikaväliä aloituspulssin alusta lopetuspulssin puoliväliin ei ylitä puolta (tai vielä parempi vähintään neljännes) bittivälistä. 8-bittiselle viestille 0,5/9,5 = 5 % (todellisuudessa enintään 3 %). Koska tämä on vastaanottimen ja lähettimen virheiden sekä linjan mahdollisten signaalisäröjen summa, USART-kellotuksen suositeltu toleranssi on enintään 1,5 %.

Koska kellobitit vievät osan bittivirrasta, tuloksena oleva UART-suorituskyky ei ole yhtä suuri kuin yhteyden nopeus. Esimerkiksi 8-bittisissä 8-N-1-muotoisissa lähetyksissä kellobitit vievät 20 % virrasta, mikä 115 200 baudin fyysisellä nopeudella antaa databittinopeudeksi 92 160 bps tai 11 520 tavua/s.

Pariteetti

USART-protokollalla on kyky automaattisesti valvoa tietojen eheyttä käyttämällä bittipariteettimenetelmää. Kun tämä ominaisuus on käytössä, datan viimeinen bitti ("pariteettibitti") on aina 1 tai 0, joten ykkösten määrä tavussa on aina parillinen.

Virtauksen ohjaus

Ennen vanhaan USART-laitteet saattoivat olla niin hitaita, etteivät ne pysyneet saapuvan tietovirran mukana. Tämän ongelman ratkaisemiseksi USART-moduuleilla oli erilliset virtauksensäätölähdöt ja -tulot. Kun syöttöpuskuri oli täynnä, vastaanottavan USART:n logiikka asetti estotason vastaavalle lähdölle ja lähettävä USART keskeytti lähetyksen. Myöhemmin virtauksen ohjaus siirrettiin tietoliikenneprotokolliin, ja erillisten virtauksen ohjauslinjojen tarve katosi vähitellen.

Fyysinen toteutus.

USART on vaihtoprotokolla, ts. se määrittää bittien muodostusmenetelmän, tavujen lähetysparametrit, lähetysnopeuden jne.

Mutta USART:n fyysinen toteutus voi olla erilainen. Esimerkiksi datan siirtämiseksi yhdellä kortilla signaalit lähetetään +5V ja 0V-tasoilla. Tietojen siirtämiseen pitkiä matkoja ja laitteiden välillä käytetään muita fyysisiä jännitetasoja ja standardeja, kuten: virtasilmukka (4-20 mA), RS-232 (COM-portti), RS-485 ja vastaavat.

"Ohjain"-tasojen 0-5V muuttamiseksi "vakiotasoiksi" on olemassa valtava määrä erikoismikropiirejä, esimerkiksi ADM202 RS-232:lle.

Sarjaliitäntä SPI

Nimi SPI on lyhenne sanoista "Serial Peripheral Bus", joka kuvastaa sen tarkoitusta - väylä ulkoisten laitteiden liittämiseen. SPI-väylä on järjestetty isäntä-orja -periaatteen mukaan. Väyläisäntä on yleensä mikro-ohjain, mutta se voi olla myös ohjelmoitava logiikka, DSP-ohjain tai ASIC. Isäntälaitteeseen kytketyt laitteet ovat orjia. Niiden roolissa ovat erilaiset mikropiirit, mm. tallennuslaitteet (EEPROM, Flash-muisti, SRAM), reaaliaikakello (RTC), ADC/DAC, digitaaliset potentiometrit, erikoisohjaimet jne.

SPI-rajapinnan päärakennuspalikka on tavanomainen siirtorekisteri, jonka synkronointi ja bittivirran tulo/lähtösignaalit muodostavat liitäntäsignaalit. Siten on oikeampaa kutsua SPI-protokollaa ei tiedonsiirtoprotokollaksi, vaan tiedonvaihtoprotokollaksi kahden siirtorekisterin välillä, joista kumpikin suorittaa samanaikaisesti sekä vastaanottimen että lähettimen toimintoa. Tiedonsiirron edellytyksenä SPI-väylällä on väyläsynkronointisignaalin generointi. Vain johtajalla on oikeus luoda tämä signaali ja orjan työ riippuu täysin siitä.

Yhteys.

SPI-väylään on kolme liitäntätyyppiä, joista jokainen sisältää neljä signaalia. SPI-signaalien tarkoitus on kuvattu taulukossa 7.1.

Yksinkertaisin kytkentä, jossa on vain kaksi mikropiiriä, on esitetty kuvassa 7.2. Tässä väyläisäntä lähettää dataa MOSI-linjaa pitkin synkronisesti sen tuottaman SCLK-signaalin kanssa, ja orja kaappaa lähetetyt databitit vastaanotetun synkronointisignaalin tietyiltä reunoilta. Samalla orja lähettää tietopakettinsa. Esitettyä piiriä voidaan yksinkertaistaa poistamalla MISO-linja, jos käytetty orja-IC ei tarjoa vastaustiedon siirtoa tai sille ei ole tarvetta. Yksisuuntaista tiedonsiirtoa löytyy esimerkiksi siruista, kuten DAC:ista, digitaalisista potentiometreistä, ohjelmoivista vahvistimista ja ajureista. Näin ollen harkittu vaihtoehto orja-IC:n kytkemiseksi vaatii 3 tai 4 tietoliikennelinjaa.

Jotta orja-IC voi vastaanottaa ja lähettää dataa, sen lisäksi, että sillä on kellosignaali, SS-linja on myös ohjattava matalalle. Muuten orja-IC ei ole aktiivinen. Kun käytetään vain yhtä ulkoista IC:tä, voi olla houkuttelevaa poistaa SS-linja asettamalla orja-IC:n valintatulo kovaa alas. Tämä ratkaisu on erittäin ei-toivottu ja voi johtaa virheisiin tai jopa tiedonsiirron mahdottomuuteen, koska Sirun valintatulon tehtävänä on palauttaa IC alkutilaan ja joskus käynnistää ensimmäisen databitin lähdön.

Jos SPI-väylään on liitettävä useita mikropiirejä, käytetään joko itsenäistä (rinnakkais)liitäntää (kuva 7.3) tai sarjaliitäntää (kuva 7.4). Itsenäinen yhteys on yleisempää, koska saavutetaan käytettäessä mitä tahansa SPI-yhteensopivia siruja. Tässä kaikki signaalit, paitsi mikropiirien valinta, kytketään rinnan, ja väyläisäntä, siirtämällä yhden tai toisen SS-signaalin matalaan tilaan, määrittää, minkä orja-IC:n kanssa se vaihtaa tietoja. Tällaisen yhteyden suurin haittapuoli on lisälinjojen tarve orjasirujen osoittamiseksi (viestintälinjojen kokonaismäärä on 3+n, missä n on orjasirujen lukumäärä).

Jos mikro-ohjaimen jalkoja ei ole tarpeeksi, voit käyttää demultiplekserisirua. Demultiplekseri yhdistää yhden tulosignaalin yhteen lähtösignaaleista ohjausnastoissa olevan koodin mukaan. Kuva 7.4 näyttää demultiplekserin kytkentäkaavion. SS-signaali syötetään sen sisääntuloon, joka saa arvon, joka on yhtä suuri kuin 0, jos on tarpeen valita jokin mikropiireistä. Tarvittavan mikropiirin numero binäärikoodina toimitetaan Am-A0 jalkoihin. Näin voit pienentää mikrokontrollerissa käytettävien jalkojen lukumäärän arvoon m=log 2 n. Missä n on orjasirujen lukumäärä. Nuo. 128 laitteen yhdistämiseen tarvitaan 8 mikro-ohjaimen nastaa. Yksi aktivointisignaalin asettamiseen ja 7 päälle kytkettävän sirun numeron asettamiseen. On huomattava, että demultiplekserin kytkemättömissä haaroissa on oltava looginen. Muussa tapauksessa käytetään signaalin invertteriä, joka muuntaa loogisen nollan loogiseksi.

Kaskadikytkentä on vapaa tästä haitasta, koska tässä useat chipit muodostavat yhden suuren siirtorekisterin. Tätä varten yhden IC:n lähetysdatan lähtö kytketään toisen tiedon vastaanottotuloon, kuten kuvassa 3. Piirin valintatulot on kytketty rinnan ja siten tietoliikennelinjojen kokonaismäärä pysyy samana. - 4. Kaskadiyhteyden käyttö on kuitenkin mahdollista vain, jos sen tuki on ilmoitettu käytettyjen sirujen dokumentaatiossa. Tämän selvittämiseksi on tärkeää tietää, että tällaista yhteyttä kutsutaan englanniksi "daisy-chaining".

Siirtoprotokolla

Siirtoprotokolla SPI-rajapinnan yli on olennaisesti identtinen siirtorekisterin logiikan kanssa (Kuva 7.6), joka koostuu siirtooperaation suorittamisesta ja vastaavasti datan bittisyötöstä ja -tulosta synkronointisignaalin tietyillä reunoilla. Tietojen asettaminen lähetyksen aikana ja näytteenotto vastaanoton aikana suoritetaan aina vastakkaisilla kellon reunoilla. Tämä on tarpeen sen varmistamiseksi, että tiedoista otetaan näyte, kun ne on luotettavasti vahvistettu. Jos otamme huomioon, että siirtosyklin ensimmäinen reuna voi olla nouseva tai laskeva reuna, niin SPI-rajapinnan toiminnalle on neljä mahdollista logiikkavaihtoehtoa. Näitä vaihtoehtoja kutsutaan SPI-tiloiksi, ja niitä kuvaa kaksi parametria:

· CPOL - synkronointisignaalin alkutaso (jos CPOL=0, niin synkronointilinjalla ennen lähetysjakson alkua ja sen jälkeen on matala taso (ts. ensimmäinen reuna nousee ja viimeinen laskee), muuten, jos CPOL=1, - korkea (eli ensimmäinen rintama laskee ja viimeinen nousee));

· CPHA - synkronointivaihe; Tämä parametri määrittää järjestyksen, jossa tiedot asennetaan ja haetaan. Jos CPHA=0, niin kellojakson nousevalla reunalla data näytteistetään ja sitten laskevassa reunassa data asetetaan. Jos CPHA=1, tietojen asennus suoritetaan synkronointijakson nousevalle reunalle ja näytteenotto suoritetaan laskevalle reunalle.

Tietoja SPI-tiloista on esitetty kuvissa 7.7 ja 7.8.

Eri SPI-moodeissa toimivat isäntä- ja orjasirut eivät ole yhteensopivia, joten ennen orjasirujen valintaa on tärkeää selvittää, mitä tiloja väyläisäntä tukee. Mikrokontrollereihin integroidut laitteisto-SPI-moduulit tukevat useimmissa tapauksissa mahdollisuutta valita mikä tahansa tila, ja siksi niihin voidaan liittää kaikki orja-SPI-sirut (koskee vain itsenäistä liitäntävaihtoehtoa). Lisäksi SPI-protokolla missä tahansa tilassa on helposti toteutettavissa ohjelmistossa.

RS-485 liitäntä

RS-485-liitäntä (toinen nimi on EIA/TIA-485) on yksi yleisimmistä fyysisen tiedonsiirtokerroksen standardeista. Fyysinen kerros on viestintäkanava ja signaalinsiirtomenetelmä (OSI:n avointen järjestelmien yhteenliittämismallin kerros 1).

RS-485-rajapinnalle rakennettu verkko koostuu lähetin-vastaanottimista, jotka on kytketty kierretyllä parilla - kahdella kierretyllä johdolla. RS-485-liitäntä perustuu differentiaalisen (balansoidun) tiedonsiirron periaatteeseen. Sen ydin on lähettää yksi signaali kahden johdon kautta. Lisäksi yksi johdin (ehdollisesti A) kuljettaa alkuperäisen signaalin ja toinen (ehdollisesti B) kuljettaa sen käänteistä kopiota. Toisin sanoen, jos toisessa johdossa on "1", toisessa "0" ja päinvastoin. Näin ollen kierretyn parin kahden johdon välillä on aina potentiaaliero: kohdassa ”1” se on positiivinen, kohdassa ”0” se on negatiivinen (kuva 7.9).

Tämä potentiaaliero lähettää signaalin. Tämä lähetysmenetelmä tarjoaa korkean suojan yhteismoodin häiriöille. Yhteisen tilan häiriöt ovat häiriöitä, jotka vaikuttavat linjan molempiin johtimiin yhtäläisesti. Esimerkiksi viestintälinjan osan läpi kulkeva sähkömagneettinen aalto indusoi potentiaalin molemmissa johtimissa. Jos signaali välitetään potentiaalin kautta yhdessä johtimessa suhteessa yhteiseen, kuten RS-232:ssa, tämän johdon häiriöt voivat vääristää signaalia suhteessa yhteiseen (maahan), joka absorboi häiriöt hyvin. Lisäksi maapotentiaaliero putoaa pitkän yhteisen johdon resistanssin yli - lisäsäröjen lähde. Ja differentiaalilähetyksessä vääristymiä ei tapahdu. Itse asiassa, jos kaksi johtoa ovat lähellä toisiaan ja ovat jopa kietoutuneet toisiinsa, molempien johtojen poiminta on sama. Potentiaali molemmissa yhtä kuormitetuissa johtimissa muuttuu tasaisesti, kun taas informatiivinen potentiaaliero pysyy ennallaan.

RS485-liitännän laitteistototeutus.

Rajapinnan laitteistototeutus - lähetin-vastaanotinpiirit differentiaalisilla tuloilla/lähdöillä (linjalle) ja digitaalisilla porteilla (ohjaimen UART-portteihin). Tälle liitännälle on kaksi vaihtoehtoa: RS-422 ja RS-485.

RS-422 on kaksisuuntainen liitäntä. Vastaanotto ja lähetys tapahtuvat kahdella erillisellä johtoparilla. Jokaisessa johtoparissa voi olla vain yksi lähetin.

RS-485 on half-duplex-liitäntä. Vastaanotto ja lähetys tapahtuvat yhden johtoparin kautta aikaerolla. Verkossa voi olla useita lähettimiä, koska ne voidaan kytkeä pois päältä vastaanottotilassa (Kuva 7.10).

Kuvan 7.10 symbolien selitykset

D (kuljettaja) - lähetin;
R (vastaanotin) - vastaanotin;
DI (ohjaintulo) - lähettimen digitaalinen tulo;
RO (vastaanottimen lähtö) - vastaanottimen digitaalinen lähtö;
DE (driver enable) - lupa käyttää lähetintä;
RE (receiver enable) - lupa käyttää vastaanotinta;
A - suora differentiaalinen tulo/lähtö;
B - käänteinen differentiaalinen tulo/lähtö;
Y - suora differentiaalilähtö (RS-422);
Z - käänteinen differentiaalilähtö (RS-422).

Katsotaanpa tarkemmin RS-485-lähetin-vastaanotinta. Vastaanottimen digitaalinen lähtö (RO) on kytketty vastaanottimen UART-porttiin (RX). Lähettimen digitaalitulo (DI) UART-lähetinporttiin (TX). Koska vastaanotin ja lähetin on kytketty differentiaalipuolelle, lähetin on kytkettävä pois päältä vastaanoton aikana ja vastaanotin pois päältä lähetyksen aikana. Tätä tarkoitusta varten käytetään ohjaustuloja - vastaanottimen lupa (RE) ja lähettimen lupa (DE). Koska RE-tulo on käänteinen, se voidaan kytkeä DE:hen ja kytkeä vastaanotin ja lähetin yhdellä signaalilla mistä tahansa ohjaimen portista. Tasolla "0" - työskentele vastaanottoa varten, tasolla "1" - lähetystä (kuva 7.11).

Vastaanotin, joka vastaanottaa potentiaalieron (UAB) differentiaalituloista (AB), muuntaa ne digitaaliseksi signaaliksi lähdössä RO. Vastaanottimen herkkyys voi olla erilainen, mutta lähetin-vastaanotinsirujen valmistajat kirjoittavat dokumentaatioon signaalintunnistuksen taatun kynnysalueen. Tyypillisesti nämä kynnysarvot ovat ±200 mV. Eli kun UAB > +200 mV - vastaanotin havaitsee "1", kun UAB< -200 мВ - приемник определяет "0". Если разность потенциалов в линии настолько мала, что не выходит за пороговые значения - правильное распознавание сигнала не гарантируется. Кроме того, в линии могут быть и не синфазные помехи, которые исказят столь слабый сигнал.

Kaikki laitteet on kytketty yhteen kierrettyyn parikaapeliin samalla tavalla: suorat lähdöt (A) yhteen johtimeen, käänteislähdöt (B) toiseen.

Linjapuolen (RAB) vastaanottimen tuloimpedanssi on tyypillisesti 12 KΩ. Koska lähettimen teho ei ole rajoittamaton, tämä rajoittaa linjaan kytkettyjen vastaanottimien määrää. RS-485-spesifikaation mukaan lähetin voi ohjata jopa 32 vastaanotinta päätevastukset huomioiden. On kuitenkin olemassa useita mikropiirejä, joilla on lisääntynyt tuloimpedanssi, mikä mahdollistaa huomattavasti enemmän kuin 32 laitteen kytkemisen linjaan.

Suurin tiedonsiirtonopeus RS-485-spesifikaation mukaan voi olla 10 Mbaud/s. Suurin etäisyys on 1200 metriä. Jos on tarpeen järjestää viestintä yli 1200 metrin etäisyydelle tai kytkeä enemmän laitteita kuin lähettimen kuormitus sallii, käytetään erityisiä toistimia.

I2C-liitäntä.

Tätä käyttöliittymää ehdotti Philips, joka käytti sitä televisioiden sirujen välisen viestinnän järjestämiseen. I 2 C (lyhenne sanoista Inter-Integrated Circuit) on kaksisuuntainen asynkroninen sarjaväylä. Fyysisesti I 2 C -väylä koostuu kahdesta signaalilinjasta, joista toinen (SCL) on tarkoitettu kellosignaalin lähettämiseen ja toinen (SDA) tiedonvaihtoon. Linjojen ohjaamiseen käytetään avoimella kollektorilla varustettuja lähtöasteita, joten väyläjohdot tulee liittää +5 V virtalähteeseen vastusten kautta, joiden resistanssi on 1...10 kOhm riippuen johtojen fyysisestä pituudesta ja tiedonsiirtonopeus. Yhteyslinjojen pituus voi olla vakiotilassa 2 metriä, tiedonsiirtonopeus on 100 kbit/s.

Kaikki väylän tilaajat on jaettu kahteen luokkaan - "Leader" ja "Slave". Päälaite tuottaa kellosignaalin (SCL). Se voi itsenäisesti käyttää väylää ja osoittaa mihin tahansa orjalaitteeseen tiedon lähettämistä tai vastaanottamista varten. Kaikki orjalaitteet "kuuntelevat" väylää havaitakseen oman osoitteensa ja sen tunnistettuaan suorittavat määrätyn toimenpiteen. Lisäksi ns. ”MultiMaster”-tila on mahdollinen, kun väylään on asennettu useita isäntälaitteita, jotka joko jakavat yhteisiä orjalaitteita tai toimivat vuorotellen isänteinä, kun ne itse aloittavat tiedonvaihdon, tai orjalaitteita he odottavat pääsyä toiselta päälaitteelta. "MultiMaster"-tila vaatii jatkuvaa seurantaa ja ristiriitojen tunnistamista. Tässä suhteessa tämä tila on vaikeampi toteuttaa (eli ohjelmistototeutus) ja sen seurauksena sitä käytetään harvemmin todellisissa tuotteissa.

Alkuhetkellä - valmiustilassa - molemmat johdot SCL ja SDA ovat loogisessa yksitilassa (avokollektorin lähtöasteen transistori on kiinni). Lähetystilassa (Kuva 7.12) SDA-databitti kellotetaan SCL:n nousevalla reunalla. SDA-linjan tiedot muuttuvat, kun SCL-linja on nollatilassa. Slavelaite voi "pitää" SCL-linjan nollatilassa esimerkiksi seuraavan vastaanotetun tavun käsittelyn aikana, kun taas isäntälaitteen on odotettava SCL-linjan vapautumista ennen tiedon lähettämisen jatkamista.

I 2 C -väyläpakettien synkronoimiseksi erotetaan kaksi ehtoa - “START” ja “STOP”, jotka rajoittavat tietopaketin alkua ja loppua (kuva 7.13). Näiden olosuhteiden koodaamiseksi käytetään SDA-linjan tilan muutosta yhdellä SCL-linjan tilalla, mikä ei ole hyväksyttävää dataa lähetettäessä. "START"-ehto muodostuu, kun SDA-viivalle ilmestyy laskeva reuna, kun SCL-viiva on yhdessä tilassa, ja päinvastoin, "STOP"-ehto muodostuu, kun SDA-viivalle ilmestyy nouseva reuna, kun SCL rivi on yhdessä tilassa.

Tiedonsiirto alkaa SCL-linjan ensimmäisestä nousevasta reunasta, joka kellottaa ensimmäisen tietotavun merkitsevimmän bitin. Jokainen informaatiotavu (8 bittiä) sisältää 9 SCL-linjan kellojaksoa. Yhdeksännellä jaksolla vastaanottava laite antaa kuittauksen (ACK) - laskevan reunan, joka ilmaisee tiedon vastaanoton. On huomattava, että mikä tahansa väylätilaaja, sekä isäntä että orja, voi eri aikoina olla sekä lähetin että vastaanotin ja tilan mukaan hänen on joko vastaanotettava tai annettava ACK-signaali, jonka puuttuminen tulkitaan. virheenä.

Tietojenvaihtotoiminnan aloittamiseksi isäntälaite antaa väylään "START"-ehdon. "START"-ehtoa seuraa tavu, jossa on orjalaitteen osoite (kuva 7.14), joka koostuu seitsemän bitin laiteosoitteesta (bitit 1...7) ja yksibittisestä luku-kirjoitustoimintolipusta - " R/W” (bitti 0). R/W-bitti määrittää vaihdon suunnan, jossa 0 tarkoittaa tiedonsiirtoa isännältä orjalle (kuva 7.14a) ja 1 tarkoittaa lukemista orjalta (kuva 7.14b). Kaikki I2C-väylän bitit lähetetään järjestyksessä korkeasta matalaan, eli 7. bitti lähetetään ensin, 0:s viimeisenä. Osoitetta voi seurata yksi tai useampi tietotavu (R/W-lipun määrittelemään suuntaan), joiden bitit isäntä kelloi SCL-väylällä.

Lukutoimintoa suorittaessaan isäntäkoneen on kuitattava luettu tavu, jos se haluaa lukea seuraavan tavun, eikä antaa ACK-ilmoitusta, jos se on lopettamassa paketin lukemisen (katso kuva 7.14b).

On sallittua jatkaa orjalaitteen osoitetta useita kertoja yhden lähetysjakson aikana, toisin sanoen lähettää toistuva ”START”-ehto ilman aikaisempaa ”STOP”-ehtoa (kuva 7.14c).

On huomioitava joitain I 2 C -liitännän kautta toimivien muistisirujen ominaisuuksia ja niiden kanssa tapahtuvaa tiedonvaihtoa. Ensinnäkin näiden mikropiirien haihtumaton datamuisti on jaettu muistisivuihin, joten kun tavua kirjoitetaan, koko sivu kopioidaan ensin mikropiirin sisäiseen RAM-muistiin, jossa haluttu solu vaihdetaan. Tämän jälkeen vanha sivu poistetaan ja tilalle kirjoitetaan uusi. Toinen ominaisuus on, että orja-osoitteen merkittävimpien neljän bitin on aina oltava 1010. Tätä vaatimusta säätelee Philips itse.

1-johtiminen väylä käyttää vain yhtä johdinta tiedonsiirtoon ja tehoon. Viestintätila on asynkroninen ja puolidupleksi, joka noudattaa tiukasti isäntä-orja-mallia. Samanaikaisesti samaan väylään voidaan kytkeä yksi tai useampi orjalaite. Vain yksi päälaite voidaan kytkeä yhteen väylään.

Väylän joutotila vastaa korkeaa tasoa, joka syntyy vetovastuksen avulla. Vetovastuksen arvo on annettu orja-IC:n dokumentaatiossa. Kaikkien väylään kytkettyjen sirujen on kyettävä tuottamaan matala taso. Jos mikro-ohjaimen lähtö ei tue kolmea tilaa, on tarpeen tarjota ajuri, jossa on avoin kollektori tai avoin nielulähtö

Signaalin siirto 1-Wire-väylän kautta on jaettu 60 µs:n aikaväleihin. Vain yksi bitti dataa lähetetään aikaväliä kohti. Orjalaitteilla saa olla merkittäviä eroja nimellisaikaviiveistä. Tämä vaatii kuitenkin johtajalta tarkempaa ajoitusta, jotta varmistetaan oikea kommunikointi alaisten kanssa, joilla on erilaiset aikapohjat.

Perusväyläsignaalit.

Isäntä aloittaa jokaisen tiedonsiirron bittitasolla. Tämä tarkoittaa, että jokaisen bitin lähetys suunnasta riippumatta on aloitettava isännällä. Tämä saavutetaan asettamalla väylä matalaksi, mikä synkronoi kaikkien muiden laitteiden logiikan. 1-Wire-väylän kautta tapahtuvaa tiedonsiirtoa varten on 5 pääkäskyä: “Kirjoita lokiin. 1", "Kirjoita loki. 0", "Lue", "Nollaa" ja "Läsnäolo".

Signaali "Kirjoita loki. 1"

Signaali "Kirjoita loki. 1" näkyy kuvassa. 7.15. Master asettaa matalan tason 1...15 µs:ksi. Sitten se vapauttaa väylän jäljellä olevan aikavälin ajaksi.

Riisi. 7.15 – Signaali "Kirjoita loki. 1"

Signaali "Kirjoita loki. 0"

Signaali "Kirjoita loki. 0” näkyy kuvassa 7.16. Master generoi matalan tason vähintään 60 µs, mutta ei pidempään kuin 120 µs.

Kuva 7.16 – Signaali "Kirjoita loki. 0"

Lue signaali

"Lue"-signaali näkyy kuvassa. 7.17. Master asettaa matalan tason 1...15 µs:ksi. Sitten orja pitää väylän matalana, jos se haluaa lähettää lokin. 0. Jos lokin siirto on tarpeen. 1, niin se yksinkertaisesti vapauttaa linjan. Väyläskannaus on suoritettava 15 µs:n sisällä väylän laskusta. Isännän puolelta katsottuna "Read"-signaali on pohjimmiltaan "Kirjoita lokiin" -signaali. 1". Orjalaitteen todellinen sisäinen tila määräytyy "Record log" -signaalin perusteella. 1" tai "Lukeminen".

Kuva 7.17 – "Lue" -signaali

Nollaa/läsnäolosignaali

"Reset"- ja "Presence"-signaalit näkyvät kuvassa 7.18. Huomaa, että pulssin aikavälit ovat erilaisia. Isäntä vetää matalaa 8 aikaväliä (480 µs) ja vapauttaa sitten väylän. Tätä pitkää matalan tilan jaksoa kutsutaan "Reset"-signaaliksi.

Jos väylässä on orja, sen on 60 µs:n sisällä sen jälkeen, kun isäntä vapauttaa väylän, asetettava matala taso vähintään 60 µs:ksi. Tätä vastausta kutsutaan "läsnäoloksi". Jos tällaista signaalia ei havaita, isäntälaitteen on oletettava, että väylään ei ole kytketty laitteita eikä jatkoyhteys ole mahdollista.

USB (Universal serial bus) kehitettiin ulkoisten laitteiden nopeaan liittämiseen henkilökohtaiseen tietokoneeseen ja tarvittavien ohjelmistojen etsimiseen ja asentamiseen. Pienitehoiset laitteet saavat virran suoraan liitännän kautta.

USB-standardi edellyttää, että verkossa on vain yksi isäntälaite (isäntälaite). Lisäksi standardi tukee jopa 127 orjalaitetta verkossa. Master- ja slave-laitteiden erottamiseksi toisistaan ​​on kehitetty erilaisia ​​liittimiä (Kuva 7.19): Tyyppi A isännälle ja tyyppi B orjalle. Hyväksytään, että 5 V jännite on vain tyypin A liittimessä, joka on pääliitin. Muut laitteet saavat virtansa suoraan siitä.

USB-standardi käyttää 4 suojattua johtoa, joista kaksi lähettää tehoa (+5v & GND) (Kuva 7.19 ja Taulukko 7.2). Kaksi muuta edustavat kierretyn parin differentiaalidatasignaaleja. Käytetty koodausmalli NRZI(Non Return to Zero Invert) tiedonsiirtoon, jossa on synkronointikenttä isäntä- ja orjakellon synkronoimiseksi.

USB 2.0 -standardi esitteli On-The-Go (OTG) -standardin, joka esitteli Host Negotiation Protocol -protokollan, jonka avulla kaksi USB-laitetta voivat sopia siitä, kuka toimii isäntänä. Tämä on tarkoitettu ja rajoitettu yksittäisiin point-to-point-yhteyksiin, kuten matkapuhelimesta henkilökohtaiseen tietokoneeseen.

USB tukee "kuumaa" (plug'n'play) -yhteyttä dynaamisesti ladattujen ja lataamattomien ohjaimien kanssa. Käyttäjä yksinkertaisesti kytkee laitteen ja yhdistää sen väylään. Isäntä havaitsee yhteyden, pollaa äskettäin lisätyn laitteen ja lataa sopivan ohjaimen, joka osoittaa lataushetken tiimalasilla näytöllä (jos USB-laitteen ohjain on jo asennettu järjestelmään). Loppukäyttäjä ei välitä irtisanomisesta tai IRQ(keskeytykset) ja porttiosoitteet, eikä tietokoneen uudelleenkäynnistämisestä (uudelleenkäynnistystä ei vaadita). Kun käyttäjä on lopettanut USB-laitteen käytön, hän yksinkertaisesti poistaa sen (tai irrottaa kaapelin), isäntä havaitsee laitteen puuttumisen ja lataa ohjaimen automaattisesti.

SB-versio 1.1 tukee kahta nopeutta - täyden nopeuden tilaa nopeudella 12 Mbit/s ja hidasta tilaa nopeudella 1,5 Mbit/s. 1,5 Mbit/s tila on hitaampi ja vähemmän herkkä EMI:lle (häiriöille), mikä alentaa ferriittihelmien kustannuksia ja alentaa komponenttien laatuvaatimuksia.

Täysnopeusväyläkaapeli on kierretty parikaapeli, suojattu suojalla, ja sitä voidaan käyttää myös hidaskäyntiin. Vain miniminopeudella käytettävä kaapeli (esimerkiksi hiiren liittämiseen) voi olla mikä tahansa ja suojaamaton.

USB 2.0 -standardi ottaa käyttöön High Speed ​​​​-tilan, jonka tiedonsiirtonopeus on 480 Mbit/s.

Tiedonsiirto.

Isäntä aloittaa kaikki tiedonsiirrot rajapinnan kautta. Data välitetään pakettien muodossa. USB-liitäntä käyttää useita pakettityyppejä:

A) allekirjoita paketti (merkkipaketti) kuvaa tiedonsiirron tyypin ja suunnan, laiteosoitteen ja päätepisteen sarjanumeron (CT on USB-laitteen osoitteellinen osa); Ominaisuuspaketteja on useita tyyppejä: SISÄÄN, OUT, SOF, PERUSTAA;

B) tietopaketti (datapaketti) sisältää lähetetyt tiedot;

B) hyväksyntäpaketti (kädenpuristus paketti) on tarkoitettu raportoimaan tiedonsiirron tulokset; Koordinointipaketteja on useita tyyppejä: ACK, N.A.K., PILTTUU.

Tiedonsiirto USB:n kautta tapahtuu seuraavasti:

Päälaite generoi ensimmäisen paketin, ns. tokenin, kuvaamaan siirrettävän tiedon tyyppiä, siirtotoimintoa (luku tai kirjoitus), laitteen osoitetta ja päätepistettä. Seuraava tavallisesti lähetetään datapaketti, joka sisältää hyödyllistä tietoa, jota seuraa kättelypaketti, joka osoittaa, että data tai token vastaanotettiin onnistuneesti tai päätepiste on pysähtynyt tai ei ole käytettävissä vastaanottamaan dataa.

USB-standardin päätepisteet ovat tiedon lähteet ja nielut. Kaikkien laitteiden on tuettava päätepistettä 0. Tämä on päätepiste, joka hyväksyy kaikki ohjaus- ja tilapyynnöt laskennan aikana (käsittelijäpyyntö liitetyn laitteen tyypin määrittämiseksi) ja niin kauan kuin laite on toiminnassa väylällä.

Päätepisteitä, jotka on numeroitu 1:stä, käytetään käyttäjätietojen välittämiseen. Katsotaanpa pari esimerkkiä.

Laiteohjain lähettää päälaitteen päätepisteeseen EP1. Koska Tämä laite on isäntä, sitten tiedot siirtyvät OUT-puskuriin EP1. Tässä tapauksessa lähetetään OUT-merkki, joka osoittaa, että tiedot ovat valmiita lähetettäväksi. Tämän tokenin vastaanotettuaan orjalaite voi lukea dataa OUT-puskurista.

Jos orjalaitteen on siirrettävä dataa isännälle, se sijoittaa sen IN-puskuriin. Tämä puskuri säilyttää tietoja, kunnes isäntä lähettää IN-tokenin, joka pyytää tietoja päätepisteestä. Kaikki päätepistepuskurit on nimetty suhteessa isäntäkoneeseen, ts. Orjalaitteen lähtöpuskuria kutsutaan IN, koska se on päälaitteen syöttöpuskuri.

Tiedonsiirto päätepisteestä toiseen tapahtuu virtojen kautta. Flow – Looginen yhteys isännän ja päätepisteiden välillä.

Virroilla on myös joukko parametreja, kuten lähetystyyppi (Control, Bulk, Iso tai Interrupt), datavirran suunta ja enimmäispakettien/puskurin koot.

Esimerkiksi oletusvirta on kaksisuuntainen virta, joka koostuu IN-päätepisteestä 0 ja OUT-päätepisteestä 0 siirtotyypin ohjauksella.

USB määrittelee kaksi putkityyppiä

A) Virtausputket niillä ei ole ennalta määritettyä USB-muotoa, joten voit lähettää minkä tahansa tyyppistä dataa stream-putken kautta ja palauttaa tiedot toisessa päässä. Datavirrat ovat peräkkäisiä ja niillä on ennalta määrätty suunta - IN tai OUT. Virtausputket tukevat bulkki-, isokronisia ja keskeytyssiirtotyyppejä. Virtausputkia voidaan ohjata joko isännästä tai laitteesta.

B) Viestiputket on ennalta määritetty USB-muoto. Ne ovat isäntäohjattuja, ja ne alkavat isännän lähettämästä pyynnöstä. Tiedot lähetetään pyynnössä määritettyyn haluttuun suuntaan. Siten sanomaputket mahdollistavat tiedon siirron molempiin suuntiin, mutta tukevat vain ohjauksen siirtoa.

USB-standardi kuvaa neljää tiedonsiirtotyyppiä:

A) Ohjaa edelleenlähetystä (ohjauksen siirto) käytetään laitteen määrittämiseen sekä muihin laitekohtaisiin tarkoituksiin.

B) Suoratoisto (joukkosiirto) käytetään suhteellisen suuren tiedon siirtämiseen.

B) Keskeytä edelleenlähetys (keskeytä siirto) käytetään siirtämään suhteellisen pieni määrä tietoa, jolle sen oikea-aikainen lähettäminen on tärkeää. Sillä on rajoitettu kesto ja korkeampi prioriteetti muihin siirtotyyppeihin verrattuna.

D) Isokroninen edelleenlähetys (isokroninen siirto) kutsutaan myös reaaliaikaiseksi suoratoistoksi. Tällaisessa siirrossa välitettävä tieto vaatii reaaliaikaista mittakaavaa sen luomisen, lähetyksen ja vastaanoton aikana.

Suoratoisto siirrot jolle on tunnusomaista taattu virheetön tiedonsiirto isännän ja toiminnon välillä havaitsemalla virheet lähetyksen aikana ja pyytämällä tietoja uudelleen. Kun isäntä on valmis vastaanottamaan tietoja funktiosta, se lähettää funktiolle lippupaketin SISÄÄN-muovipussi. Vastauksena tähän tiedonsiirtovaiheessa oleva toiminto lähettää datapaketin isännälle tai, jos se

Arvoilla 10 ohm - 1 MOhm);

  • liitäntäjohdot (esimerkiksi tämä on hyvä sarja);
  • henkilökohtainen tietokone Arduino IDE -kehitysympäristöllä.
  • 1 Sarjan kuvaus SPI-liitäntä

    SPI - Serial Peripheral Interface tai "Serial Peripheral Interface" on pariliitoksen synkroninen tiedonsiirtoprotokolla päälaite Kanssa oheislaitteet (Slave). Päälaite on usein mikro-ohjain. Viestintä laitteiden välillä tapahtuu neljällä johdolla, minkä vuoksi SPI:tä kutsutaan joskus "nelijohtimisliitännäksi". Nämä ovat renkaat:

    Tiedonsiirtotiloja on neljä ( SPI_MODE0, SPI_MODE1, SPI_MODE2, SPI_MODE3), joka johtuu kellopulssien polariteetin yhdistelmästä (työskentelemme HIGH tai LOW tasolla), Kellon napaisuus, CPOL, ja kellopulssien vaihe (synkronointi kellopulssin nousevalla tai laskevalla reunalla), Kellovaihe, CPHA.

    Kuva selittää tämän taulukon.

    SPI-liitäntä tarjoaa useita vaihtoehtoja orjalaitteiden liittämiseen: riippumaton Ja ryöpytä. Kun se on liitetty itsenäisesti SPI-väylään, isäntälaite käyttää jokaista orjalaitetta erikseen. Kaskadiliitännällä orjalaitteet toimivat yksitellen, ikään kuin kaskadissa.


    Laiteliitäntätyypit käytettäväksi SPI-liitännän kautta: riippumaton ja kaskadi

    2 SPI-rajapinnan käyttöönotto Arduino-perhelevyillä

    Arduinossa SPI-liitäntäväylät sijaitsevat tietyissä porteissa. Jokaisella taululla on oma pinnitehtävänsä. Mukavuuden vuoksi johtopäätökset kopioidaan ja sijoitetaan myös erilliselle puolelle ICSP-liitin(Circuit Serial Programming -ohjelmassa piiriin kuuluvan laitteen ohjelmointi sarjaprotokollan avulla). Huomaa, että ICSP-liittimessä ei ole orjavalintanastaa - SS, koska oletetaan, että Arduinoa käytetään verkon päälaitteena. Mutta tarvittaessa voit määrittää minkä tahansa Arduinon digitaalisen nastan SS:ksi.

    Kuvassa näkyy vakionappien vastaavuus SPI-väyliin Arduino UNO:lle ja Nanolle.


    3 Kirjasto työhön SPI-liittymällä

    Arduinolle on kirjoitettu erityinen kirjasto, joka toteuttaa SPI-protokollan. Se liittyy näin: ohjelman alkuun lisäämme #sisällytä SPI.h.

    Aloita SPI-protokollan käyttö määrittämällä asetukset ja alustamalla protokolla ohjeiden mukaisesti SPI.beginTransaction(). Voit tehdä tämän yhdellä ohjeella: SPI.beginTransaction(SPISettings(14000000, MSBFIRST, SPI_MODE0))

    Tämä tarkoittaa, että alustamme SPI-protokollan 14 MHz:n taajuudella, tiedonsiirto tapahtuu alkaen MSB:stä (merkittävin bitti), SPI_MODE0-tilassa.

    Valitse alustuksen jälkeen orjalaite siirtämällä vastaava SS-nasta tilaan MATALA.

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

    Siirron jälkeen palaamme SS:n osavaltioon KORKEA.


    Protokollan kanssa työskentely päättyy komennolla SPI.endTransaction().

    On suositeltavaa minimoida SPI.beginTransaction()- ja SPI.endTransaction()-ohjeiden välinen siirtoaika, jotta vältytään ongelmien syntymiseltä, jos toinen laite yrittää aloittaa tiedonsiirron eri asetuksilla.

    4 Vaihtorekisterin yhdistäminen Arduinoon

    Tarkastellaan SPI-rajapinnan käytännön sovellusta. Sytytämme LEDit ohjaamalla 8-bittistä siirtorekisteriä SPI-väylän kautta. Otetaan yhteys Arduinoon vaihtorekisteri 74HC595. Yhdistämme LEDin, jonka nimellisarvo on 220 ohmia, jokaiseen 8 rekisterilähtöön rajoittavan vastuksen kautta. Kaavio on esitetty kuvassa.


    5 Luonnos siirtorekisterin ohjaamiseen SPI-liitännän kautta

    Kirjoitetaan tällainen luonnos.

    #sisältää const int pinSelect = 8; // rekisteröidy valitse pin void setup() ( SPI.begin(); // SPI-rajapinnan alustaminen pinMode(pinSelect, OUTPUT); // digitalWrite(pinSelect, LOW); // valitse orjalaitteet (rekisteröinti) SPI.transfer(0); // tyhjentää rekisterin sisällön digitalWrite(pinSelect, HIGH); // lähetyksen loppu Serial.begin(9600); } void loop() ( for (int i=0; i )

    Ensin yhdistetään SPI-kirjasto ja alustetaan SPI-liitäntä. Määritellään nasta 8 SS-orjavalintanastaksi. Tyhjennetään siirtorekisteri lähettämällä siihen arvo "0". Alusta sarjaportti.

    Jos haluat sytyttää tietyn LEDin siirtorekisterin avulla, sinun on lisättävä sen tuloon 8-bittinen numero. Esimerkiksi, jotta ensimmäinen LED-valo syttyy, annamme binääriluvun 00000001, toiselle - 00000010, kolmannelle - 00000100 jne. Nämä binääriluvut, kun ne muunnetaan desimaalilukujärjestelmään, muodostavat seuraavan sekvenssin: 1, 2, 4, 8, 16, 32, 64, 128 ja ovat kahden potenssit 0-7.

    Näin ollen syklissä loop() Ledien lukumäärän perusteella laskemme uudelleen 0:sta 7:ään. Toiminto pow (kanta, tutkinto) Nostaa 2 silmukkalaskurin tehoon. Mikro-ohjaimet eivät toimi kovin tarkasti "double"-tyyppisten lukujen kanssa, joten käytämme pyöristystoimintoa tuloksen muuntamiseen kokonaisluvuksi pyöristää(). Ja siirrämme tuloksena olevan luvun siirtorekisteriin. Selvyyden vuoksi sarjaporttimonitori näyttää tämän toiminnon aikana saadut arvot: Yksikkö "juoksee" purkausten läpi - LED-valot syttyvät aaltoina.

    6 "Juokseva aalto" LEDeistä

    LED-valot syttyvät yksi kerrallaan ja havaitsemme juoksevan valon "aallon". LEDejä ohjataan siirtorekisterillä, johon liitimme SPI-liitännän kautta. Tämän seurauksena vain 3 Arduino-nastaa käytetään ohjaamaan 8 LEDiä. Jos yhdistäisimme LEDit suoraan Arduinon digitaalisiin portteihin, meidän on käytettävä erillistä porttia jokaiselle LEDille.

    Tutkimme yksinkertaisinta esimerkkiä Arduinon työskentelystä SPI-väylän kanssa. Tarkastelemme yksityiskohtaisemmin useiden vuororekisterien toimintaa itsenäisillä ja kaskadoiduilla yhteyksillä erillisessä artikkelissa.