Kazalo:

Register premikov 74HC164 in vaš Arduino: 9 korakov
Register premikov 74HC164 in vaš Arduino: 9 korakov

Video: Register premikov 74HC164 in vaš Arduino: 9 korakov

Video: Register premikov 74HC164 in vaš Arduino: 9 korakov
Video: ESP8266 ESP01 WI-FI-UART | Программирование LDmicro-Roboremo 2024, November
Anonim
Register premikov 74HC164 in vaš Arduino
Register premikov 74HC164 in vaš Arduino
Register premikov 74HC164 in vaš Arduino
Register premikov 74HC164 in vaš Arduino

Registri premikov so zelo pomemben del digitalne logike, delujejo kot lepilo med vzporednim in serijskim svetom. Zmanjšajo število žic, uporabo zatičev in celo pomagajo odstraniti obremenitev vašega procesorja, saj lahko shranijo svoje podatke. Na voljo so v različnih velikostih, z različnimi modeli za različne uporabe in različnimi funkcijami. Danes bom razpravljal o 8 -bitnem 74HC164, serijsko vzporednem izhodu, brez zapaha, premičnem registru. No, za enega je eden najosnovnejših registrov premikov, kar olajša učenje, a slučajno je bil edini, ki sem ga imel (lol!) Ta navodila govorijo o tem, kako ta čip deluje, kako ga povezati, in ga povežite z arduinom, vključno z nekaj vzorčnimi skicami in LED vezji. Upam, da boste vsi uživali!

1. korak: Kaj so registri premikov?

Kaj so torej premični registri?
Kaj so torej premični registri?

Kot smo že omenili, so na voljo v vseh različnih okusih, omenil pa sem tudi, da uporabljam 8 -bitni 74HC164, serijsko vzporeden, brez zapaha, premični register, kaj to vse pomeni?!? Prvič, ime 74-pomeni, da je del logične družine 74xx, in ker po svoji logiki ne more neposredno nadzorovati zelo velikega toka (16-20 ma za celoten čip je običajno), prenaša le signale naokrog, vendar to ne pomeni ta signal ne gre na tranzistor, ki lahko preklopi na višjo tokovno obremenitev. HC pomeni, da je njegova naprava visoke hitrosti cmos, o tem lahko preberete na spodnji povezavi, toda tisto, kar morate v osnovi vedeti, je, da je nizka napajalna naprava in bo delovala od 2 do 5 voltov (torej, če uporabljate 3,3 -voltni arduino, je v redu) Prav tako lahko deluje pravilno pri visokih hitrostih. Ta poseben čip ima običajno hitrost 78 mhz, vendar lahko greste tako počasi ali tako hitro (dokler se ne začne zvijati), kot želite www.kpsec.freeuk.com/components/74series.htm 164 je številka modela tega čipa, obstaja velika shema le -teh na wikipediaen.wikipedia.org/wiki/List_of_7400_series_integrated_circuits Naprej, 8 bit Premični register je sestavljen iz japonk, flip flop je 1 bit pomnilnika, ta ha s 8 (ali 1 bajt pomnilnika). Ker gre za pomnilnik, če vam ni treba posodobiti registra, lahko preprosto prenehate "govoriti" z njim in bo ostal v stanju, v katerem ste ga zapustili, dokler se z njim znova "pogovorite" ali ponastavite napajanja. drugi premični registri logične serije 7400 lahko gredo navzgor do 16 -bitnih zaporednih izhodov. To pomeni, da vaš arduino pošilja podatke zaporedno (vklopljeni impulzi drug za drugim) in premični register postavi vsak bit na pravilen izhodni pin. Ta model zahteva samo 2 žici za nadzor, tako da lahko uporabite 2 digitalna zatiča na arduinu in prekinete ta 2 do 8 dodatnih digitalnih izhodov, nekateri drugi modeli so vzporedni v serijskem izhodu, delajo isto, vendar kot vhodi za arduino (na primer igralna plošča NES) brez zapaha To je lahko pomanjkljivost tega čipa, če ga potrebujete. Ko podatki vstopijo v premični register prek zaporedja, se prikažejo na prvem izhodnem zatiču, ko vstopi urni impulz, se prvi bit premakne za 1 mesto, kar ustvari pomik na izhodih, na primer 00000001 bi se prikazal na izhodih kot 101001000100001000001000000100000001 Če govorite z drugimi logičnimi napravami, ki si delijo isto uro in tega ne pričakujejo, bi to lahko povzročilo težave. Zaprti registri premikov imajo dodaten nabor pomnilnika, zato lahko, ko podatki vnesejo v register, obrnete stikalo in prikažete izhode, vendar doda še eno žico, programsko opremo in stvari, s katerimi lahko sledite. nadzorujemo LED zaslone, učinek drsenja se zgodi tako hitro, da ga ne vidite (razen, ko prvič vklopite čip), in ko je bajt v registru premikov, ni več drsenja Nadzirali bomo vrsto črtice, 7 segment, in matrično matriko 16LED 4x4 s tem čipom in programsko opremo na arduinu, ki uporablja samo 2 digitalna zatiča (+ napajanje in ozemljitev)

