Какво е сериен регистър за смяна. Какво е регистър? DS – въвеждане на данни

Според часовниковия сигнал, съдържанието на всеки предишен тригер се пренаписва в следващия тригер по ред във веригата. Кодът, съхранен в регистъра, се измества с една цифра към по-високите цифри или към по-малките цифри с всеки тактов цикъл, което дава името на регистрите от този тип.

Във връзка с името на посоката на изместване в регистри за смянаЧесто има объркване. Има два вида преместване: надясно (основният режим, който всеки има регистри за смяна) и наляво (само някои, обратен, имат този режим регистри за смяна). Тези имена отразяват вътрешната структура регистри за смяна(Фиг. 8.14) и пренаписване на сигнали последователно по верига от тригери. В този случай тригерите, съвсем естествено, са номерирани отляво надясно, например от 0 до 7 (или от 1 до 8) за 8-битови регистри. В резултат на това изместването на информацията чрез регистър надясно е изместване към битове с по-високи числа, а изместването на информацията чрез регистър наляво е изместване към битове с по-ниски числа.

Въпреки това, както знаете, във всяко двоично число най-значимите битове са отляво, а най-малко значимите са отдясно. Следователно изместването на двоично число надясно ще бъде изместване към битовете от нисък ред, а изместването наляво ще бъде изместване към битовете от висок ред. Това е противоречие, а не нечие злонамерено намерение, просто се е случило исторически и разработчикът на цифрово оборудване трябва да помни това.


ориз. 8.14.

Стандартната серия цифрови микросхеми включва няколко типа регистри за смяна, различаващи се по възможните режими на работа, режимите на запис, четене и смяна, както и вида на изходните стъпала (2C или 3C). мнозинство регистри за смянаима осем цифри. На фиг. 8.15 показва четири типа микросхеми като пример регистри за смяна.

Регистърът IR8 е най-простият регистри за смяна. Това е 8-битова линия на забавяне, тоест има само един информационен вход, към който се подава серийно изместена информация (по-точно два входа, комбинирани с помощта на функцията 2I), и осем паралелни изхода. Преминаването към изходи с по-високи числа се извършва по предния ръб часовников сигнал C. Има и вход за нулиране –R, при който нулев сигнал нулира всички изходи на регистъра до нула. Таблица на истинатарегистър IR8 е даден в табл. 8.5.


ориз. 8.15.Таблица 8.5. Таблица на истинатасмяна регистър IR8
Входове Изходи
В D1 D2 Q0 Q1 Q7
0 X X X 0 0 0
1 0 X X Не се променяй
1 1 X X Не се променяй
1 0 1 1 1 1 Q0 Q6
1 0 1 0 X 0 Q0 Q6
1 0 1 X 0 0 Q0 Q6

Регистърът IR9 изпълнява обратната функция на регистъра IR8. Ако IR8 преобразува входната серийна информация в изходна паралелна, тогава регистърът IR9 преобразува входната паралелна информация в изходна серийна информация. Същността на смяната обаче не се променя, просто в IR9 всички вътрешни тригери имат паралелни входове и само един, последният тригер, има изход (директен и обратен). Входящият код се записва в регистъра въз основа на нулев сигнал на входа -WR. Преместването се извършва на положителен фронт на един от двата тактови входа C1 и C2, комбинирани

Този преглед е посветен всъщност на начинаещите потребители на Arduino или тези, които искат да се включат в този бизнес. Ще говорим за увеличаване на броя на изходите на микроконтролера с помощта на регистър за смяна и това не изисква големи разходи (в сравнение със закупуването на Arduino Mega, например). Най-простото приложение е да мигате светодиодите, така че нека опитаме това на практика.

Когато започнах да се запознавам с микроконтролерите (всъщност все още продължавам да „започвам да се запознавам“), един от първите въпроси беше: как можете да управлявате същите сто хиляди светодиода само с дузина изхода на контролера? Да, можете да използвате мултиплексиране на сигнали, обратно превключване и много други трикове, но все пак максимално количествоСвързваемите светодиоди са ограничени и трябва да се търси друго решение. И те ми предложиха една от опциите - „вземете един, два, десет чипа за сменен регистър и се забавлявайте“. Беше решено незабавно да ги поръчате и в бъдеще дори да ги сглобите led кубс тяхното използване. Наистина трябваше да се откажа от последното; намерих по-прост вариант, но това е тема на друго ревю.
Поръчах 20 броя 74HC595N наведнъж, за щастие те струват само стотинки. Буквата N в края на маркировката означава, че чипът е в корпус DIP-16, много удобен за експерименти на макет, дори не е нужно да запоявате нищо. Изглежда така:




Каква е тази микросхема? Това е осембитов сериен вход, сериен изход или паралелен изходен регистър за смяна с тригер с ключалка и изход с три състояния.
Казано по-просто, като използвате само 3 изхода на контролера, можете да управлявате 8 изхода на регистъра за преместване. И ако микросхемите са свързани последователно една след друга, тогава броят на контролираните изходи може да се увеличи до всяка разумна граница (не намерих максимален брой, но стотици изглежда се комбинират без проблеми; ако някой знае от какво зависи на ограничено количествомикросхеми, включени в каскадата - би било интересно да разберете в коментарите).
Данните се предават към чипа последователно. Битове 0 и 1 се прехвърлят в регистъра един след друг, битовете се четат, когато пристигне тактов импулс. Предадени 8 бита - получени 8 изходни състояния на изходите на регистъра. Когато 74HC595 е каскадно (ако са необходими 16, 24 и т.н. изхода), данните от първия регистър се прехвърлят към следващия.
Изходът на регистъра може не само да бъде в състояние на логическа 0 или 1, но и да бъде в състояние с висок импеданс, когато изходът е изключен от веригата. Само всички изходи могат да бъдат прехвърлени в това състояние наведнъж. Това се използва рядко, но може да бъде полезно при превключване на управлението към друг контролер, например.

Разпределение на входа/изхода

Q0…Q7 – регистрови изходи, могат да бъдат в състояние 0, 1 или висок импеданс
GND – земя
Q7′ – изход за последователно свързване на регистри.
MR – нулиране на регистъра
SH_CP – вход за часовник
ST_CP – вход за блокиране на данни
OE – вход, преобразуващ изходите от висок импеданс в работно състояние
DS – въвеждане на данни
VCC – захранване 2-6 волта

Остава само да проверим работата; за да направим това, ще съберем верига, която е популярна сред начинаещите. GND (щифт 8) е свързан към маса, Vcc (щифт 16) към 5V захранване, OE (пин 13) към маса, MR (пин 10) към 5V захранване. Регистърът за смяна вече е включен и всички изходи са активни. Сега е време да свържете микросхемата към Arduino: свържете входа за данни DS (щифт 14) към 9-ия цифров изход на Arduino, входа на часовника SH_CP (щифт 11) към 10-ия цифров изход, входа за резе ST_CP (щифт 12 ) към 8-ия щифт на Arduino. Препоръчително е да поставите кондензатор от 0,1 µF между земята и ключалката, за да минимизирате шума.
Остава да свържем светодиодите - чрез резистори 150-300 Ohm ги свързваме от изходите на регистъра към земята. това е всичко Ето една диаграма, която намерих за тези, които харесват визуални материали (моля, имайте предвид, че pinout на истинската микросхема и схематичното изображение на тази диаграма са различни!)


Сглобих схемата на макет и се получи така.

сглобена верига








В Arduino е удобно да се използва функцията shiftOut(), която извежда байт информация към входно/изходния порт последователно (бит по бит). . Зареждаме тестовия код в Arduino и получаваме брояч от 0 до 255 в двоична форма:
int latchPin = 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); } }
Ето как се случи при мен, всичко работи според очакванията:


По този начин, с минимално използване на щифтове на контролера, можете да управлявате голям брой светодиоди (или нещо друго). Всичко би било наред, но ще ви кажа и за недостатъците. Както можете да видите, токът за всеки светодиод трябва да бъде ограничен от резистор, а при изграждането на големи LED матрици това става доста трудоемко. Има още интересно решениеза управление на светодиоди - драйверът DM13A, който е регистър за смяна и също така ограничава тока на всеки изход. Ще ви разкажа за това следващия път и като бонус - първият ми LED куб, 5x5x5, сглобен на опростена елементна база, без използването на 74HC595.

