Sisukord:

74HC164 vahetuste register ja teie Arduino: 9 sammu
74HC164 vahetuste register ja teie Arduino: 9 sammu

Video: 74HC164 vahetuste register ja teie Arduino: 9 sammu

Video: 74HC164 vahetuste register ja teie Arduino: 9 sammu
Video: LDmicro 18: GPS-будильник Ublox NEO-6M (программирование лестничной схемы ПЛК микроконтроллера с помощью LDmicro) 2024, November
Anonim
74HC164 vahetuste register ja teie Arduino
74HC164 vahetuste register ja teie Arduino
74HC164 vahetuste register ja teie Arduino
74HC164 vahetuste register ja teie Arduino

Nihkeregistrid on digitaalse loogika väga oluline osa, need toimivad liimina paralleel- ja jadamaailma vahel. Nad vähendavad juhtmete arvu, tihvtide kasutamist ja isegi aitavad teie protsessorilt koormust maha võtta, võimaldades nende andmeid salvestada. Neid on erineva suurusega, erinevate mudelite jaoks ja erinevate funktsioonide jaoks. Üks, mida ma täna arutan, on 74HC164 8 -bitine, paralleelselt väljastatav, lukustamata vahetustega register. Miks? Ühe jaoks on see üks põhilisemaid vahetusregistreid, mis muudab selle tundmaõppimise lihtsamaks, kuid see juhtus olema ainus, mis mul oli (lol!) See juhendab, kuidas see kiip töötab, kuidas seda ühendada ja ühendage see arduinoga, sealhulgas mõned visandid ja led -ahelad. Loodan, et teile kõigile meeldib!

Samm: mis on vahetuste registrid?

Niisiis, mis on vahetuste registrid?
Niisiis, mis on vahetuste registrid?

Nagu varem mainitud, on need kõik erineva maitsega ja mainisin ka, et kasutan 74HC164 8 -bitist, paralleelselt jadamata, lukustamata vahetustega registrit, mida see kõik tähendab?!? Esiteks, nimi 74-tähendab selle osa 74xx loogikaperekonnast ja kuna selle loogika järgi ei saa ta otseselt juhtida väga suurt voolu (16-20ma kogu kiibi kohta on tavaline), siis edastab see ainult signaale, kuid see ei tähenda see signaal ei lähe transistorile, mis võib lülitada suuremat voolukoormust. HC tähendab selle kiiret CMOS -seadet, saate selle kohta lugeda allolevalt lingilt, kuid mida peate põhimõtteliselt teadma, on see, et see on madal toiteallikas ja töötab 2–5 volti (nii et kui kasutate 3,3 -voldist arduinot, on see korras) Samuti võib see töötada korralikult suurel kiirusel, selle kiibi tüüpiline kiirus on 78 MHz, kuid võite minna sama aeglaselt või sama kiiresti (kuni see hakkab lolliks minema) nagu soovite Vahetusregister koosneb flip -flop -ahelatest, flip -flop on 1 -bitine mälu, see üks ha s 8 (või 1 bait mälu). Kuna see on mälu, siis kui te ei pea registrit värskendama, võite lihtsalt selle "rääkimise" lõpetada ja see jääb olekusse, mille te selle jätsite, kuni te sellega uuesti räägite või toite taastate. muud 7400 loogikaseeria nihkeregistrid võivad paralleelselt välja ulatuda kuni 16 -bitise jadana. See tähendab, et teie arduino saadab selle andmed järjestikku (sisse ja välja lülitatud impulsid üksteise järel) ja nihkeregister paigutab iga biti õigele väljundpoldile. Selle mudeli juhtimiseks on vaja ainult 2 juhtmest, nii et saate kasutada arduino 2 digitaalset kontakti ja murda need 2 kuni 8 digitaalsest väljundist mõned teised mudelid on jadaväljundiga paralleelsed, nad teevad sama asja, kuid sisendina arduinole (näiteks NES mängupult) mitte lukustatud See võib vajadusel selle kiibi allakäik olla. Kuna andmed sisenevad jadaregistrisse nihkeregistrisse, kuvatakse need esimesel väljundpoldil, kui kellaimpulss siseneb, liigub esimene bit üle 1 koha, luues väljunditele kerimisefekti, näiteks väljundites kuvatakse 00000001 kui räägite teiste loogikaseadmetega, kes jagavad sama kella ja ei oota seda, võib see põhjustada probleeme. Lukustatud vahetustega registritel on täiendav mälu, nii et kui andmed on registrisse sisestatud, saate lüliti ümber pöörata ja väljundeid näidata, kuid see lisab veel ühe juhtme, tarkvara ja asjad, millega sammu pidada. Selle juhendi puhul me juhime LED -kuvareid, kerimisefekt toimub nii kiiresti, et te ei näe seda (välja arvatud siis, kui kiip esimest korda sisse lülitate) ja kui bait on nihkeregistris, pole enam kerimist enam. ja 16LED 4x4 punktmaatriks selle kiibi ja tarkvaraga arduino'is, kasutades ainult 2 digitaalset tihvti (+ toide ja maa)