2. korak: Osnovno ožičenje in delovanje

Osnovno ožičenje in delovanje
Osnovno ožičenje in delovanje
Osnovno ožičenje in delovanje
Osnovno ožičenje in delovanje

Ožičenje 74HC164 je 14 -polni čip, ima 4 vhodne zatiče, 8 izhodnih zatičev, napajanje in ozemljitev, zato začnimo od zgoraj. Zatiči 1 in 2 sta oba serijska vhoda, nastavljena kot logična vrata IN, kar pomeni, da oba morata biti logično visoka (tj. 5 voltov), da se bit vidi kot 1, nizko stanje (0 voltov) na obeh bo prebrano kot nič. Tega res ne potrebujemo in programsko opremo je lažje obravnavati, zato izberite enega in ga povežite z V+, tako da se vedno bere visoko. Odločil sem se za uporabo mostička od nožice 1 do nožice 14 (V+), saj lahko čez čip preprosto spustite mostiček. En preostali serijski vhod (pin 2 v mojih shemah) bo šel na digitalni pin 2 arduina. je zatič za uro, tako premični register ve, da je naslednji serijski bit pripravljen za branje, to je treba povezati z digitalnim zatičem 3 na arduinu. Pin 9 je, da počisti celoten register naenkrat, če se zniža, imate možnost, da ga uporabite, vendar nič v tem nepopisnem ne, zato ga povežite z V+zatiči 10, 11 12 in 13 so zadnji 4 bajti izhoda 14 je moč čipov Delovanje Najprej morate nastaviti serijski vhod registra (digitalni zatič 2 na arduinu) visoko ali nizko, nato morate zatič ure (digitalni zatič 3) obrniti z nizkega na visoko, premični register bo prebral podatke o serijskem vhodu in izhodne zatiče premaknil za 1, ponovite 8 -krat in nastavili ste vseh 8 izhodov. To lahko naredite ročno z zankami in digitalnimi zapisi v arduino IDE, vendar od t To je zelo pogosta komunikacija na ravni strojne opreme (SPI), ki ima eno samo funkcijo, ki to naredi namesto vas. shiftOut (dataPin, clockPin, bitOrder, value) Samo povejte, kje so podatki in zatiči ure povezani z arduinom, na kakšen način pošiljajo podatke in kaj naj pošljejo, in za vas skrbi (priročno)

3. korak: Projekti

Projekti
Projekti

V redu, dovolj predavanj in teorije, naredimo nekaj zabavnih stvari s tem čipom! V tem navodilu lahko poskusite s tremi projekti, prva dva sta enostavna in jih lahko v hipu opišete. Tretja, LED matrika 4x4, zahteva več časa in razmišljanja za izdelavo zaradi LED ožičenja. Seznam delov Projekt 1: 2 -žilni bargrafski krmilnik LED zaslona 1 * 74HC164 Premični register 1 * brez lemljene plošče1 * arduino ali arduino kompatibilen (5v) 1 * 330 ohm 1/4 vatni upor 8 * normalni izhod rdeče LED 12 * mostične žice Projekt 2: '2 Wire' 7 -segmentni krmilnik zaslona 1 * 74HC164 Premični register 1 * brez spajkanja plošča1 * arduino ali arduino združljiv (5v) 1 * 330 ohm 1/4 vatni upor 1 * sedmosegmentni zaslon s skupno katodo 9 * mostične žice Projekt 3: '2 Wire' 4x4 led matrični zaslon 1 * 74HC164 Premični register 1 * združljiv z arduino ali arduino (5v) 4 * 150 ohm 1 1/4 vatni upor 8 * 1Kohm 1/8 vatni upor (ali večji) 8 * NpN tranzistor (2n3904 ali boljši) 16 * normalna izhodna rdeča LED je sredstvo za njegovo izdelavo in regulirano 5 -voltno moč, ki lahko prenese 160+ma (lahko vklopite vse LED diode hkrati kot zavorno luč)