Смятам да си купя +37 Добавяне към любими Ревюто ми хареса +35 +61

Последният път, когато разгледахме опцията за увеличаване на изходите на микроконтролера с помощта на декодерен чип, днес ще разгледаме по-усъвършенствана опция с помощта на регистър за смяна 74HC595. Използвайки само една микросхема, можете да имате допълнителни 8 изхода на ваше разположение, като използвате само 3 крака на микроконтролера. И благодарение на разширяемостта, чрез добавяне на втори чип, броят на изходите може да се увеличи до 16. Ако не е достатъчно, можете да добавите трети и да получите 24 изхода за използване, като този трик може да се повтори колкото пъти ти харесваш. В същото време броят на заетите крака на микроконтролера ще остане 3, красиво!

Така че, нека разгледаме по-отблизо предназначението на щифтовете на микросхемата и да научим как да контролираме регистъра за смяна 74hc595 в Bascom-AVR.

Първо, нека се запознаем с изходите на микросхемата или по-скоро с тяхната функционалност. По-долу е изрезка от листа с данни за 74hc595 с обозначението на щифтовете на микросхемата:


  • Q0…Q7– изходите, които ще контролираме. Може да бъде в три състояния: логическа единица, логическа нула и състояние Hi-Z с висока устойчивост
  • GND- Земята
  • Q7′– изход, предназначен за серийно свързване на регистри.
  • М.Р.– нулиране на регистъра.
  • SH_CP– вход за тактови импулси
  • ST_CP– вход за блокиране на данни
  • О.Е.– вход, който преобразува изходите от HI-Z в работно състояние
  • Д.С.– въвеждане на данни
  • VCC– захранване 5 волта

Регистрирайте логика

Когато е на вход часовник SH_CPпоявява се логически бит, намиращ се на входа на данните Д.С. чете и записва в регистъра за смяна. Този бит се записва в най-малкия бит. Когато следващият импулс пристигне на входа на часовника високо ниво, следващият бит от входните данни се записва в регистъра за смяна. И битът, който е бил записан по-рано, се измества с един бит наляво и неговото място се заема от новопристигналия бит. Следващият тактов импулс ще запише третия бит, а предишните два ще се придвижат по-нататък. Когато всичките осем бита са запълнени и пристигне деветият тактов импулс, регистърът започва да се запълва отново от най-малкия бит и всичко се повтаря отново. Така че данните се появяват на изходите Q0…Q7трябва да ги „щракате“. За да направите това, трябва да приложите логическа към входа ST_CP.

- М.Р.нулира регистъра, настройвайки всички изходи Q0…Q7до състояние на логическа нула. За да извършите нулиране, трябва да приложите логическа нула към този вход и да приложите положителен импулс към входа ST_CP. Много полезна функция, тъй като при подаване на захранване към микросхемата на изхода се появява определена произволна стойност. Когато работите с регистър, на този щифт трябва да се намира логическа единица.

- О.Е.(разрешаване на изхода), ако приложите логическо 1 тук, изходите ще бъдат в състояние HI-Z с високо съпротивление. Когато приложим логическа 0 към този вход, изходите ще бъдат в работно състояние.

- Q7′ предназначени за серийно свързване на сменителни регистри.

Но е по-добре да видите веднъж, отколкото да прочетете два пъти =) така че нека да погледнем анимацията:


Работа с регистъра директно

Когато овладявате работата с непозната микросхема, често е полезно да работите челно, т.е. директно да потрепвате контролите с краката си, това ви позволява да разберете по-добре принципите на работа с тествания субект. И така, следвайки логиката на работа, написах програма, която трябва да изведе регистъра двоично число 10010010

$regfile = "attiny2313.dat"
$кристал = 1000000

Конфиг Portb = Изход

Sh_cpПсевдонимпортб. 3 "крак за тактови импулси
DsПсевдонимпортб. 2 "крак за извеждане на данни
St_cpПсевдонимПортб. 0 крак за „фиксиране“ на данни в регистъра на стопанството


"изход през регистъра на числото 146 (в двоично представяне 10010010)