Samm 2: Põhijuhtmed ja töö

Põhijuhtmed ja töö
Põhijuhtmed ja töö
Põhijuhtmed ja töö
Põhijuhtmed ja töö

Juhtmestik 74HC164 on 14 -kontaktiline kiip, sellel on 4 sisendnõela, 8 väljundpistikut, toide ja maandus, nii et alustame ülevalt. Pistikud 1 ja 2 on mõlemad jadasisendid, need on seadistatud loogilise JA väravana, mis tähendab, et mõlemad peavad olema loogiliselt kõrged (st 5 volti), et bitti nähaks 1 -na, madalat olekut (0 volti) mõlemal loetakse nulliks. Me ei vaja seda tegelikult ja seda on tarkvaraga lihtsam käsitleda, nii et valige üks ja ühendage see V+ -ga, nii et see oleks alati kõrge. Ma valin hüppaja kasutamiseks tihvtidest 1 kuni tihvtideni 14 (V+), kuna saate lihtsalt leivalaua hüppaja kiibi kohale tõsta. Üks allesjäänud jadasisend (minu skeemil tihvt 2) saab arduino digitaalse tihvti 2. 74HC164 tihvtid 3, 4, 5 ja 6 on väljundi esimesed 4 baiti Pin 7 ühendub maapinnaga Hüppamine paremale, tihvt 8 on kella nööpnõel, nii teab nihkeregister, et järgmine seeriabitt on lugemiseks valmis, see tuleks ühendada arduino digitaalse tihvtiga 3. Pin 9 tühjendab kogu registri korraga, kui see läheb madalaks, teil on võimalus seda kasutada, kuid selles uurimises pole midagi, nii et siduge see V+nööpnõeltega 10, 11 12 ja 13 on väljundpinni viimased 4 baiti. registrist (digitaalne tihvt 2 arduino peal) kõrge või madal, siis peate kella nööpnõela (digitaalne tihvt 3) nihutama madalalt kõrgele, nihkeregister loeb jadasisendi andmeid ja nihutab väljundnuppe 1, korrake 8 korda ja olete määranud kõik 8 väljundit. Seda saab teha käsitsi silmuste ja digitaalsete kirjutuste jaoks arduino IDE -s, kuid kuna t see on väga levinud riistvaratasu (SPI), millel on üks funktsioon, mis teeb seda teie jaoks. shiftOut (dataPin, clockPin, bitOrder, value) Ütle lihtsalt, kus andmed ja kellatahvlid on arduinoga ühendatud, millisel viisil andmeid saata ja mida saata, ning selle eest sinu eest hoolitsetakse (mugav)

3. samm: projektid

Projektid
Projektid

Okei, piisavalt loengut ja teooriat, laseme selle kiibiga mõnda lõbusat asja teha! Selles juhendis on 3 projekti, mida proovida, esimesed 2 on lihtsad ja neid saab hetkega lauale panna. Kolmas, 4x4 led -maatriks, nõuab led -juhtmestiku ehitamiseks rohkem aega ja mõtlemist. Osade loetelu Projekt 1: „2 -juhtmeline” bargraafiline LED -ekraanikontroller 1 * 74HC164 Vahetusregister 1 * jootmatu leivaplaat 1 * arduino või arduino ühilduv (5v) 1 * 330 oomi 1/4 vatti takisti 8 * tavalise väljundiga punased LED -id 12 * hüppajajuhtmed Projekt 2: '2 juhtmega' 7 segmendi kuvarkontroller 1 * 74HC164 Nihkeregister 1 * jootmatu leivaplaat1 * arduino või arduino ühilduv (5v) 1 * 330 oomi 1/4 vatti takisti 1 * ühine katoodseitsme segmendi ekraan 1/4 W takisti lülitage kõik LED -id korraga sisse nagu pidurituli)