Korak 4: Projekt 1 [pt 1]: Strojna oprema za bargrafski LED zaslon za 2 žice

Projekt 1 [pt 1]: Strojna oprema bargrafskega LED zaslona za 2 žice
Projekt 1 [pt 1]: Strojna oprema bargrafskega LED zaslona za 2 žice
Projekt 1 [pt 1]: Strojna oprema bargrafskega LED zaslona za 2 žice
Projekt 1 [pt 1]: Strojna oprema bargrafskega LED zaslona za 2 žice

Priključite arduino in premični register v skladu s shemo, že imam 10 -segmentni bargrafski prikaz, pripravljen za uporabo na plošči in to boste videli na sliki, vendar lahko to storite tudi s posameznimi LED diodami Na drugi strani Izjavil sem, da to niso gonilniške naprave, da so logične naprave, skozi katere lahko prehaja majhna količina toka. Da bi zagotovili 8 LED, hkrati pa ohranili preprosto vezje in ne kuhali premičnega registra, moramo precej omejiti tok. LED so ožičene vzporedno in imajo skupno točko (skupna katoda), preden gredo v napajanje napajalno ozemljitev, ki jo morajo preiti skozi upor 330 ohmov, kar omejuje skupno količino toka, ki bi jo lahko porabile vse LED diode, na 10 mA (pri 5 voltih). ta primer, če želite, da LED diode delujejo na ustrezen tok, boste morali vstaviti tranzistor, kjer lahko premični register vklopi / izklopi vir višjega toka (glej projekt 3). za povezavo z arduino digitalnim zatičem # 2 Zatič ure premičnega registra (pin 8) se mora povezati z arduino digitalnim zatičem # 3

5. korak: Projekt 1 [pt 2]: Programska oprema za krmiljenje LED zaslona za 2 žice

Projekt 1 [pt 2]: Programska oprema za krmiljenje LED zaslona za 2 žice
Projekt 1 [pt 2]: Programska oprema za krmiljenje LED zaslona za 2 žice
Projekt 1 [pt 2]: Programska oprema za krmiljenje bargrafskih LED zaslonov „2 Wire“
Projekt 1 [pt 2]: Programska oprema za krmiljenje bargrafskih LED zaslonov „2 Wire“