St_cp= 0 "поставете крака си в режим на запис на данни

Ds= 1 "задайте първия бит
Sh_cp= 0 "даваме импулс към изхода на часовника
Sh_cp= 1

Ds= 0 "задайте втория бит
Sh_cp= 0
Sh_cp= 1

Ds= 0 "задайте третия бит
Sh_cp= 0
Sh_cp= 1

Ds= 1 "задайте четвъртия бит
Sh_cp= 0
Sh_cp= 1

Ds= 0 "задайте петия бит
Sh_cp= 0
Sh_cp= 1

Ds= 0 "задайте шестия бит
Sh_cp= 0
Sh_cp= 1

Ds= 1 "задайте седмия бит
Sh_cp= 0
Sh_cp= 1

Ds= 0 "задайте осмия бит
Sh_cp= 0
Sh_cp= 1

St_cp= 1 "захванете въведените данни

Край


компилираме, вграждаме в микроконтролера или гледаме в симулатора и виждаме нашата комбинация на изхода.


Работи, изпратеният номер се появява на изхода на регистъра!

Работата с регистър по този начин, макар и възможна, е твърде тромава и заема много програмна памет. Но ясно демонстрира цялата методология за работа с тази микросхема. Нека разгледаме по-подходящ метод.

Контролиране на регистъра 74HC595 в Bascom с помощта на командата ShiftOut

Bascom-AVR има страхотен екип за работа с всички видове серийни интерфейси SHIFTOUT
Тази команда сама ще разложи числото на битови компоненти и ще ги изведе последователно към всеки щифт на микроконтролера в същото време, тя може да издава тактови импулси. Точно за работа със сменителни регистри! Синтаксис на командата:

SHIFTOUT Datapin, Clockpin, var, опция


Datapin – микроконтролерен порт за извеждане на данни

Clockpin – микроконтролерен порт за извеждане на тактови импулси

Var – данни, които искаме да изпратим към регистъра

Опция – число от 0 до 3, този параметър избира реда, в който ще се въвеждат данните в регистъра и активното ниво на линията Clock, на което се записва битът:
option=0 – най-значимият бит е първи,Часовник активно ниво ниско
опция=1 –
най-значимият бит е първи, часовник активно ниво високо
опция=2 –
най-малко значимият бит е първи, часовник активно ниво ниско
опция=3 –
най-малко значимият бит е първи, часовник активно ниво високо

В нашия случай, за да работите с регистъра 74HC595, параметърът на опцията трябва да бъде зададен на 1 или 3.

За да заключите данни в регистър, използвайте командата PulseOut. Тази команда извежда импулс към крака на микроконтролера с определена продължителност. Конфигурацията на командата изглежда така:

Сега нека отпечатаме числото 10010001 (145 инча). десетична система) към изхода на регистъра, свързан към микроконтролера съгласно горната диаграма:

$regfile = "attiny2313.dat"
$кристал = 1000000

Dim А катоБайт
Конфиг Portb = Изход

А= 145

Госуб Hc595 "отиваме към подпрограмата за изпращане на данни

Край

Hc595: "рутина за изпращане на данни

Shiftout Портб. 2, Portb. 3, А, 1 "изпратете данни в регистъра
Пулсиране Portb, 0, 5 "заключете данните
Връщане

След като мигате микроконтролера, можете да видите подобна картина; изпратената комбинация от битове е зададена на изхода на регистъра за смяна.


Както можете да видите, управлението на регистъра за смяна 74HC595 в Bascom се състои само от два реда код и не създава никакви затруднения.

Увеличаване на битовата дълбочина

Един от проблемите, които възникват при разработването на микроконтролерни устройства, често е необходимостта да се спестят линии от I/O портове. много периферни устройства, които могат да работят заедно с процесор, изискват голям брой свързващи проводници за предаване на информация. Релевантността на тази задача не е намаляла дори с появата на процесори с голям брой пинове, тъй като периферните устройства също са станали по-сложни. За устройства с дисплей една от възможностите за намаляване на броя на необходимите редове е използването на регистри за смяна.

Преместващият регистър е верига от няколко D-тригера, свързани последователно. Информационният изход на микроконтролера е свързан към първия тригер. С всеки тактов импулс, предаван по отделна линия, нивото на входа на всеки тригер се записва на изхода. В резултат на това сигналът се измества от началото към края на веригата. Ако използвате за свързване на изходните линии след всеки от тригерите, тогава регистърът за смяна ще бъде серийно-паралелен преобразувател. Това означава, че за организиране на всякакви индикатори ще е необходимо минимално да се използват само два пина на микроконтролера.

Понастоящем производителите предлагат голям брой модели на сменен регистър с различни функционални характеристики. По-нататък ще бъдат разгледани само микросхеми със сериен вход и паралелен изход. Можете също така да използвате някои универсални регистрационни модели за описаните цели.

Използване на регистър 74164

Shift регистър

Една от най-простите и най-често срещаните микросхеми, които изпълняват функцията на регистъра за смяна, се считат за модел 74164 (555Р8) и неговите технологични варианти. Този чип е 8-битов регистър със серийно зареждане и паралелен изход. Използвайки 74164, можете относително лесно да получите линеен индикатор от 8 светодиода или един знак седем сегментен индикатор. Ако е необходимо, е възможно да се свържат няколко микросхеми последователно, което ще увеличи броя на изходните линии и свързаните към тях индикатори.

Изходният ток на всяка линия от текущите варианти 74ACT164 и 74HCT164 е 25mA, което позволява директно свързване на единични светодиоди с ниска мощност или седемсегментни индикатори. Времето на цикъла на тези микросхеми може да бъде само 15 ns, което съответства на възможността за работа при честота от 66 MHz. Като се има предвид, че подобни или по-високи работни честоти на процесорите са рядкост, за генериране на тактови импулси е достатъчно просто да включите и изключите изхода на контролера, без никакво забавяне, за да заредите този регистър за смяна, са достатъчни два реда: DATA и CLK. Това ви позволява да използвате само две линии на микроконтролера за управление на устройството за показване. Освен това в много случаи може да няма значение колко микросхеми са свързани последователно и съответно колко индикатора контролира контролерът.

Има много опции за използване на 74164. Няколко от тях могат да бъдат подчертани. Първият, горепосоченият индикатор се основава на няколко светодиода. Вторият е един индикатор от седем сегмента или линия от тях. Пример за линия от индикатори е показан в статията - Термометър на микроконтролера PIC12F629.

Програмирането на индикация с помощта на регистър за смяна също не е много трудно. Особено ако микроконтролерът изпълнява такава операция като преместване на байт през бит за пренасяне. Като проверите този бит, можете да определите нивото, което трябва да бъде зададено на линията за данни. Чрез циклично повтаряне на такова изместване и генериране на тактови импулси, можете напълно да заредите регистъра за изместване, който може да бъде динамична индикационна верига, когато, за да се намали броят на използваните линии на микропроцесора, паралелният изход към отделните сегменти се заменя с. сериен, използващ сериен към паралелен преобразувател. Същият преобразувател може да се използва във веригата за включване на LCD индикатор на базата на HD44780.

Използване на регистри 74595 и 4094

Използването на регистри за смяна ви позволява да изграждате големи вериги с помощта на LED индикатори. Но ако индикаторите консумират голям ток (състоят се от много отделни светодиоди), изходният сигнал на регистъра става недостатъчен. За да подобрите сигнала, можете да използвате различни схеми, състоящ се от отделни транзистори или възли. Най-простият и печеливш начин в този случай е да използвате чипа ULN2803, който съдържа 8 транзисторни ключа. Всеки превключвател може да превключва ток до 500 mA при напрежение до 50 V, което ви позволява да свържете към него до няколко десетки отделни светодиоди, лампи с нажежаема жичка с ниска мощност или сегменти от големи матрични индикатори. Единствената разлика от горните диаграми ще бъде използването на LED индикатори с общ анод, тъй като ULN2803 е по същество превключвател с ниска страна. Въпреки всичките си предимства, чипът 74164 има някои недостатъци. На първо място, те включват директно свързване на изходите на веригата към изходните линии на тригерите. В системите с бавни светодиодни дисплеи, когато зареждате регистър, можете да наблюдавате движението на информацията от вход към изход под формата на външно осветяване на сегменти. В случай на чести актуализации на информация, такова осветление причинява малко неприятни усещания. За да го елиминирате, трябва да използвате регистри, оборудвани с изходно резе. Примери за такива елементи са микросхемите 74595 и 4094. Всяка от тях има допълнителен входен вход SCLK. При непроменен принцип на зареждане информацията на изхода на тези устройства може да се появи само след преминаване на импулса този вход. Това решение изисква използването на допълнителен щифт на микроконтролера, но ви позволява да изграждате индикатори с голям брой сегменти, без появата на различни неприятни ефекти. Особено полезно е да се използват регистри, оборудвани с ключалки, във връзка с работещи микроконтролери по-ниски честотиили от вътрешни генератори.

Използването на регистри за смяна донякъде усложнява схемата на готовото устройство, но позволява използването на минимум изходи на микроконтролера и има много други предимства. Освен всичко друго, използването на горните решения ви позволява да опростите програмирането и да създадете многоцифрени индикатори без големи разходи.

Нямате права да публикувате коментари

За изграждане на регистри се използва последователно свързване на тези елементи.

Сериен регистър (регистър за смяна или регистър за смяна) обикновено се използва за преобразуване на сериен код в паралелен код и обратно. Използването на сериен код е свързано с необходимостта от предаване на голям брой двоична информациянад ограничен брой свързващи линии. При паралелно предаване на разряди е необходим голям брой свързващи проводници. Ако двоичните битове се предават последователно, бит по бит, по един проводник, тогава размерът на свързващите линии на платката (и размерът на пакетите с чипове) могат да бъдат значително намалени.

Схематична диаграма на сериен (изместващ) регистър, сглобен на базата на и позволяващ преобразуването на сериен код в паралелен, е показана на Фигура 1. Моля, имайте предвид, че ако и тригери, базирани на потенциал (тригери с резе), и тригери, работещи на ръба, тогава само D тригери, работещи на ръба, са подходящи за прилагане на последователен (изместващ) регистър!


Фигура 1. Схема на последователен (изместващ) регистър

Вътре в регистъра за смяна тригерите са свързани последователно, т.е. изходът на първия е свързан към входа на втория и т.н.


Разглежданият сериен регистър е показан на фигура 2.

Фигура 2. Графично обозначение на последователен (изместващ) регистър

Входовете за часовник в последователни (изместващи) регистри, както и в паралелни регистри, се комбинират. Това осигурява едновременната промяна на състоянието на всички тригери, включени в последователния (изместващ) регистър.

Преобразуването на сериен код в паралелен в сериен (шифт) регистър се извършва по следния начин. Индивидуални битове двоична информация се подават последователно на входа на преместващия регистър D0. Всеки бит е придружен от отделен тактов импулс, който се прилага към тактовия вход на серийния регистър C.

След като пристигне вторият тактов импулс, логическото ниво, присъстващо на входа на втория тригер на серийния (променлив) регистър, се съхранява в него и отива на неговия изход, и тъй като е свързано към входа на третия тригер, също към неговия вход. В същото време следващият бит от входния сериен код се съхранява в първия тригер на серийния (сместващ) регистър.

След пристигането на четвъртия тактов импулс, логическите нива на битовете, които са били последователно присъстващи на неговия вход D0, ще бъдат записани в тригерите на серийния (променлив) регистър. Сега тези битове могат да се използват например за показване на индикатори.

Нека сигналът пристигне на входа на сериен (смяна) регистър, чиято времева диаграма е показана на фигура 3, тогава състоянието на изходите на този регистър последователно ще приеме стойностите, записани в таблица 1.



Фигура 3. Времева диаграма на операцията в регистъра за преместване

На фигура 3, заедно с логическите нива, се записват битовите стойности, които се предават по свързващата линия или присъстват на изходите на регистъра за смяна.

Номер на лентата 1 2 3 1
Q0 1 0 1 1
Q1 X 1 0 1
Q2 X X 1 0
Q3 X X X 1

Като пример за внедряване на последователен (изместващ) регистър може да се назове вътрешната микросхема 1564IR1 или чуждата 74NS164.