Samm 4: Projekt 1 [pt 1]: '2 Wire' Bargraph LED -ekraani kontrolleri riistvara

Projekt 1 [pt 1]: '2 Wire' Bargraph LED -ekraanikontrolleri riistvara
Projekt 1 [pt 1]: '2 Wire' Bargraph LED -ekraanikontrolleri riistvara
Projekt 1 [pt 1]: '2 Wire' Bargraph LED -ekraanikontrolleri riistvara
Projekt 1 [pt 1]: '2 Wire' Bargraph LED -ekraanikontrolleri riistvara

Ühendage arduino ja vahetusregister vastavalt skeemile, mul on juba 10 segmendi ribareklaam, mis on valmis leivaplaadi kasutamiseks ja seda näete pildil, kuid sama saate teha ka üksikute LED -idega Ütlesin, et need ei ole draiveriseadmed, vaid loogikaseadmed, mille kaudu on võimalik läbida pisikest voolu. Selleks, et käivitada 8 LED -i, hoides vooluahela lihtsana ja mitte küpsetades vahetusregistrit, on vaja voolu üsna pisut piirata. LED -id on enne toiteallika ühendamist paralleelselt ühendatud ja neil on ühine alus (ühine katood). toitepinnas, nad peavad läbima 330 oomi takisti, piirates voolu koguhulka, mida kõik LED -id võiksid kasutada, kuni 10 mA (5 volti juures) see näide, et juhtida valgusdioode õigel voolul, peate sisestama transistori, kus nihkeregister saab sisse / välja lülitada suurema vooluallika (vt projekt 3) Vahetusregistri andmetihvti (tihvt 2) vajab ühendada arduino digitaalse tihvtiga # 2 Nihkeregistri kellatapp (tihvt 8) peab ühenduma arduino digitaalse tihvtiga # 3

Samm 5: Projekt 1 [pt 2]: '2 Wire' Bargraph LED -ekraanikontrolleri tarkvara

Projekt 1 [pt 2]: '2 Wire' Bargraph LED -ekraanikontrolleri tarkvara
Projekt 1 [pt 2]: '2 Wire' Bargraph LED -ekraanikontrolleri tarkvara
Projekt 1 [pt 2]: '2 Wire' Bargraph LED -ekraanikontrolleri tarkvara
Projekt 1 [pt 2]: '2 Wire' Bargraph LED -ekraanikontrolleri tarkvara

Näide 1: avage fail "_164_bas_ex.pde" arduino IDE sees, see on lihtne eskiis, mis võimaldab lihtsalt määrata või sisse lülitada LED -id tulpdiagrammil. Esimesed 2 rida määravad PIN -numbrid, mida kasutame andmete ja kella jaoks, kasuta #define'i täispiirangu asemel, siis on mul seda lihtsam meelde jätta ja ühele või teisele pole eeliseid, kui see on koostatud #define data sisse, määrab vahetuste registri ja tal pole muud teha. Tühjuse seadistusfunktsiooni sees seadistame kella ja andmestiku nööpnõelad OUTPUT -nööpnõelteks, seejärel saadame funktsiooni shiftOut abil andmed vahetusregistri tühimike seadistusse () {pinMode (clock, OUTPUT); // muuta kellapulk väljundiks pinMode (data, OUTPUT); // teha andmetihvtist väljundnihe (andmed, kell, LSBFIRST, B10101010); // selle binaarväärtuse saatmine nihkeregistrisse} Funktsioonis shiftOut näete selle argumenteandmed on andmenööpnõel, kell on kellanupp element B -st on kõige vähem märgatav bit Esiteks sisestatakse see kõigepealt, nii et see jõuab viimase väljundini, kui kõik 8 bitti on sisestatud, proovige erinevate mustrite sisse- ja väljalülitamiseks mängida erinevate väärtustega ning lõpuks tühi void loop (sest teil on seda vaja isegi siis, kui te seda ei kasuta) void loop () {} // praegu tühi tsükkel Näide 2: esimesed 8 rida on sama mis esimese näite 8 esimest rida, tegelikult ei muutu need ühegi teise projekti puhul, seega #define data 2 #define clock 3void setup () {pinMode (clock, OUTPUT); // muuta kellapulk väljundiks pinMode (data, OUTPUT); // andmestiku tegemine väljundiks Nüüd on tühimike seadistuses silmus 8, mis võtab tühja baidi ja nihutab korraga 1 bitti, alustades vasakpoolsemast bitist ja liikudes paremale. See on tagurpidi esimesest näitest, kus alustasime parempoolsest bitist ja töötasime vasakule, kuid funktsiooni MSBFIRST abil saadab nihkefunktsioon andmed õigesti. Lisame ka viivituse for -tsüklisse, nii et see aeglustub piisavalt, et see oleks nähtav. for (int i = 0; i <8; ++ i) // 0 - 7 jaoks {shiftOut (andmed, kell, MSBFIRST, 1 << i); // biti nihutab loogika kõrge (1) väärtuse i viivituse võrra (100); // viivita 100 ms või sa ei näe seda}} void loop () {} // tühi tsükkel laadige praegu skript üles ja nüüd peaksite nägema, et tulpdiagramm süttiks iga tuli ükshaaval

6. samm: projekt 2: „2 juhtmega” 7 segmendi kuvarkontroller

Projekt 2: „2 juhtmega” 7 segmendi ekraanikontroller
Projekt 2: „2 juhtmega” 7 segmendi ekraanikontroller
Projekt 2: „2 juhtmega” 7 segmendi ekraanikontroller
Projekt 2: „2 juhtmega” 7 segmendi ekraanikontroller

Vaadake oma 7 -segmendilise ekraani pinouti (mul oli ainult kahekordne, kuid kasutasin ainult poolt) ja kasutage allolevat joonist, et ühendada iga segment nihkeregistri õige bitiga 1 = pin 3 bit 2 = pin 4 bit 3 = pin 5 bit 4 = tihvt 6 -bitine 5 = tihvt 10 -bitine 6 = tihvt 11 -bitine 7 = tihvt 12 -bitine 8 = tihvt 13 (kui soovite kasutada komakohta) Ja ekraani katood läbi 330 oomi takisti ja toiteallika avamiseks avage seitse_seg_demo.pde arduino IDE -s Esmalt näete, kus me määratleme andmed ja kella nööpnõelad #define data 2 #define clock 3 Järgmisena seadistame kõik märgimustrid binaarseks, see on üsna lihtne, vaadake allolevat joonist, kui vajate keskmist segmenti tippige üks, järgmisena vajate ülemist segmenti; kui nii, siis tippige teist, jätkake seda seni, kuni katate kõik 8 segmenti, pange tähele, et mu parempoolne bit (bit 8) on alati 0, seepärast, et ma ei lülita kunagi kümnendkohti sisse punkt. bait null = B01111110; bait üks = B00000110; kaks baiti = B11011010; kolm baiti = B11010110; neli baiti = B10100110; bait viis = B11110100; bait kuus = B11111100; seitse baiti = B01000110; kaheksa baiti = B111111101; bait üheksa järgmisena tühimiku seadistuses seadsime oma andmed ja kellapoldid väljunditeks void setup () {pinMode (kell, OUTPUT); // muuta kellapulk väljundiks pinMode (data, OUTPUT); // muutke andmestik väljundiks 0-9 ja korrake igavesti. void loop () {shiftOut (andmed, kell, LSBFIRST, null); viivitus (500); shiftOut (andmed, kell, LSBFIRST, üks); viivitus (500); shiftOut (andmed, kell, LSBFIRST, kaks); viivitus (500); shiftOut (andmed, kell, LSBFIRST, kolm); viivitus (500); shiftOut (andmed, kell, LSBFIRST, neli); viivitus (500); shiftOut (andmed, kell, LSBFIRST, viis); viivitus (500); shiftOut (andmed, kell, LSBFIRST, kuus); viivitus (500); shiftOut (andmed, kell, LSBFIRST, seitse); viivitus (500); shiftOut (andmed, kell, LSBFIRST, kaheksa); viivitus (500); shiftOut (andmed, kell, LSBFIRST, üheksa); viivitus (500);}

