tévék. Konzolok. Projektorok és tartozékok. Technológiák. Digitális TV

4 bites reteszelő eltolási regiszter. Regiszterek. SHCP – óra bemenet

Ez az áttekintés valójában a kezdő Arduino-felhasználóknak szól, vagy azoknak, akik szeretnének részt venni ebben az üzletben. A mikrokontroller kimenetek számának növeléséről fogunk beszélni egy shift regiszter segítségével, és ez nem igényel nagy kiadásokat (például egy Arduino Mega vásárlásához képest). A legegyszerűbb alkalmazás a LED-ek villogtatása, ezért próbáljuk meg ezt a gyakorlatban.

Amikor elkezdtem ismerkedni a mikrokontrollerekkel (sőt, még mindig "kezdem az ismerkedést"), az egyik első kérdés az volt: hogyan lehet ugyanazt a százezer LED-et vezérelni úgy, hogy csak egy tucat kimenet van a vezérlőn? Igen, használhatod a jelmultiplexelést, a back-to-back kapcsolást és sok más trükköt, de akkor is maximális mennyiség A csatlakoztatható LED-ek száma korlátozott, és más megoldást kell keresni. És javasolták nekem az egyik lehetőséget: „vegyél egy, kettő, tíz műszakregiszter chipet és érezd jól magad”. Elhatározták, hogy azonnal megrendelik őket, és a jövőben akár LED-kockát is összeállítanak ezek felhasználásával. Ez utóbbit tényleg el kellett hagynom, találtam egy egyszerűbb lehetőséget, de ez egy másik áttekintés témája.
20 db 74HC595N-t rendeltem egyszerre, szerencsére csak fillérekbe kerültek. Az N betű a jelölés végén azt jelenti, hogy a mikroáramkör DIP-16-os csomagolásban van, nagyon kényelmes a kenyérsütőlapon végzett kísérletekhez, még csak forrasztani sem kell. Így néz ki:




Mi ez a mikroáramkör? Ez egy nyolc bites soros bemeneti, soros kimeneti vagy párhuzamos kimenetű eltolási regiszter reteszelő flip-floppal és háromállapotú kimenettel.
Egyszerűen fogalmazva, mindössze 3 vezérlőkimenettel 8 műszakregiszter kimenetet vezérelhet. Ha pedig egymás után sorba kötik a mikroáramköröket, akkor a vezérelt kimenetek száma tetszőleges ésszerű határig növelhető (maximális számot nem találtam, de úgy tűnik, hogy több százat gond nélkül kombinálnak; ha valaki tudja, mi a maximum a kaszkádban lévő mikroáramkörök száma attól függ, érdekes lenne megtudni a megjegyzésekben).
Az adatok sorosan továbbítják a chipet. A 0 és 1 bitek egymás után kerülnek át a regiszterbe, a biteket óraimpulzus érkezésekor olvassuk ki. 8 bitet továbbított - 8 kimeneti állapotot kapott a regiszterkimeneteken. A 74HC595 kaszkádolásakor (ha 16, 24 stb. kimenet szükséges), az első regiszter adatai átkerülnek a következőbe.
A regiszter kimenete nem csak logikai 0 vagy 1 állapotú lehet, hanem nagy impedanciájú is lehet, amikor a kimenetet leválasztják az áramkörről. Csak az összes kimenetet lehet egyszerre ebbe az állapotba átvinni. Ezt ritkán használják, de hasznos lehet például, ha a vezérlést másik vezérlőre váltja.

Bemeneti/kimeneti kivezetés

Q0…Q7 – regiszterkimenetek, lehetnek 0, 1 vagy nagy impedanciájú
GND – föld
Q7′ – kimenet a regiszterek soros csatlakoztatásához.
MR – regiszter visszaállítása
SH_CP – óra bemenet
ST_CP – adatrögzítő bemenet
OE – a bemeneti kimeneteket nagy impedanciából üzemállapotba konvertálja
DS – adatbevitel
VCC – tápegység 2-6 volt

Ehhez csak ellenőrizni kell a munkát, összeállítunk egy olyan áramkört, amely népszerű a kezdők körében. A GND (8-as érintkező) a földre, a Vcc (16-os érintkező) az 5V-os tápra, az OE (13-as érintkező) a földre, az MR (10-es érintkező) az 5V-os tápra van csatlakoztatva. A műszakregiszter most be van kapcsolva, és minden kimenet aktív. Itt az ideje, hogy a mikroáramkört az Arduino-hoz csatlakoztassa: csatlakoztassa a DS adatbemenetet (14-es érintkező) az Arduino 9. digitális kimenetéhez, az SH_CP órajel bemenetét (11-es érintkező) a 10. digitális kimenethez, az ST_CP reteszelő bemenetet (12-es érintkező) ) a 8. Arduino tűhöz. A zaj minimalizálása érdekében ajánlatos egy 0,1 µF-os kondenzátort elhelyezni a föld és a retesz közé.
Marad a LED-ek csatlakoztatása - 150-300 Ohm-os ellenállásokon keresztül csatlakoztatjuk őket a regiszter kimeneteitől a földhöz. Ez minden. Itt egy diagramot találtam azoknak, akik szeretik a vizuális anyagokat (kérjük, vegye figyelembe, hogy a valódi mikroáramkör kivezetése és a diagramon látható sematikus kép eltérő!)


Az áramkört kenyérsütőlapra szereltem össze, és így alakult.

összeszerelt áramkör








Az Arduinóban kényelmes a shiftOut() függvény használata, amely egy bájtnyi információt szekvenciálisan (bitenként) ad ki a bemeneti/kimeneti portra. . Terhelés tesztkód Arduino-ban, és kap egy számlálót 0 és 255 között bináris formában:
int reteszelőtű = 8; //ST_CP int clockPin = 10; //SH_CP int dataPin = 9; //DS void setup() ( pinMode(latchPin, OUTPUT); pinMode(clockPin, OUTPUT); pinMode(dataPin, OUTPUT); ) void loop() ( for (int numberToDisplay = 0; numberToDisplay< 256; numberToDisplay++) { // установка синхронизации "защелки" на LOW digitalWrite(latchPin, LOW); // передаем последовательно на вход данных shiftOut(dataPin, clockPin, MSBFIRST, numberToDisplay); //"защелкиваем" регистр, устанавливаем значения на выходах digitalWrite(latchPin, HIGH); delay(500); } }
Nálam így történt, minden a vártnak megfelelően működik:


Így a vezérlőtűk minimális használatával vezérelhető nagy számban LED-ek (vagy valami más). Minden rendben lenne, de elmondom a hiányosságokat is. Mint látható, az egyes LED-ek áramát egy ellenállásnak kell korlátoznia, és nagy LED-mátrixok építésekor ez meglehetősen munkaigényessé válik. Van egy érdekesebb megoldás a LED-ek vezérlésére - a DM13A meghajtó, amely egy eltolási regiszter, és korlátozza az áramot minden kimeneten. Legközelebb mesélek róla, és bónuszként - a legelső LED-kockám, 5x5x5, egyszerűsített alapra szerelve elem alap, a 74HC595 használata nélkül.

+37 vásárlását tervezem Hozzáadás a kedvencekhez Tetszett az értékelés +35 +61

Egy adott időpontban elkerülhetetlenül szembe kell néznie azzal a problémával, hogy nincs elég tű az Arduino-n ahhoz, hogy megfeleljen a projekt vagy a prototípus igényeinek. Megoldás erre a problémára? Shift regiszter, vagy inkább Arduino shift regiszter 74hc595.

Bárki, aki már csinált olyan Arduino projekteket, ahol sok LED-et használ, rájött, hogy az Arduino tűi nagymértékben korlátozzák őket, és nem tudnak olyan hatalmas projekteket létrehozni, amelyek sok tűt igényelnek. Konkrét projektünkben 16 LED-et mindössze három Arduino érintkező vezérel. A kulcselem az Arduino 74hc595 váltóregiszter. Minden 74HC595 váltóregiszter akár 8 LED-et is képes fogadni, és a szekvenciális regiszterláncok segítségével a hagyományos 3-ról végtelen számúra növelheti a kártya érintkezőit.

Mielőtt elkezdené a chip csatlakoztatását, nézzük meg a folyamat működését.

Az első dolog, amit tisztázni kell, a "bitek" fogalma azok számára, akik nem ismerik a bináris kódot. Amikor „bitekről” beszélünk, a bináris értéket alkotó számok egyikére gondolunk. A közönséges számokkal ellentétben általában az első bitet tekintjük a legnagyobbnak. Tehát, ha az 10100010 bináris értéket vesszük, akkor az első bit valójában 0, a nyolcadik bit pedig 1. Azt is meg kell jegyezni, hacsak nem sejtettük, minden bit csak 0 vagy 1 lehet.

A chip nyolc tűt tartalmaz, amelyeket kimenetre használhatunk, mindegyik érintkezőhöz egy bit tartozik egy regiszterben. A 74HC595 váltóregiszter esetében a QA-tól QH-ig nézzük őket.

Ahhoz, hogy ezeket a kimeneteket az Arduinón keresztül írhassuk, egy bináris értéket kell küldenünk a shift regiszterbe, és ebből a számból a shift regiszter meg tudja határozni, hogy melyik kimenetet használja. Ha például a 10100010 bináris értéket küldtük el, akkor a fenti képen zölddel kiemelt névjegyek aktívak, a pirossal kiemeltek pedig inaktívak lesznek.

Ez azt jelenti, hogy a jobb szélső bit QH-ra, a bal szélső bit pedig a minőségbiztosításra van leképezve. Egy kimenet akkor tekinthető aktívnak, ha a hozzá tartozó bit 1-re van állítva. Ezt fontos megjegyezni, mert különben nagyon nehéz lesz tudni, hogy melyik tűket használod.

Most, hogy már alapvető ismereteink vannak arról, hogyan használjuk a biteltolást a használandó tűk meghatározásához, elkezdhetjük csatlakoztatni az Arduinónkhoz.

8 LED-del kezdjük

A lecke első részéhez a következő összetevőkre lesz szükségünk:

  • Arduino Uno
  • Fejlesztési tábla
  • Arduino váltóregiszter 74HC595
  • 8 LED
  • 8 ellenállás - 220 ohmnak elégnek kell lennie
  • Vezetékek/jumperek

Kezdje azzal, hogy elhelyezi a műszakregisztert az elrendezésen, ügyelve arra, hogy mindkét oldal az elrendezés külön oldalán legyen, az alábbiak szerint.

A felirattal felfelé, az 1-8-as csapok a bal oldalon felülről lefelé, és a 16-9-es tűk a jobb oldalon felülről lefelé, az alábbi képen látható módon.

Az áramkör összeszerelése

Először csatlakoztassa a 16-os (VCC) és 10-es (SRCLR) érintkezőket az Arduino 5V-os kimenetéhez, a 8-as (GND) és 13-as (OE) érintkezőket pedig az Arduino Gnd-kimenetéhez. A 13-as tű (OE) a kimenetek engedélyezésére szolgál, mivel ez egy aktív alacsony érintkező, amelyet közvetlenül a földre csatlakoztathatunk.

Ezután három érintkezőt kell csatlakoztatnunk, amelyeket a műszakregiszter vezérlésére fogunk használni:

  • A 74HC595 váltóregiszter 11-es érintkezője (SRCLK) az Arduino 11-es érintkezőjéhez – ezt "sync pin"-nek nevezik.
  • A váltóregiszter 12-es érintkezője (RCLK) az Arduino 12-es érintkezőjéhez – ezt a „reteszelőtűnek” nevezzük.
  • A váltóregiszter 14-es érintkezője (SER) az Arduino 13-as érintkezőjéhez – ezt "adattűnek" fogják hívni.

Mindhárom tüske az oktatóanyagban korábban említett biteltolás végrehajtására szolgál. Szerencsére az Arduino kimondottan a shift regiszterekhez biztosít egy helper funkciót shiftOut néven, ami szinte mindent elintéz helyettünk, de erre még visszatérünk, ha megnézzük a kódot.

Most már csak az összes kimeneti érintkezőt kell csatlakoztatnunk a LED-einkhez, biztosítva, hogy a LED-ek elé egy ellenállás kerüljön az áram csökkentésére, és hogy a LED-ek katódjai a föld felé mutassanak.

A vezetékek zűrzavarának minimalizálása érdekében az ellenállásokat és a LED-eket külön kenyérsütőtáblára helyeztük, azonban használhat egyetlen kenyérsütőtáblát is.

A LED-ek elhelyezésekor ügyeljünk a bekötésük sorrendjére, hogy a QA az első LED-hez, a QH pedig az utolsó LED-hez csatlakozzon, különben kódunk nem a megfelelő sorrendben kapcsolja be a LED-eket. Ha végzett, valami ehhez hasonló kell:

Vázlat az Arduino számára

Most készen állunk a kód feltöltésére. Csatlakoztassa az Arduinót a számítógépéhez, és töltse le rá a következő vázlatot a 74hc595 Arduino számára:

Int reteszelőtű = 12; int clockPin = 11; int dataPin = 13; bájt ledek = 0; int currentLED = 0; void setup() ( pinMode(latchPin, OUTPUT); pinMode(dataPin, OUTPUT); pinMode(clockPin, OUTPUT); leds = 0; ) void loop() ( ledek = 0; if (currentLED == 7) ( currentLED = 0; ) else ( currentLED++; ) bitSet(leds, currentLED) shift(dataPin, clockPin, leds);

Először is határozzuk meg a következőket a vázlat tetején:

  • Pin helye: szinkronizáló, retesz és adatok
  • Egy bájt, amely tárolja azokat a biteket, amelyek megmondják a shift regiszternek, hogy melyik tűt kell használni
  • Egy változó, amely nyomon követi, hogy melyik LED-et kell bekapcsolnunk

A módszerben beállítást egyszerűen inicializáljuk a tűmódokat és a LED változót.

A módszerben hurok(hurok) töröljük a változó bitjeit ledek minden iteráció elején, tehát minden bit 0-ra van állítva, mivel egyszerre csak egy LED-et akarunk bekapcsolni. Ezt követően növeljük vagy újraindítjuk az aktuális változót aktuálisLED hogy majd ismét bekapcsolja a megfelelő LED-et.

E két művelet után áttérünk a fontosabb részre - a biteltolásra. Először a metódus meghívásával kezdjük bitSet. Áttérünk a módszerre bitSet egy bájt, amely biteket tárol, és egy változó aktuálisLED.

Ez a módszer lehetővé teszi, hogy egy bájt egyes bitjeit pozíciójuk megadásával állítsuk be. Például, ha egy bájtot kézzel akarunk beállítani 10010 , használhatjuk a következő hívásokat, mivel az 1-re állítandó bitek jobbról a másodikak (ami az 1-es pozícióban vannak, ha 0-ból indulunk), és az ötödik jobbról, ami a 4-es pozícióban van:

BitSet(ledek, 1); bitSet(ledek, 4);

Tehát minden alkalommal, amikor növeljük az aktuális változót aktuálisLEDés adja át a módszernek bitSet, az előzőtől balra lévő bitet minden alkalommal 1-re állítjuk, és így mondjuk a shift regiszternek, hogy aktiválja az előzőtől balra lévő kimenetet.

A bitek beállítása után írunk a reteszelő tűbe, jelezve a shift regiszternek, hogy adatokat küldünk neki. Miután ezt megtettük, a módszert nevezzük shiftOut, ami az Arduino. Ezt a módszert kifejezetten a shift regiszterek használatára tervezték, és lehetővé teszi a bitek egyszerű eltolását egyetlen hívásban. Ehhez első két paraméterként adatot és szinkronizálást adunk át, majd egy állandót LSBFIRST, amely azt mondja a metódusnak, hogy az első bit legyen a legkisebb jelentőségű bit, majd végigmegyünk a ténylegesen áthelyezni kívánt biteket tartalmazó bájton a shift regiszterbe.

Miután befejeztük a bitek eltolását, ismét elérjük a reteszelő tűt (ezúttal a HIGH-t használva), jelezve, hogy az összes adatot elküldtük. Az írási művelet befejezése után a megfelelő LED kijelző, majd 250 ezredmásodpercig szünetet tart, mielőtt megismétli magát.

16 LED

Most térjünk át egy összetettebb áramkörre, amely egy 74hc595 Arduino-t használ 16 LED-hez.

Részletek

Nagyjából be ebben az esetben Megduplázzuk az összes komponens számát, kivéve természetesen az Arduino Uno-t:

  • Arduino UNO (x1)
  • 74HC595 műszakregiszter (x2)
  • LED-ek (x16)
  • 220 ohmos ellenállások (x16)
  • Vezetékek/jumperek
  • Két fejlesztő kártya (az egyik 400 tűs, a másik 830 tűs)
  • Potenciométer a fényerő szabályozásához (opcionális)

Csatlakozási diagram

A kapcsolási rajz már nagyobb, mint a 8 LED-nél és egy 74HC595 váltóregiszternél.

Szerelje össze az áramkört a fenti ábra szerint, és csatlakoztassa az első műszakregisztert az alábbiak szerint:

  • GND (8-as érintkező) a földhöz
  • Vcc (16-os érintkező) - 5V
  • OE (13-as érintkező) a földhöz (GND)
  • MR (10-es érintkező) – 5 V
  • DS (14-es tű) - az Arduino 11-es érintkezője
  • SH_CP (11-es érintkező) az Arduino 12-es érintkezőjére
  • ST_CP (12-es érintkező) az Arduino 8-as érintkezőjéhez

Csatlakoztassa a második műszakregisztert ugyanígy, de csatlakoztassa a DS-t (14-es érintkező) a regiszter első 9-es érintkezőjéhez. Ezután kösse össze az 1, 2, 3, 4, 5, 6, 7 és 15 érintkezőket mind a regiszterekből, mind a LED-ekből. Ez a kapcsolat az összes érintkezőt mindig aktívvá és címezhetővé teszi, azonban az Arduino bekapcsolásakor egyes LED-ek bekapcsolhatnak. Erre az a megoldás, hogy az MR-t (10-es érintkező) és az OE-t (13-as érintkező) közvetlenül az Arduino-hoz kötjük, de így az arduinóból 2 érintkezőt kell feláldozni.

További műszakregiszterek hozzáadásához kösse össze őket második regiszterként. Az MR és OE érintkezőket mindig közvetlenül az Arduino érintkezőhöz, a DS érintkezőt pedig az előző regiszterhez csatlakoztassa. Ha módosítani szeretné a LED-ek fényerejét, csatlakoztasson egy potenciométert a fenti képen látható módon, hogy szabályozza az összes LED ellenállását. Ez azonban nem kötelező, és megteheti nélküle is.

Vázlat az Arduino számára

A vázlatváltozatokat általában korlátozott számú műszakregiszterre tervezték, mert Erre nincs univerzális funkció/módszer. Ezt a kódot az alábbiakat úgy alakítottuk át, hogy korlátlan számú műszakregisztert használhasson:

int reteszelőtű = 8; int clockPin = 12; int dataPin = 11; int számOfRegisters = 2; bájt* registerState; long effectId = 0; long prevEffect = 0; hosszú hatás Ismétlés = 0; hosszú hatás Sebesség = 30; void setup() ( //Tömb inicializálása registerState = új bájt; for (size_t i = 0; i< numOfRegisters; i++) { registerState[i] = 0; } //set pins to output so you can control the shift register pinMode(latchPin, OUTPUT); pinMode(clockPin, OUTPUT); pinMode(dataPin, OUTPUT); } void loop() { do{ effectId = random(6); } while (effectId == prevEffect); prevEffect = effectId; switch (effectId) { case 0: effectRepeat = random(1, 2); break; case 1: effectRepeat = random(1, 2); break; case 3: effectRepeat = random(1, 5); break; case 4: effectRepeat = random(1, 2); break; case 5: effectRepeat = random(1, 2); break; } for (int i = 0; i < effectRepeat; i++) { effectSpeed = random(10, 90); switch (effectId) { case 0: effectA(effectSpeed); break; case 1: effectB(effectSpeed); break; case 3: effectC(effectSpeed); break; case 4: effectD(effectSpeed); break; case 6: effectE(effectSpeed); break; } } } void effectA(int speed){ for (int i = 0; i < 16; i++){ for (int k = i; k < 16; k++){ regWrite(k, HIGH); delay(speed); regWrite(k, LOW); } regWrite(i, HIGH); } } void effectB(int speed){ for (int i = 15; i > < i; k++){ regWrite(k, HIGH); delay(speed); regWrite(k, LOW); } regWrite(i, HIGH); } } void effectC(int speed){ int prevI = 0; for (int i = 0; i < 16; i++){ regWrite(prevI, LOW); regWrite(i, HIGH); prevI = i; delay(speed); } for (int i = 15; i >= 0; i--)( regWrite(prevI, LOW); regWrite(i, HIGH); prevI = i; késleltetés(sebesség); ) ) void effectD(int speed)( for (int i = 0; i< 8; i++){ for (int k = i; k < 8; k++) { regWrite(k, HIGH); regWrite(15 - k, HIGH); delay(speed); regWrite(k, LOW); regWrite(15 - k, LOW); } regWrite(i, HIGH); regWrite(15 - i, HIGH); } } void effectE(int speed){ for (int i = 7; i >= 0; i--)( for (int k = 0; k<= i; k++) { regWrite(k, HIGH); regWrite(15 - k, HIGH); delay(speed); regWrite(k, LOW); regWrite(15 - k, LOW); } regWrite(i, HIGH); regWrite(15 - i, HIGH); } } void regWrite(int pin, bool state){ //Determines register int reg = pin / 8; //Determines pin for actual register int actualPin = pin - (8 * reg); //Begin session digitalWrite(latchPin, LOW); for (int i = 0; i < numOfRegisters; i++){ //Get actual states for register byte* states = ®isterState[i]; //Update state if (i == reg){ bitWrite(*states, actualPin, state); } //Write shiftOut(dataPin, clockPin, MSBFIRST, *states); } //End session digitalWrite(latchPin, HIGH); }

A kód számos effektust ad ehhez a 16 LED-hez. Ha több LED-et szeretne hozzáadni, csatlakoztasson több eltolási regisztert, mint a fenti, és módosítsa az értéket regisztrációk száma a kódban.

Ezt a kódot nem csak LED-ekhez is használhatja, ha csak több tűre van szüksége az Arduino-hoz, használja a regWrite(int pin, bool state) függvényt bármely tű állapotának megírásához. És nincs korlátozva, hogy hány shift regisztert használ, csak módosítsa a numOfRegisters értékét, és a többi már automatizált.

A Shift regisztereket széles körben használják információk tárolására és feldolgozására mikroszámítógépekben. A shift regiszter egy sor flip-flopból áll (egy-egy minden információbithez), amelyek úgy vannak csatlakoztatva, hogy mindegyik flip-flop kimenete a következő bemenetéhez csatlakozik. A regiszterben lévő információ minden órajel impulzussal egy bittel jobbra vagy balra tolódik. Ez az eszköz ideális soros információk feldolgozására (egyszerre egy bitet szállítva), párhuzamos információ (minden bit egyszerre érkezik) soros és soros párhuzamos konvertálására.

A Shift regiszterek az RS, JK vagy D flip-flop segítségével készült SIS eszközökön valósulnak meg, és a köztük lévő különbségek elsősorban a bemeneti és kimeneti adatok feldolgozásának módjával kapcsolatosak. Ez a rész e regiszterek fő típusait írja le.

Rizs. 2.29. Tipikus 4 bites regiszter soros bemenettel.

Rizs. 2.30. 4 bites váltóregiszter működésének időzítési diagramja.

Soros bemeneti eltolási regiszter.

A soros bemeneti eltolási regiszter olyan eszköz, amelyben az adatok szekvenciálisan kerülnek bevitelre, amint az az ábrán látható. 2,29 egy 4 bites shift regiszterhez. Ebben az esetben D-triggereket használnak. A regiszter a következőképpen működik. A kiindulási helyzetben egy reset impulzus (logikai 0) kerül a „Set to 0” bemenetre, a Q 0 -Q 3 kimeneteket 0-ra állítva. Ezután az első adatbit a soros bemenetre kerül. Az első óraimpulzus felfutó élének kitéve Q 0 D 1 -gyel egyenlő értéket vesz fel. Ezután D 2 kerül a soros bemenetre. A második óraimpulzus bevezető élének kitéve Q 0 =D 2 és Q 1 =D 1 . Ez a folyamat folytatódik, négy órajel impulzus után Q 0 =D 4, Q 1 =D 3, Q 2 =D 3, Q 3 =D 1. A szekvenciálisan érkező bemeneti adatok időzítési diagramja az ábrán látható. 2.30.

Az adatkimenet lehet soros vagy párhuzamos. Ez utóbbi esetben a váltóregiszter soros-párhuzamos átalakítóként működik. Nyilvánvaló, hogy a nagy bitszámmal (nyolcnál több) rendelkező shift regisztereknél a párhuzamos kimenetek nem praktikusak az IC-csomagban található kimenetek nagy száma miatt. Vannak több mint 1000 bites shift regiszterek.

Párhuzamos bemeneti eltolási regiszter

A párhuzamos bemenetű műszakregiszter olyan eszköz, amelybe párhuzamos információs csatornákon keresztül egyidejűleg érkeznek bemenő adatok (2.31. ábra Az adatok a következőképpen íródnak a regiszterbe). Először a regiszter tartalmát nullázzuk egy impulzus (logikai 0) alkalmazásával a „Set to 0” bemenetre. Ezután a D 1 -D 4 jeleket a bemenetekre, és egy impulzust (logikai 1) kap a rögzítési bemenet. Ez azt eredményezi, hogy az előre beállított bemenetek használatával minden regiszterbe információ kerül kiírásra. Ezt követően minden órajel impulzusnál az információ egy bittel jobbra tolódik. Az adatkimenet lehet soros vagy párhuzamos. Sok IC-alapú eltolási regiszter rendelkezik párhuzamos bemenettel és soros kimenettel. Ezeket az eszközöket párhuzamos-soros átalakítóknak nevezzük.

A fent leírt eltolási regiszterekben minden órajel impulzusnál egy irányba történt az eltolás. Sok esetben azonban kívánatos az információ balra és jobbra történő eltolása. Azokat a regisztereket, amelyek rendelkeznek ezzel a képességgel, reverzibilis eltolási regisztereknek nevezzük. Az ilyen regiszterekben az eltolásvezérlés a flip-flop kimeneteinek a megfelelő bemenetekhez való csatlakoztatásával történik, amikor balra vagy jobbra vált. Az eltolás irányát az "Üzemmód" bemenet vezérli. A soros és párhuzamos be- és kimenetekkel rendelkező megfordítható eltolási regisztereket univerzális eltolási regisztereknek nevezzük.

Rizs. 2.31. Tipikus 4 bites shift regiszter párhuzamos kimenettel.

Regisztrálás példa

Az IR1 mikroáramkörben minden bitet egy szinkron kétfokozatú RS trigger képez bemeneti logikával (2.32. ábra). A műszakregiszter lehetővé teszi a következő üzemmódok megvalósítását: információk rögzítése párhuzamos kóddal; váltás jobbra; balra váltani. A regiszter működési módját a VI, V2, C1, C2 bemenetek (1, 6, 9, 8 érintkezők) vezérlik.

Rizs. 2.32. Az IR1 mikroáramkör logikai felépítése

Ha párhuzamos kóddal szeretne írni az információs regiszterbe, helyezzen magas szintű feszültséget a V2 módú vezérlőbemenetre, alacsony szintű feszültséget a C2 bemenetre, és információjeleket a D1 - D8 bemenetekre. A C1, VI bemenetek feszültsége tetszőleges lehet. A párhuzamos kódban rögzített információ jobbra tolásához óraimpulzusok kerülnek a C2 bemenetre (8. érintkező). Ebben az esetben a V2 bemenet feszültségét (6. érintkező) magas szinten kell tartani. Soros kódban bemutatott adatokkal végzett műveletek végrehajtása során a bemeneti információ impulzussorozat formájában kerül a VI információs bemenetre (1. érintkező), óraimpulzusok a C1 szinkronizációs bemenetre (9. érintkező), és alacsony szintű feszültség. a V2, D1 - D8 bemeneteken van fenntartva. Az IS IR1 különböző típusú információrögzítési üzemmódjait a táblázat mutatja be. 2.11.

Balra való váltáskor a V2 üzemmódválasztó bemenetre magas szintű feszültség kerül, amely blokkolja az órajel impulzusok áthaladását a jobbra toláshoz. Ha ebben az esetben egy szám párhuzamos kódja nem kerül a D1 - D8 számjegyek párhuzamos kódjának bemeneteire, hanem az utolsó számjegy kimenete az előző számjegy párhuzamos kódjának bemenetére csatlakozik, a kimenetet az előző számjegy hasonló bemenetével stb., akkor balra váltó regisztert kapunk. A soros kód bemenete ebben az esetben az eltolási regiszter utolsó bitjének párhuzamos kódjának bemenete.

Az IR1 mikroáramkörök használhatók fő elemként az aritmetikai puffermemória eszközökben, késleltető elemként n órajelhez, soros kódok átalakítója párhuzamos és fordítva, frekvenciaosztó, hurkos impulzuselosztó stb.

A regiszterek létrehozásához ezen elemek szekvenciális összekapcsolását használják.

A soros regisztert (shift regiszter vagy shift regiszter) általában a soros kód párhuzamos kódmá alakítására és fordítva használjuk. A soros kód használata azzal jár, hogy nagy mennyiségű bináris információt kell továbbítani korlátozott számú csatlakozó vonalon. A kisülések párhuzamos továbbításakor nagyszámú csatlakozóvezetékre van szükség. Ha a bináris biteket szekvenciálisan, bitenként, egy vezetőn továbbítjuk, akkor a kártyán lévő összekötő vonalak mérete (és a chipcsomagok mérete) jelentősen csökkenthető.

Az 1. ábrán látható egy soros (shift) regiszter sematikus diagramja, amely az alapján összeállított és lehetővé teszi a soros kód párhuzamossá alakítását. Kérjük, vegye figyelembe, hogy ha mind a potenciál alapú triggerek (reteszelő triggerek), mind pedig a az él, akkor csak az élen működő D flip-flop alkalmas szekvenciális (shift) regiszter megvalósítására!


1. ábra Szekvenciális (shift) regiszter áramkör

A shift regiszteren belül a flip-flopok sorba vannak kötve, vagyis az első kimenete a második bemenetére van kötve stb.


A figyelembe vett soros regiszter a 2. ábrán látható.

2. ábra Egy szekvenciális (shift) regiszter grafikus jelölése

A soros (shift) regiszterekben, valamint a párhuzamos regiszterekben lévő órabemenetek kombinálva vannak. Ez biztosítja a szekvenciális (shift) regiszterben szereplő összes flip-flop egyidejű állapotváltozását.

Az első órajel impulzus megérkezése után a D0 bemeneten lévő logikai szint a soros (shift) regiszter első triggerében tárolódik és annak kimenetére kerül, és mivel a második flip-flop bemenetére csatlakozik, a bemenetére. Ha a soros (shift) regisztert D flip-flopra szereljük fel potenciállal működő flip-flopra, akkor ez a bit azonnal a második D flip-flopba kerülne! A mi esetünkben ez nem történik meg, hiszen ekkorra a C órabemenetnél az él már véget ért.

A második órajel impulzus megérkezése után a soros (shift) regiszter második triggerének bemenetén lévő logikai szint eltárolásra kerül és annak kimenetére kerül, és mivel a harmadik flip-flop bemenetére csatlakozik, a bemenetére is. Ezzel egyidejűleg a bemeneti soros kód következő bitje a soros (shift) regiszter első flip-flopjában tárolódik.

A negyedik órajel impulzus megérkezése után a soros (shift) regiszter flip-flopjaiba beírjuk azoknak a biteknek a logikai szintjeit, amelyek szekvenciálisan jelen voltak a D0 bemenetén. Most ezek a bitek használhatók például indikátorokon való megjelenítésre.

Hadd érkezzen egy jel egy soros (shift) regiszter bemenetére, melynek idődiagramja a 3. ábrán látható, akkor ennek a regiszternek a kimeneteinek állapota szekvenciálisan felveszi az 1. táblázatban szereplő értékeket.



3. ábra A műszakregiszter működésének idődiagramja

A 3. ábrán a logikai szintekkel együtt rögzítésre kerülnek azok a bitértékek, amelyek az összekötő vonal mentén továbbítva vannak, vagy a váltóregiszter kimenetein vannak.

Bárszám 1 2 3 1
Q0 1 0 1 1
Q1 X 1 0 1
Q2 X X 1 0
Q3 X X X 1

A szekvenciális (shift) regiszter megvalósítására példaként megnevezhetjük a hazai 1564IR1 mikroáramkört vagy a külföldi 74NS164-et.

A jk flip-flopokat egymás után lehet bekapcsolni a számjegyek sorrendjének megőrzése érdekében. Ezt a kialakítást, az ún műszakregiszterábrán látható. 13.27. A séma az alapján kapta a nevét

Rizs. 13.27. Sorosan kapcsolt JK flip-flopokból álló 4 bites shift regiszter.

annak biztosítása, hogy minden óraimpulzusnál egy új számjegyet kapjon, csúszó a korábban megjegyzett számjegyeket egy helyen, hogy újat helyezzen el.

Ez a nyilvántartás az elven működik először be, először ki(First-In First-Out, FIFO).

Tekintsük az ábrán látható eltolási regiszter működését. 13.27. A visszaállítási vonal először logikai 1-re, majd 0-ra áll vissza. Most tegyük fel, hogy az adatbevitel kezdetben 1, és egy órajel-impulzus-sorozat kerül az órabemenetre. Ebben az esetben az FF1 flip-flop a bemeneten magas, a bemeneten alacsony szinttel rendelkezik, így az első órajel impulzus után a kimenet K a szint magasra van állítva. Tegyük fel, hogy időközben a bemeneti jel visszaállt 0 értékre, és az is marad. A második órajel impulzus során az FF2 bemenetén/flip-flop magas szintje átkerül a kimenetére, és Q 2 a logikai 1 értékét veszi fel. Ugyanakkor a logikai 0 működik az FF1 flip-flop bemenetén / úgy, hogy a második órajel impulzus alacsonyra állítja a kimenetet; ha az adatbevitel 0 marad, a kimenet minden órajel impulzusnál alacsony marad. A logikai 1 bit azonban minden órajel impulzusnál egy bitet továbblép, így négy impulzus után eléri a kimenetet. Q4.Összesen 4 bit bemeneti adat van tárolva. A későbbi órajel impulzusok miatt ezek az adatok elvesznek, míg az újabb adatok megmaradnak.

ábrán látható műszakregiszterben. 13.27, lehetőség van szükség esetén a tárolt adatok párhuzamos formában történő megfigyelésére, hozzáférést biztosítva a kimenetekhez Q v Q 2, Q 3És Q4. Ezt a kialakítást soros bemeneti, párhuzamos kimenetű regiszternek nevezik: az adatokat egyetlen bemeneten keresztül sorosan kell bevinni, ami után párhuzamosan elérhetők a regiszter kimenetein. Ez a soros-párhuzamos átalakítás nagyon gyakori művelet, amelyet például a számítógép lemezéről kiolvasott programbitek párhuzamos kóddá alakítására használnak, amelyeket a fő memóriába visznek be.

Ha minden flip-flop külön beállított bemenettel rendelkezik a közös reset bemeneten kívül, akkor ezeken a bemeneteken keresztül párhuzamosan lehet adatokat bevinni. Az így „betöltött” adatok a Q 4 kimeneten soros formában, óraimpulzusok alkalmazásával fogadhatók. Egy ilyen regiszter párhuzamos-soros átalakítóként szolgál, és gyakran használják a mikroprocesszor által kiadott adatok átalakítására, amelyeket egyidejűleg nagyszámú kimeneten (például 16 kimeneten) megjelenő jelek képviselnek, soros kóddá alakítani a továbbításhoz egyetlen pár vezeték a hálózathoz vagy a modemhez. Az univerzális aszinkron adó-vevő egy népszerű kialakítás, amellyel párhuzamosról sorosra és fordítva lehet konvertálni az adatokat; egy integrált áramkörben tartalmazza a vonali működéshez szükséges váltóregisztereket, vezérlőáramkört és meghajtókat.

Ha az ábrán látható diagramon. 13.27, a Q 4 kimenet az adatbemenetre csatlakozik, ekkor a telepítés bemenetein keresztül párhuzamosan bevihető adatok soha nem hagyhatják el a regisztert, hanem egyszerűen keringenek benne. Ezt az áramkört regiszternek nevezzük ciklikus átvitel vagy gyűrűszámláló. 10 gyűrűszámlálóba kapcsolt, 0-tól 9-ig számozott flip-flop használatával decimális számlálót kaphatunk. Kezdetben a 0-s flip-flop magasra van állítva, a többi pedig nullára áll vissza. A számolandó impulzusok ezután az órabemenetre kerülnek, így minden bemeneti impulzus érkezésével az 1-es logika egyik flip-flopból a másikba kerül. Kilenc impulzus után egy logikai 1-et ír a 9-es triggerszám, és a következő impulzus visszaállítja a kezdeti állapotot. A 9-es számú flip-flop kimenetét egy másik csengőszámláló bemenetére csatlakoztatva tízesek írhatók bele, egy másik csengőszámláló pedig százakat írhat. Az áramkör nyilvánvaló eleganciája ellenére szinte mindig kényelmesebb binárisan számolni, majd a bináris számláló kimenetét decimálisra konvertálni.

A gyűrűmérő egy másik alkalmazása az elosztó cseréje az autó elektronikus gyújtásrendszerében. A gyújtószikra létrehozására szolgáló mechanikus bütykös nyitási és zárási érintkezési pontok helyett óraimpulzusokat generál a motor lendkerékén elhelyezett optikai vagy mágneses érzékelő. Itt egy logikai 1 váltást használunk egy körben egy gyűrűszámlálóban, amely minden motorhengerhez egy számjegy tartozik. Az óraimpulzus fázisa gondosan beállítható úgy, hogy a logika 1 minden fokozaton pontosan a megfelelő időben jelenjen meg a keverék meggyújtásához. A gyújtásidő-korrekció így minden nehézség nélkül beállítható, sőt, ha egyszer beállították, soha nem fog változni, mivel az elektronikus elosztóban nincs mechanikai kopás.

ábrán látható váltóregiszter áramkör. A 13.27 alapul szolgálhat minden típusú eltolási regiszterrel és gyűrűszámlálóval végzett kísérletekhez. Az IC 74LS76 I^-flip-flopként ajánlott: minden mikroáramkör két flip-flopot tartalmaz, amelyeket egy negatív él vált ki, külön beállítási és visszaállítási bemenetekkel. Ennek az áramkörnek a kivezetését a 4. függelék tartalmazza.



Kapcsolódó kiadványok