Mainos
Yritän tänään opettaa sinulle vähän Shift-rekistereistä. Nämä ovat melko tärkeä osa Arduino-ohjelmointia, pääasiassa siksi, että ne lisäävät käytettävien ulostulojen lukumäärää vastineeksi vain 3 ohjaustapille. Voit myös daisy-ketjunsiirtorekistereitä yhdessä saadaksesi vielä enemmän tuloksia.
Tämä on kuitenkin merkittävä vaikeuksissa oleva hyppy aikaisemmista opetusohjelmista, ja ehdotan, että sinulla on todella hyvä ymmärtäminen edellisestä materiaalista (linkit tämän artikkelin lopussa) sekä ymmärrys binaarin perusteet Mikä on binaari? [Teknologia selitetty]Koska binaari on niin ehdottoman välttämätöntä tietokoneiden olemassaololle, vaikuttaa outolta, että emme ole koskaan käsitelleet aihetta aiemmin - joten tänään ajattelin antaa lyhyen yleiskuvan siitä, mitä binaareja ... Lue lisää jonka kirjoitin viime kerralla.
Mikä on vaihtorekisteri?
Lähtösiirtorekisteri, teknisesti ottaen, vastaanottaa dataa sarjassa ja lähettää sen rinnakkain. Käytännössä tämä tarkoittaa, että voimme lähettää nopeasti joukon lähtökomentoja sirulle, käskeä sen aktivoimaan ja lähdöt lähetetään asianmukaisille nastaille. Sen sijaan, että iteroisimme jokaisen nastan läpi, lähetämme vain vaadittavan tuloksen kaikille nastaille kerrallaan yhtenä tavuna tai useampana informaationa.
Jos se auttaa sinua ymmärtämään, voit ajatella siirtorekisteriä digitaalilähtöjen ryhmänä, mutta voimme ohittaa tavalliset digitalWrite-komennot ja lähettää yksinkertaisesti sarjan bittejä niiden kytkemiseksi päälle tai vinossa.
Kuinka se toimii?
Käytettäväsi siirtorekisteri - 74HC595N, joka sisältyy Oomlout-aloituspakettiin - tarvitsee vain 3 ohjaustappia. Ensimmäinen on kello - sinun ei tarvitse huolehtia tästä liikaa, kun Arduino-sarjakirjastokirja hallitsee se - mutta kello on pohjimmiltaan vain on / off-sähköinen pulssi, joka asettaa datasignaalin vauhdin.
Lukitustappia käytetään kertomaan siirtorekisteriin, milloin sen pitäisi kytkeä ulostulonsa päälle ja pois päältä juuri lähettämien bittien mukaisesti - ts. Lukitsemalla ne paikalleen.
Lopuksi, datatappi on paikka, johon lähetimme varsinaisen sarjadatan biteillä, jotta määritetään siirtorekisterin lähtöjen päälle / pois-tila.
Koko prosessi voidaan kuvata 4 vaiheessa:
- Aseta vaihtorekisterin ensimmäisen ulostulotapin datatappi korkealle tai matalalle.
- Työnnä kelloa siirtääksesi tietoja rekisteriin.
- Jatka datan asettamista ja kellon sykettämistä, kunnes olet asettanut vaadittavan tilan kaikille lähtötapeille.
- Aktivoi lähtöjärjestys vetämällä salvanastainta.
Toteutus
Tarvitset seuraavat komponentit tähän projektiin:
- 7HC595N-siirtorekisterin siru
- 8 LEDiä ja asianmukaiset vastukset tai mikä tahansa, mihin haluat syöttää
- Tavallinen leipälauta, liittimet ja perus Arduino
Jos sinulla on Oomlout-aloituspakkaus, voit ladata leipälevyn asettelun täältä.
Tässä kokoonpanovideo:
Levyn asettelu:
Ja kokoontunut versio:
Olen muokannut Ooolmoutin tarjoamaa alkuperäistä koodia, mutta jos haluat kokeilla sitä, sen voi ladata kokonaan täältä. Koodin selitys on mukana, joten kopioi ja liitä koko asia alhaalta tai pastebin lukea koodin selitys.
/ * * | Vaihtorekisteriohje, joka perustuu | * | Arduino-kokeilusarja CIRC-05 | * |.: 8 lisävaloa:. (74HC595 -siirtorekisteri) | * * | Muokattu James @ MakeUseOf.com | * * / // Pin-määritelmät. // 7HC595N: llä on kolme nastaa. int data = 2; // missä lähetämme bitit ohjaamaan lähdöksiä int kello = 3; // pitää tiedot synkronoituna. int salpa = 4; // kertoo siirtorekisterin, milloin aktivoida lähtösekvenssin tyhjiön asetus () {// aseta kolme ohjaustappia antamaan pinMode (data, OUTPUT); pinMode (kello, OUTPUT); pinMode (salpa, OUTPUT); Serial.begin (9600); // joten voimme lähettää virhesanomat sarjamonitoriin. } tyhjä silmukka () {outputBytes (); // perustulos, joka kirjoittaa 8-bittisiä osoittamaan, kuinka siirtorekisteri toimii. //outputIntegers(); // lähettää kokonaisluvun datana tavujen sijasta laskeen tosiasiallisesti binäärinä. } void outputIntegers () {varten (int i = 0; i <256; i ++) {digitalWrite (salpa, LOW); Serial.println (i); // Debug, lähdön lähettäminen sarjamonitoriin shiftOut (data, kello, MSBFIRST, i); digitalWrite (salpa, HIGH); viive (100); }} tyhjiä lähtöbittejä () {/ * tavua tai 8-bittiä edustaa B, jota seuraa 8 0 tai 1 s. Pidä tässä tapauksessa tätä kuin ryhmää, jota käytämme 8 LEDin ohjaamiseen. Tässä olen alkanut tavuarvoksi 00000001 * / tavu dataValues = B00000001; // Muuta tätä säätääksesi aloituskuviota / * For-silmukassa aloitamme vetämällä salpaa alhaalle käyttämällä shiftOut Arduino -toimintoa puhu vuororekisteriin lähettämällä sille datatavu meidän arvot, jotka edustavat LEDien tilaa, vedä sitten salpaa korkealle lukitaksesi ne paikka. Viimeinkin, siirrämme bittejä yhdestä paikasta vasemmalle, mikä tarkoittaa seuraavaa iterointia, että seuraava merkkivalo syttyy sarjassa. Tarkasta sarjamonitori nähdäksesi tarkan lähetettävän binääriarvon. * / varten (int i = 0; i <8; i ++) {digitalWrite (salpa, LOW); Serial.println (dataValues, BIN); // Debug, lähdön lähettäminen sarjamonitoriin shiftOut (data, kello, MSBFIRST, dataValues); digitalWrite (salpa, HIGH); dataValues = dataValues << 1; // Siirrä bittejä yksi paikka vasemmalle - vaihda kohtaan >> säätääksesi viiveviivettä (100); } }
Bittisiirto (OutputBytes-toiminto)
Ensimmäisessä silmukkaesimerkissä - outputBytes () - koodi käyttää 8-bittistä sekvenssiä (tavu), jota se sitten siirtää vasemmalle silmukan jokaiselle iteraatiolle. On tärkeää huomata, että jos siirryt pidemmälle kuin mahdollista, terä yksinkertaisesti katoaa.
Bittisiirto tapahtuu käyttämällä << tai >>, jota seuraa niiden bittien lukumäärä, joita haluat siirtää.
Katso seuraava esimerkki ja varmista, että ymmärrät mitä tapahtuu:
tavu val = B00011010. val = val << 3 // B11010000. val = val << 2 // B01000000, hävisimme ne muut bitit! val = val >> 5 // B00000010.
Kokonaislukujen lähettäminen sen sijaan (OutputIntegers-toiminto)
Jos lähetät kokonaisen numeron siirtorekisteriin tavun sijasta, se muuntaa luvun yksinkertaisesti binaariseksi tavujonoksi. Tässä toiminnossa (kommentoimaton silmukka ja lataaksesi nähdäksesi vaikutuksen) meillä on for-silmukka, joka laskee välillä 0-255 (suurin kokonaisluku, jota voimme edustaa yhdellä tavulla), ja lähettää sen sen sijaan. Se lasketaan periaatteessa binaarina, joten järjestys saattaa tuntua hiukan satunnaiselta, ellei LEDit ole asetettu pitkälle riville.
Jos esimerkiksi luet binääristä selostettua artikkelia, tiedät, että numero 44 esitetään numerolla 00101100, joten merkkivalot 3,5,6 alkavat syttyä siinä järjestyskohdassa.
Daisy ketjuttaa useampaa kuin yhtä vaihtorekisteriä
Shift-rekistereiden huomattava asia on, että jos niille annetaan enemmän kuin 8 bittiä tietoa (tai kuinka suuri niiden rekisteri on), ne siirtävät muut ylimääräiset bitit uudelleen ulos. Tämä tarkoittaa, että voit yhdistää sarjan niistä yhteen, työntää yhden pitkän bittiketjun sisään ja jakaa sen jokaiselle rekisterille erikseen, ilman erillistä koodausta teidän puolellanne.
Vaikka emme tarkenna prosessia tai kaavioita täällä, jos sinulla on useampi kuin yksi vuororekisteri, voit kokeilla projektia Arduinon viralliselta sivustolta täältä.
Muut sarjan artikkelit:
- Mikä on Arduino ja mitä voit tehdä sen kanssa Mikä on Arduino ja mitä voit tehdä sen kanssa?Arduino on huomattava pieni elektroniikkalaite, mutta jos et ole koskaan käyttänyt sitä aikaisemmin, niin mitä ne ovat ja mitä voit tehdä yhdellä? Lue lisää ?
- Mikä on Arduino-aloituspakkaus ja mitä se sisältää? Mitä sisältyy Arduino-aloituspakettiin? [MakeUseOf selittää]Olen aiemmin esitellyt Arduinon avoimen lähdekoodin laitteiston täällä MakeUseOfilla, mutta tarvitset muutakin kuin pelkkää Arduinoa rakentaaksesi siitä jotain ja aloittaaksesi käytännössä. Arduinon "aloitussarjat" ovat ... Lue lisää
- Lisää hienoja komponentteja, joita voit ostaa aloituspakkauksesi mukana 8 lisää hienoja komponentteja Arduino-projekteihisiJoten mietitkö Arduino-aloituspakkauksen hankkimista, mutta ihmettelet, riittävätkö jotkut perusmerkkivalot ja vastukset pitämään sinut kiireisenä viikonloppuna? Luultavasti ei. Tässä on vielä 8 ... Lue lisää
- Aloittaminen Arduino-aloituspakkauksellasi? Ajurien asentaminen ja paneelin ja portin asentaminen Arduino Starter Kit -sovelluksen käytön aloittaminen - Ajurien asentaminen ja hallituksen ja portin asentaminenJoten olet ostanut itsellesi Arduino-aloituspakkauksen ja mahdollisesti muita satunnaisia hienoja komponentteja - mitä nyt? Kuinka itse aloitat tämän Arduino-asian ohjelmoinnin? Kuinka asennat sen ... Lue lisää
- Fritzing, ilmainen työkalu piirikaavioiden piirtämiseen Fritzing - loistava työkalu elektroniikkaprojektien luonnostamiseen [Cross Platform]Huolimatta siitä, että kuulosti alkopopilla, Fritzing on todella uskomaton pieni osa ilmaisia ohjelmistoja, joiden avulla voit luoda piiri- ja komponenttikaaviot käytettäväksi pikaprototyyppisten elektroniikkalevyjen, kuten fantastisen avoimen lähdekoodin, kanssa Työläs ... Lue lisää
- Tarkempi kuvaus Arduino-sovelluksen rakenteesta ja esimerkki Blink-ohjelmasta Ensimmäiset vaiheet Arduinon kanssa: Piirilevyn ja ohjelman rakenteen tarkempi tarkasteluViime kerralla jätin sinun määrittäessäsi Arduinon toimimaan Macin tai Windowsin kanssa ja lataamalla yksinkertaisen testisovelluksen, joka vilkkoi ledin merkkivaloa. Tänään aion selittää koodin ... Lue lisää
- Arduino Xmas -puiden valoprojekti Arduino-projekti: Kuinka tehdä hämärät jouluvalokoristeetTämä on seuraava osa oppimistamme Arduino -sarjassa, ja tällä kertaa opimme ja käytämme Arraysia pienen joulukuusen koristeluun erilaisilla vilkkuvilla sekvensseillä. Tämä olisi ... Lue lisää (AKA oppii taulukoita)
- Mikä on binaari? Mikä on binaari? [Teknologia selitetty]Koska binaari on niin ehdottoman välttämätöntä tietokoneiden olemassaololle, vaikuttaa outolta, että emme ole koskaan käsitelleet aihetta aiemmin - joten tänään ajattelin antaa lyhyen yleiskuvan siitä, mitä binaareja ... Lue lisää
Se on sikäli kuin menemme muutosrekisteriin tänään, koska mielestäni olemme kattaneet paljon. Kuten koskaan, rohkaisin sinua pelaamaan koodia ja säätämään sitä. Voit kysyä mielestäsi kommentteihin liittyviä kysymyksiä tai jopa jakaa linkin mahtavaan muutosrekisteripohjaiseen projektiisi.
Jamesilla on teknisen älykunnan kandidaatin tutkinto ja hän on CompTIA A + ja Network + -sertifioitu. Hän on MakeUseOfin johtava kehittäjä ja viettää vapaa-aikansa pelaamalla VR-paintballia ja lautapelejä. Hän on rakennettu tietokoneita lapsuudestaan asti.