Samm 7: Projekt 3 [pt 1]: '2 Wire' 4x4 Led Matrix Display

Projekt 3 [pt 1]: '2 Wire' 4x4 Led maatriksekraan
Projekt 3 [pt 1]: '2 Wire' 4x4 Led maatriksekraan
Projekt 3 [pt 1]: '2 Wire' 4x4 Led maatriksekraan
Projekt 3 [pt 1]: '2 Wire' 4x4 Led maatriksekraan

4x4 LED -maatriksiprojekt on üsna keerukam, kuid see on peaaegu kõik ehituses, ma valin oma jootmise perfboardile, kuid see peaks olema võimalik korrata leivaplaadil, lihtsalt palju kaugemal. erineb selle poolest, et nihkeregister ei juhi otseselt LED -e, selle asemel saadetakse nihkeregistri väljundid 1Kohm takisti kaudu NpN -transistori alusele, kui bitti väljund on kõrge, laseb see piisavalt voolu ja pinget transistor kollektori ja emitteri vahelise ühenduse vahetamiseks on kollektorid seotud "tugeva" reguleeritud 5 voltiga. Transistoride kiirgurid on ühendatud 150 oomi takistitega ja takistid on seotud 4 LED -i annoodiga järjest ja piirab rea kuni 20 ma, kuigi ekraanile piltide joonistamisel süttib korraga ainult 1 LED ja seega peaaegu täieliku heleduse lähedal (peaaegu sellepärast, et nad lülituvad kogu pildi moodustamiseks tõesti kiiresti sisse ja välja) Seal on 4 rida ja 4 veerud, igaüks rida saab takisti ja transistori, igal veerul seotakse LED -i katoodid kokku, jookseti kokku transistori kollektoriga, mille alust kontrollib samuti nihkeregister, ja lõpuks maapinnale. Skeemi suur versioon www.instructables.com/files/orig/F7J/52X0/G1ZGOSRQ/F7J52X0G1ZGOSRQ.jpg

8. samm: projekt 3 [pt 2]: '2 -juhtmeline' 4x4 LED -maatriksekraan

Projekt 3 [pt 2]: '2 Wire' 4x4 Led maatriksekraan
Projekt 3 [pt 2]: '2 Wire' 4x4 Led maatriksekraan
Projekt 3 [pt 2]: '2 Wire' 4x4 Led maatriksekraan
Projekt 3 [pt 2]: '2 Wire' 4x4 Led maatriksekraan
Projekt 3 [pt 2]: '2 Wire' 4x4 Led maatriksekraan
Projekt 3 [pt 2]: '2 Wire' 4x4 Led maatriksekraan

Nihkeregister juhib YX -vormingus nii LED -ide anodeid kui ka katoode, vaadake järgmist bitti 1 = veerg 1 (parempoolne) bitt 2 = veerg 2bit 3 = veerg 3bit 4 = veerg 4bit 5 = rida 1 (ülemine) 6 = rida 2bit 7 = rida 3bit 8 = rida 4Kujutise tegemiseks joonistage graafikapaberile 4x4 ruut ja täitke soovitud kuvamiseks järgmine YX tabel. Allpool näete sarnasuse kaardistamist, samuti parimat, mida saab teha 4x4 "pikslitega" Kirjutan iga täidetud osa jaoks üles, millises veerus (Y) see asub ja millises reas see on (X) Nüüd avage arduino IDE failis _4x4.pde näete meie vanu 2 sõpra #define data 2 #define clock 3, seejärel täisarvude massiiv int img = {1, 1, 4, 1, 1, 3, 4, 3, 2, 4, 3, 4}; Kui vaatate, et see on lihtsalt minu üleskirjutatud YX -koordinaatide loend, oleks nende väärtuste käsitsi teisendamine väga valus ja meil on arvuti… laske tal seda teha! Edasi liikumine on tühine, kus me teeme meie kell ja andmete nööpnõelad OUTPUTS void setup () {pinMode (kell, VÄLJUND); // teha kella nööp väljundiks pinMode (data, OUTPUT); // andmestiku tegemine väljundiks3} Ja segase välimusega tühisilm, asjade alustamiseks peame kuulutama mõned kohalikud muutujad tühiseks () {int Y; int X; bait välja; Siis a silmus, see silmus peab olema sama pikk kui img massiivi kirjete arv, selle pildi jaoks kasutasin ainult 6 pikslit, nii et see teeb 12 YX koordinaati. Ma jätan iga teise numbri vahele, kasutades i += 2, sest loeme 2 koordinaati silmuse kohta (int i = 0; i <12; i += 2) // img -massiivi punktide arv, antud juhul 12 {Nüüd loeme Y -kirje massiivist aadressil ja lahutame selle väärtusest ühe, sest baidid ei alga ühest, vaid algavad nullist, kuid me lugesime 1 -st // saame esimese paari YX -nööre Y = (img - 1); // lahutame ühe, kuna bittide arv algab nullist. Järgnevalt loeme massiivist X -kirje [i + 1] ja lahutame selle väärtusest ühe, samal põhjusel X = (img [i + 1] - 1); Pärast piksli YX väärtuste tegemist teeme natuke bitti või matemaatikat ja liigume vasakule. Kõigepealt peame lugema X väärtust ja olenemata selle väärtusest nihutama seda paljudes kohtades + 4 vasakule, nii et kui X on 4 ja lisage 4, see on bit 8 (MSB), vaadates uuesti diagrammi … bit 1 = veerg 1 (parempoolne) bit 2 = veerg 2bit 3 = veerg 3bit 4 = veerg 4bit 5 = rida 1 (ülemine) bit 6 = rida 2bit 7 = rida 3bit 8 = rida 4Bit 8 on viimane rida Järgmisena nihutatakse ka Y väärtus vasakule, seekord lihtsalt iseenesest, midagi ei lisata. Lõpuks on need kaks kokku või 1 bait kahe poole baidi asemel (nibbles), kasutades bitti või (sümbol |), võtab kaks baiti ja liidab need põhimõtteliselt kokku, oletame, et X = 10000000Y = 00000001 -------------------- OR = 10000001roo 4 veerg 1 välja = 1 << (X + 4) | 1 << Y; Lõpuks lülitage praeguse pildi kuvamiseks välja ja jätkake seda seni, kuni massiivis pole enam andmeid … viivitage hetkega ja jätkake igavesti, kuna me nihutasime andmeid vasakule ja vajame, et MSB oleks viimasel väljundpoldil vahetuste registrist saatke see kõigepealt välja. shiftOut (andmed, kell, MSBFIRST, out); // nihuta bait meie registri viivitusele (1); // lükka see edasi, nii et sellel on võimalus jätta silma valguse koht. Tehke julgelt oma pilte ja efekte, seal on 3 näidisfaili, naeratav nägu ja ruudukujuline tahvel (mis näeb välja pigem triibud), ja lõpuks suvaline sädeluste tegija

9. samm: järeldus

Järeldus
Järeldus
Järeldus
Järeldus
Järeldus
Järeldus

Kõik see on üsna mugav väike kiip ja mul on hea meel, et ma selle vanalt elektroonikast prügikasti eemaldasin. Seda saab kasutada ka muudeks asjadeks peale kuvasüsteemide, kuid tuled ja nägemise vahetu tagasiside meeldivad kõigile see, mis toimub, on visuaalsetele mõtlejatele nagu mina väga kasulik. Palun andestage minu kood, arduino on mul olnud alles oktoobri kolmandast nädalast alates ja see on olnud päris suur krahh. Kuid see on süsteemi suurepärane asi, kui istute maha ja töötate koos sellega, on see täis funktsioone, mis muudavad 8 -bitise mikrokontrolleriga maailma juhtimise üsna lihtsaks. Nagu alati, on küsimused ja kommentaarid väga teretulnud ja aitäh loen, loodan, et õppisite palju

Soovitan: