Oglas

programiranje arduinoDanes vas bom poskušal naučiti nekaj o registrih Shift. To je precej pomemben del programiranja Arduino, v bistvu zato, ker širijo število izhodov, ki jih lahko uporabite, v zameno za samo 3 krmilne zatiče. Prav tako lahko skupaj sestavite registre preusmeritve na verigi, da dosežete še več rezultatov.

To je pomemben skok težav v primerjavi s prejšnjimi vadnicami in močno vam predlagam, da imate res dobro razumevanje prejšnjega gradiva (povezave na koncu tega članka), pa tudi razumevanje the osnove binarnosti Kaj je dvojiško? [Pojasnjena tehnologija]Glede na to, da je binarnost tako bistvenega pomena za obstoj računalnikov, se zdi čudno, da se še nikoli nismo lotili teme - zato bi danes mislil, da bom dal kratek pregled kaj binarni ... Preberi več ki sem jih napisal zadnjič.

Kaj je Shift register?

Register izhodnih premikov tehnično gledano prejema podatke zaporedno in jih vzporedno odda. V praksi to pomeni, da lahko na čip hitro pošljemo kup izhodnih ukazov, mu povemo, da se aktivira, in izhodi bodo poslani ustreznim zatičem. Namesto ponavljanja skozi vsak pin preprosto pošljemo izhod, potreben za vse zatiče naenkrat, kot en bajt ali več informacij.

instagram viewer

Če vam pomaga razumeti, si lahko register premikov omislite kot "niz" digitalnih izhodov, lahko pa preskočimo običajne ukaze digitalWrite in preprosto pošljemo niz bitov, da jih vklopimo ali izklopljeno.

Kako deluje?

Register premikov, ki ga bomo uporabljali - 74HC595N, ki je vključen v zagon Oomlout, potrebuje samo 3 krmilne zatiče. Prva je ura - o tem vas ne skrbi preveč, kot nadzorujejo serijske knjižnice Arduino je - toda ura je v bistvu le električni impulz za vklop / izklop, ki določa tempo podatkovnega signala.

Zaporni zatič se uporablja za povezovanje registra premikov, kdaj naj vklopi in izklopi svoje izhode glede na bite, ki smo jih pravkar poslali - tj., Da jih zaskoči na svoje mesto.

Končno je podatkovni pin tam, kjer smo poslali dejanske serijske podatke z bitji, da določimo stanje vklopa / izklopa izhodov registra premikov.

Celoten postopek lahko opišemo v 4 korakih:

  1. Za prvi izhodni pin v registru zamikov nastavite podatkovni pin na visoko ali nizko.
  2. Potisnite uro, da podatke preusmerite v register.
  3. Nadaljujte z nastavitvijo podatkov in utripajte uro, dokler ne nastavite želenega stanja za vse izhodne zatiče.
  4. Potisnite zatič, da aktivirate izhodno zaporedje.

Izvajanje

Za ta projekt potrebujete naslednje komponente:

  • 7HC595N čip registrskega premika
  • 8 LED-diod in ustreznih uporov ali vsega, kar želite oddati
  • Običajna plošča, konektorji in osnovni Arduino

Če imate na voljo komplet za zagon Oomlout, postavitev plošče lahko prenesete od tukaj.

Tukaj je video o montaži:

Postavitev plošče:

programiranje arduino

In moja sestavljena različica:

Arduino programiranje - igranje z registri Shift (a.k.a še več LED) sestavljeno vadnico registra premikov

Spremenil sem prvotno kodo, ki jo je ponudil Ooolmout, če pa jo želite poskusiti, jo lahko v celoti prenesete tukaj. Vključena je razlaga kode, zato kopirajte in prilepite vso stvar od spodaj ali pastebin prebrati razlago kode.

/ * * | Vadnica za register Shift, ki temelji na | * | Arduino eksperimentalni komplet CIRC-05 | * |.: 8 Več LED:. (Register premikov 74HC595) | * * | Spremeni James @ MakeUseOf.com | * * / // Pin Definitions. // 7HC595N ima tri zatiče. int podatki = 2; // kamor pošljemo bite za krmiljenje izhodov int clock = 3; // hrani podatke v sinhronizaciji. int zapah = 4; // pove registru premikov, kdaj naj aktivira nastavitev ničnosti izhodnega zaporedja () {// nastavite tri kontrolne zatiče na izhod pinMode (podatki, IZHOD); pinMode (ura, IZHOD); pinMode (zapah, IZHOD); Serial.begin (9600); // tako lahko pošiljamo sporočila za odpravljanje napak na serijski monitor. } void loop () {outputBytes (); // naš osnovni izhod, ki napiše 8-bitne, da prikaže, kako deluje register preusmeritve. //outputIntegers(); // pošlje celo število kot podatke namesto bajtov in učinkovito šteje v binarnih formatih. } void outputIntegers () {for (int i = 0; i <256; i ++) {digitalWrite (zapah, LOW); Serial.println (i); // Odpravljanje napak, pošiljanje izhodov na serijski monitor shiftOut (podatki, ura, MSBFIRST, i); digitalWrite (zapah, HIGH); zamuda (100); }} void outputBytes () {/ * Bajti ali 8-bitni predstavljeni z B, ki mu sledi 8 0 ali 1s. V tem primeru menite, da je to podobno matriki, ki jo bomo uporabili za nadzor 8 LED. Tu sem začel vrednost bajta kot 00000001 * / byte dataValues ​​= B00000001; // spremenite to, da prilagodite začetni vzorec / * V zanki for foruma začnemo s potegom zapaha nizko, s funkcijo shiftOut Arduino na pogovorite se z registrom premikov in mu pošljete naš bajt podatkovValues, ki predstavljajo stanje LED, nato povlecite zapah visoko, da jih zaklenete v kraj. Na koncu premaknemo bite za eno mesto v levo, kar pomeni, da bo naslednja iteracija vklopila naslednjo LED v seriji. Če želite videti natančno poslano binarno vrednost, preverite serijski monitor. * / for (int i = 0; i <8; i ++) {digitalWrite (zapah, LOW); Serial.println (dataValues, BIN); // Odpravljanje napak, pošiljanje izhodov na serijski monitor shiftOut (podatki, ura, MSBFIRST, dataValues); digitalWrite (zapah, HIGH); dataValues ​​= dataValues ​​<< 1; // Bite prestavite za eno mesto v levo - spremenite v >>, da prilagodite zakasnitev smeri (100); } }

Bit-Shift (funkcija OutputBytes)

V prvem primeru zanke - outputBytes () - koda uporablja 8-bitno zaporedje (bajt), ki ga nato premakne za vsako iteracijo zanke v levo. Pomembno je upoštevati, da če se premaknete dlje, kot je mogoče, se bit preprosto izgubi.

Prestavljanje bit se izvede s pomočjo << ali >>, ki mu sledi število bitov, za katere želite prestaviti.

Oglejte si naslednji primer in se prepričajte, da razumete, kaj se dogaja:

bajt val = B00011010. val = val << 3 // B11010000. val = val << 2 // B01000000, izgubili smo te druge bite! val = val >> 5 // B00000010. 

Namesto tega pošiljanje celih števil (funkcija OutputIntegers)

Če namesto bajtov pošljete celotno številko v register premikov, bo preprosto pretvoril številko v dvosmerno zaporedje bajtov. V tej funkciji (komentiranje v zanki in nalaganje za prikaz učinka) imamo zanko, ki šteje od 0-255 (najvišje celo število, ki ga lahko predstavljamo z enim bajtom), in nam namesto tega pošlje. V bistvu šteje v binarni obliki, zato se lahko zaporedje zdi malo naključno, razen če so vaše LED diode postavljene v dolgo vrstico.

Če na primer preberete binarno razložen članek, boste vedeli, da bo številka 44 predstavljena kot 00101100, zato bodo na tej točki v zaporedju zasvetile LED 3,5,6.

Programiranje Arduino - igranje z binarnimi registri (a.k.a še več LED) 44

Daisy Verižni več kot en premik

Izjemno pri šifrantskih registrih je, da če jim damo več kot 8-bitne podatke (ali kolikor je velik njihov register), bodo spet premaknili ostale dodatne bite. To pomeni, da lahko niz njih povežete skupaj, potisnete v eno dolgo verigo bitov in jih razdelite vsakemu registru posebej, vse pa brez dodatnega kodiranja.

Čeprav tukaj postopka ali shem ne bomo podrobno opisovali, če imate več kot en izmenski register, lahko poskusite projekt na uradni strani Arduino tukaj.

Drugi članki v seriji:

  • Kaj je Arduino in kaj lahko narediš s tem Kaj je Arduino in kaj lahko storite z njim?Arduino je izjemna majhna elektronska naprava, če pa še nikoli niste uporabljali, kaj točno so, in kaj lahko storite z eno? Preberi več ?
  • Kaj je Arduino zagon in kaj vsebuje? Kaj je vključeno v zagon Arduino? [MakeUseOf pojasnjuje]Pred tem sem na MakeUseOf predstavil strojno opremo z odprto kodo Arduino, vendar boste potrebovali več kot le dejanski Arduino, da iz tega nekaj sestavite in dejansko začnete. Arduino "zaganjalni kompleti" so ... Preberi več
  • Več kul sestavnih delov, ki jih lahko kupite skupaj s svojim zagonom Še več kul komponent za vaše Arduino projekteTorej razmišljate, da bi dobili komplet za zagon Arduino, a se sprašujete, ali bo nekaj osnovnih LED in uporov dovolj, da vas za konec tedna zasedejo? Verjetno ne. Tu je še 8 ... Preberi več
  • Kako začeti s svojim zagonom Arduino? Nameščanje gonilnikov in nastavitev plošče in vrat Uvod v računalnik za zagon Arduino - Namestitev gonilnikov in nastavitev plošče in vratTorej, kupili ste si starševski komplet Arduino in morda še kakšne naključne kul komponente - kaj zdaj? Kako pravzaprav začnete s programiranjem te Arduinove stvari? Kako jo nastavite ... Preberi več
  • Fritzing, brezplačno orodje za risanje diagramov vezja Fritzing - odlično orodje za izdelavo projektov elektronike [Cross Platform]Kljub temu da zveni kot alkohol, je Fritzing pravzaprav neverjeten košček brezplačne programske opreme, ki jo lahko uporabite za ustvarjanje diagrami vezja in sestavnih delov za uporabo s hitrimi prototipičnimi elektronskimi ploščami, kot je fantastična odprtokodna mreža Arduino ... Preberi več
  • Podrobnejši pogled na strukturo aplikacije Arduino in primer programa Blink Prvi koraki z Arduino: podrobnejši pogled na vezje in strukturo programaZadnjič sem vas pustil, da ste nastavili svoj Arduino za delo z Mac ali Windows in naložil preprosto testno aplikacijo, ki je utripala LED na vozilu. Danes bom razložil kodo ... Preberi več
  • Projekt luči za drevesa Arduino Xmas Arduino projekt: Kako narediti neokusen božični okraski lučiTo je naslednji del v naši seriji Arduino in tokrat bomo spoznali in uporabili Arrays za izdelavo majhnega okraska božičnega drevesa z različnimi utripajočimi zaporedji. To bi bilo ... Preberi več (AKA se uči o nizih)
  • Kaj je Binary? Kaj je dvojiško? [Pojasnjena tehnologija]Glede na to, da je binarnost tako bistvenega pomena za obstoj računalnikov, se zdi čudno, da se še nikoli nismo lotili teme - zato bi danes mislil, da bom dal kratek pregled kaj binarni ... Preberi več

To je toliko, kolikor bomo šli danes s spremembami registrov, saj mislim, da smo jih veliko pokrivali. Kot vedno bi vas spodbudil, da se igrate s kodo in ji prilagajate, in vas prosimo, da postavite kakršna koli vprašanja v komentarjih ali celo delite povezavo do svojega izjemnega projekta, ki temelji na seznamu sprememb.

James ima doktorat iz področja umetne inteligence in ima certifikat CompTIA A + in Network +. Je glavni razvijalec MakeUseOf in svoj prosti čas preživlja z igranjem VR paintball in družabnih iger. Z računalniki gradi že od malih nog.