Primer 1: Odprite datoteko "_164_bas_ex.pde" Znotraj arduino IDE je njena preprosta skica, ki vam omogoča le, da določite vklop ali izklop LED na prikazovalniku bargrafa. Prvi dve vrstici določata številke pinov, ki jih bomo uporabljali za podatke in uro. uporabite #define over const integer, lažje si ga zapomnim in ni nobene prednosti za enega ali drugega, ko ste enkrat zbrali #define data 2 #define clock 3 next je funkcija nastavitve void, deluje samo enkrat, zato se arduino obrne on, nastavi register premikov in nima nič drugega za početi. Znotraj funkcije nastavitve void nastavimo uro in podatkovne zatiče kot izhode OUTPUT, nato pa s funkcijo shiftOut podatke pošljemo v void setup (), pinMode (ura, OUTPUT); // nastavimo pin izhoda pinMode (podatki, OUTPUT); // naredimo podatkovni pin kot izhodni shiftOut (podatki, ura, LSBFIRST, B10101010); // pošlji to binarno vrednost v register shift} V funkciji shiftOut lahko vidite njene argumentedata je podatkovni pin, ura je pin ura LSBFIRST se nanaša na to, v kakšnem vrstnem redu je, ko ga zapisujete v binarnem zapisu (Bxxxxxxxx) 7. element mimo B je najprej najmanjši pomemben bit, ta se najprej vnese, tako da konča na zadnjem izhodu, ko je vnesenih vseh 8 bitov B10101010 je binarna vrednost, poslana v premični register in vklopila bo vsako čudno luč, poskusite se igrati z različnimi vrednostmi, da vklopite ali izklopite različne vzorce, in nazadnje prazno void zanko (ker jo potrebujete, tudi če je ne uporabljate) void loop () {} // zaenkrat prazna zanka Primer 2: prvih 8 vrstic je enako kot prvih 8 vrstic prvega primera, v resnici se ne bodo spremenile za noben drug projekt, zato #define data 2 #definiraj uro 3void setup () {pinMode (clock, OUTPUT); // nastavimo pin izhoda pinMode (podatki, OUTPUT); // naredimo podatkovni pin kot izhod. Zdaj pa v nastavitvi void obstaja 8 števcev zanke, ki vzame prazen bajt in premakne 1 bit naenkrat, začenši od skrajnega levega bita in se pomakne desno. To je nazaj iz prvega primera, kjer smo začeli od skrajnega desnega bita in delali levo, vendar z uporabo MSBFIRST funkcija shift out pošlje podatke na pravilen način Dodamo tudi zamik v zanki for, da se upočasni dovolj, da je viden. for (int i = 0; i <8; ++ i) // za 0 - 7 do {shiftOut (podatki, ura, MSBFIRST, 1 << i); // bitni premik logične visoke (1) vrednosti za i delay (100); // zakasnite 100 ms ali pa ga ne boste videli}} void loop () {} // prazna zanka za zdaj naložite skript in zdaj bi morali videti, da črtni grafikon prižge vsako lučko naenkrat

Korak 6: Projekt 2: 7 -segmentni krmilnik "2 Wire"

Projekt 2: 7 -segmentni krmilnik "2 Wire"
Projekt 2: 7 -segmentni krmilnik "2 Wire"
Projekt 2: 7 -segmentni krmilnik "2 Wire"
Projekt 2: 7 -segmentni krmilnik "2 Wire"

Poglejte pinout vašega 7 -segmentnega zaslona (imel sem samo dvojni, vendar sem uporabil le polovico) in uporabite spodnjo risbo, da povežete vsak segment s pravilnim bitom na registru premikabit 1 = pin 3bit 2 = pin 4bit 3 = pin 5bit 4 = pin 6bit 5 = pin 10bit 6 = pin 11bit 7 = pin 12bit 8 = pin 13 (če želite uporabiti decimalno vejico) In katodo zaslona skozi upor 330ohm in za napajanje ozemljite zdaj odprite seven_seg_demo.pde v arduino IDEF najprej vidite, kje definiramo podatke in zatiče ure #define data 2 #define clock 3 Nato nastavimo vse vzorce znakov v binarni obliki, to je precej enostavno, poglejte spodnjo risbo, če potrebujete srednji segment vnesite eno, naslednjič potrebujete zgornji segment, če je tako, vnesite še enega, nadaljujte tako, dokler ne pokrijete vseh 8 segmentov, opazite, da je moj skrajni desni bit (bit 8) vedno 0, zato nikoli ne vklopim decimalke točka. bajt nič = B01111110; bajt ena = B00000110; bajt dva = B11011010; bajt tri = B11010110; bajt štiri = B10100110; bajt pet = B11110100; bajt šest = B11111100; bajt sedem = B01000110; bajt osem = B11111110; bajt osem = B11111110; naslednjič pri nastavitvi void nastavimo naše podatke in nožice ure na izhode void setup () {pinMode (clock, OUTPUT); // nastavimo pin izhoda pinMode (podatki, OUTPUT); // naredimo pin podatkov kot izhod3} nato v void zanki uporabimo shiftOut za prikaz vsakega vzorca (številke), počakamo 1/2 sekunde in prikažemo naslednjega, 0 do 9, saj bo to izvedeno v funkciji void loop, to bo štelo 0-9 in ponavljajte večno. void loop () {shiftOut (podatki, ura, LSBFIRST, nič); zamuda (500); shiftOut (podatki, ura, LSBFIRST, ena); zamuda (500); shiftOut (podatki, ura, LSBFIRST, dva); zamuda (500); shiftOut (podatki, ura, LSBFIRST, tri); zamuda (500); shiftOut (podatki, ura, LSBFIRST, štiri); zamuda (500); shiftOut (podatki, ura, LSBFIRST, pet); zamuda (500); shiftOut (podatki, ura, LSBFIRST, šest); zamuda (500); shiftOut (podatki, ura, LSBFIRST, sedem); zamuda (500); shiftOut (podatki, ura, LSBFIRST, osem); zamuda (500); shiftOut (podatki, ura, LSBFIRST, devet); zamuda (500);}

Korak 7: Projekt 3 [pt 1]: '2 Wire' 4x4 LED matrični zaslon

Projekt 3 [pt 1]: '2 Wire' 4x4 LED matrični zaslon
Projekt 3 [pt 1]: '2 Wire' 4x4 LED matrični zaslon
Projekt 3 [pt 1]: '2 Wire' 4x4 LED matrični zaslon
Projekt 3 [pt 1]: '2 Wire' 4x4 LED matrični zaslon

Projekt LED matrike 4x4 je precej bolj zapleten, vendar je skoraj v gradbeništvu, jaz se odločim, da bom moj spajkal na perfboard, vendar bi ga bilo treba posnemati na krovu, le veliko bolj razmaknjenega. se razlikuje po tem, da premični register ne poganja neposredno LED, namesto tega se izhodi registra premika pošljejo skozi upor 1Kohm na osnovo tranzistorja NpN, ko je izhod bita visok, omogoča dovolj toka in napetosti, da preidejo v tranzistor za preklapljanje povezave med kolektorjem in oddajnikom, so kolektorji vezani na "trdne" regulirane napetosti 5 voltov. Oddajniki tranzistorjev so priključeni na 150 ohmske upore, upori pa so vezani na anode 4 vodnikov zapored in omejuje vrstico na 20 mA, čeprav pri risanju slik na zaslonu naenkrat sveti le 1 LED in zato skoraj pri polni svetlosti (blizu se vklopijo in izklopijo zelo hitro, da sestavi celotno sliko) Obstajajo 4 vrstice in 4 stolpci, vsak vrstica dobi upor in tranzistor, na vsakem stolpcu so katode LED vezane skupaj, naletele na zbiralnik tranzistorja, katerega bazo nadzira tudi premični register, in na koncu prišli do tal. Velika različica sheme www.instructables.com/files/orig/F7J/52X0/G1ZGOSRQ/F7J52X0G1ZGOSRQ.jpg

8. korak: Projekt 3 [pt 2]: '2 Wire' 4x4 LED matrični zaslon

Projekt 3 [pt 2]: '2 Wire' 4x4 LED matrični zaslon
Projekt 3 [pt 2]: '2 Wire' 4x4 LED matrični zaslon
Projekt 3 [pt 2]: '2 Wire' 4x4 LED matrični zaslon
Projekt 3 [pt 2]: '2 Wire' 4x4 LED matrični zaslon
Projekt 3 [pt 2]: '2 Wire' 4x4 LED matrični zaslon
Projekt 3 [pt 2]: '2 Wire' 4x4 LED matrični zaslon

Premični register nadzoruje anodo in katode LED v obliki YX, poglejte naslednji bit 1 = stolpec 1 (skrajno desno) bit 2 = stolpec 2bit 3 = stolpec 3bit 4 = stolpec 4bit 5 = vrstica 1 (zgornji) bit 6 = vrstica 2 bit 7 = vrstica 3 bit 8 = vrstica 4 Če želite, da slika na milimetrski papir nariše kvadrat 4x4 in izpolni tiste, ki jih želite prikazati, naredite tabelo YX. Spodaj boste videli preslikavo za primerjavo, pa tudi najboljše, kar lahko naredite pri 4x4 "pikslih". Za vsak izpolnjen odsek zapišem, v katerem stolpcu (Y) je, nato v kateri vrstici je (X) Zdaj se odpre v datoteki _4x4.pde v IDE -ju arduino boste videli naša stara 2 prijatelja #define data 2 #definiraj uro 3, nato pa niz celih števil int img = {1, 1, 4, 1, 1, 3, 4, 3, 2, 4, 3, 4}; Če pogledate le seznam mojih zapisanih koordinat YX, bi bila velika težava v zadnjici, če bi te vrednosti ročno pretvorili, mi pa imamo računalnik … naj to stori! Če gremo naprej, je nastavitev praznine tam, kjer naredimo naši zatiči za uro in podatke OUTPUTS void setup () {pinMode (clock, OUTPUT); // nastavimo pin izhoda pinMode (podatki, OUTPUT); // naredimo pin podatkov kot izhod3} In zmedeno videti void zanko, za začetek moramo razglasiti nekatere lokalne spremenljivke void loop () {int Y; int X; bajt ven; Potem zanka for, ta zanka mora biti dolga toliko vnosov v matriko img, za to sliko sem uporabil le 6 slikovnih pik, tako da je 12 koordinat YX. Poskrbim, da preskoči vsako drugo število z uporabo i += 2, ker beremo 2 koordinati na zanko za (int i = 0; i <12; i += 2) // število točk v matriki img, v tem primeru 12 {Zdaj preberemo Y vnos pri v matriki in odštejemo eno od njegove vrednosti, ker se bajti ne začnejo pri enem, začnejo pri nič, vendar smo šteli od 1 // dobimo prvi par vrvic YX Y = (img - 1); // odštejemo eno, saj se štetje bitov začne pri 0 Nato v matriki preberemo vnos X pri [i + 1] in odštejemo eno od njegove vrednosti iz istega razloga X = (img [i + 1] - 1); Ko imamo vrednosti YX za slikovno piko, naredimo nekaj bitov ali matematiko in se pomaknemo v levo. Najprej moramo prebrati vrednost X in ne glede na to, ali je njena vrednost premaknjena za toliko mest + 4 levo, torej če je X 4 in dodajte 4, to je bit 8 (MSB), ponovno pogledate grafikon … bit 1 = stolpec 1 (skrajno desno) bit 2 = stolpec 2bit 3 = stolpec 3bit 4 = stolpec 4bit 5 = vrstica 1 (zgornji del) bit 6 = vrstica 2bit 7 = vrstica 3bit 8 = vrstica 4Bit 8 je zadnja vrstica Nato se vrednost Y premakne tudi v levo, tokrat samo od sebe, nič se ne doda. (grizlja), z uporabo bitov ali (simbol |) vzame dva bajta in jih osnovno sešteje, predpostavimo, da je X = 10000000Y = 00000001 -------------------- ALI = 10000001row 4 stolpec 1 out = 1 << (X + 4) | 1 << Y; In nazadnje shiftOut za prikaz trenutne slike in to nadaljujte, dokler v matriki nimamo več podatkov … zakasnite za trenutek in za vedno zavrtite, saj smo podatke premikali v levo in potrebujemo MSB na zadnjem izhodnem zatiču premičnega registra, ga najprej pošljite. shiftOut (podatki, ura, MSBFIRST, ven); // premaknemo bajt ven v naš register zakasnitev (1); // odložite, da bo pustil svetlobo v očeh in končno naključni ustvarjalec iskric

9. korak: Zaključek

Zaključek
Zaključek
Zaključek
Zaključek
Zaključek
Zaključek

Vse skupaj je precej priročen mali čip in vesel sem, da sem ga odrezal s starega kosa elektronike, ki je šel v smeti. Lahko se uporablja tudi za druge stvari, razen za sisteme prikaza, vendar imajo vsi radi luči in takojšnje povratne informacije dogajanje je zelo koristno za vizualne mislece, kot sem jaz. Prosim, oprostite mi kodo, arduino imam šele od tretjega oktobra v oktobru, kar je bilo precej hudo. Ampak to je super pri sistemu, če sedite in delate z njim, je poln čednih funkcij, ki olajšajo nadzor sveta z 8 -bitnim mikrokrmilnikom. Vedno so vprašanja in komentarji dobrodošli in hvala za branje, upam, da ste se veliko naučili

Priporočena: