Сдвиговый регистр принцип работы

З.Ы.
Кружок на входе регистра означает, что вход инверсный. Т.е. подал ноль — сработало
Треугольник на входе показывает по какому фронту произойдет срабатывание. Запомнить просто: _/ _ — это, типа, импульс. А треугольник, как стрелочка, указывает на нужный фронт. ->_/ _ передний (восходящий фронт) и _/ _ ИнтерфейсЦифра

От МК, как видно, требуется только четыре выхода. Одним (RESET) мы сбрасываем состояние регистра. Из второго (Data) побитно вылазит байтик, а тактовый CLC обеспечивает продвижение битов по регистру. Самих регистров тут три. Они сцеплены паровозом. Когда переполняется первый, то биты из него вылазят во второй, потом в третий. Итого, 24 вывода.
Катоды диодов подключены все вместе через транзистор и как только будет слово мы подаем сигнал Ready и зажигаем всю эту ботву.

Наполнять регистр просто:
1) Поднимаем и держим RESET в 1
2) Выдаем первый (старший) бит на Data.
3) Опускаем в 0 и поднимаем в 1 тактовый выход. На восходящем фронте происходит занос в регистр и сдвиг всей цепочки на один шаг.
4) Повторить со второго пункта пока все биты не выдадим.

А для сброса достаточно уронить Reset в ноль на пару микросекунд.
Все просто 🙂

З.Ы.
Кружок на входе регистра означает, что вход инверсный. Т.е. подал ноль — сработало
Треугольник на входе показывает по какому фронту произойдет срабатывание. Запомнить просто: _/ _ — это, типа, импульс. А треугольник, как стрелочка, указывает на нужный фронт. ->_/ _ передний (восходящий фронт) и _/ _ ИнтерфейсЦифра

Наиболее простая функция регистров — это запоминание числа и его длительное хранение. Эти устройства так и называются – регистры хранения. Вот простейший пример.

Регистр это устройство, выполненное на триггерах для выполнения ряда действий с двоичными числами. Для тех, кто не знает, что такое триггер, рекомендуем познакомиться с простейшим RS-триггером.

Наиболее простая функция регистров — это запоминание числа и его длительное хранение. Эти устройства так и называются – регистры хранения. Вот простейший пример.

На входы D0 – D2 подаётся число, которое необходимо сохранить. Как только на входе С появляется импульс синхронизации, число записывается в триггер, изменяя их состояние. На рисунке показан трёхразрядный регистр хранения. При подаче на входы числа 1112 оно же появится на прямых выходах триггеров (Q0Q2). На инверсных выходах ( Q0 — Q2) будет, естественно 0002. Сигналом R (Reset) или сброс, триггеры устанавливаются в нулевое состояние.

Обычно используются регистры, состоящие из 4, 8, или 16 триггеров. Изображение четырёхразрядного регистра на принципиальных схемах может быть таким.

На рисунке не показаны инверсные выхода триггеров и сигнал R. Регистры всегда обозначаются латинскими буквами RG. Если регистр сдвигающий, то под обозначением рисуется стрелка направленная влево, вправо или двойная.

Сдвигающие регистры или регистры сдвига.

Регистр сдвига это устройство, состоящее из нескольких последовательно соединённых триггеров, число которых определяет разрядность регистра. Регистры широко используются в вычислительной технике для преобразования кодов. Параллельного в последовательный и наоборот.

Кроме того сдвигающие регистры являются основой (АЛУ) арифметико-логического устройства, так как при сдвиге записанного в регистр двоичного числа на один разряд влево производится умножение числа на два, а при сдвиге числа на один разряд вправо число делится на два. Поэтому наибольшее распространение получили реверсивные или двунаправленные регистры.

При поступлении следующего тактового импульса уровень, присутствующий на входе второго триггера запоминается в нём и поступает на вход третьего триггера. Одновременно следующий информационный бит запоминается в первом триггере. После прихода четвёртого тактового импульса в четырёх триггерах регистра будут записаны логические уровни, которые последовательно поступали на вход D0.

Допустим это уровни 01102. Тогда это двоичное число можно отобразить, подключив к выходам триггеров светодиоды. Так рассмотренный регистр изображается на принципиальной схеме.

Видно, что на условном изображении присутствует стрелка — указатель того, что это сдвиговый регистр.

Рассмотрим, как работает четырёх разрядный универсальный регистр сдвига К155ИР1 (аналог — SN7495N). Вот его внутреннее устройство.

Регистр содержит четыре D-триггера, которые соединены между собой с помощью дополнительных логических элементов И – ИЛИ, которые позволяют реализовать различные функции. На схеме:

V2 – вход управления. С его помощью выбирается режим работы регистра.

Q1 – Q4 выходы триггеров с которых снимается параллельный код.

V1 – вход для подачи последовательного кода.

C1, C2 – тактовые синхроимпульсы.

D1 – D4 – входы для записи параллельного кода.

Алгоритм работы регистра следующий. Если на вход V2 подать низкий потенциал, тактовые импульсы на C1, а на вход V1 подавать информационные биты, то регистр осуществляет сдвиг вправо. После приёма четырёх разрядов на выходах триггеров Q1 – Q4 мы получаем параллельный код. Таким образом осуществляется преобразование последовательного кода в параллельный.

Для обратного преобразования параллельный код записывается по входам D1 – D4, с подачей на вход V2 высокого потенциала и тактовых импульсов на вход С2. Затем подавая на вход V2 низкий потенциал, а тактовые импульсы на вход С1 мы сдвигаем записанный код, а с выхода последнего триггера снимается последовательный код.

По своей структуре это один из самых простых регистров сдвига.

На таблице истинности хорошо видно, как изменяется двоичный код при поступлении шести тактовых импульсов.

N Q2 Q1 Q0
1 0 0 1
2 0 1 1
3 1 1 1
4 1 1 0
5 1 0 0
6 0 0 0

Теперь вы знаете, что такое регистр и как он может использоваться на практике. Основа любого регистра — это триггер. Число триггеров в регистре определяет его разрядность. Те, кто увлекается микроконтроллерами знает, что важнейший элемент любого микроконтроллера, будь то PIC, AVR, STM или MSP, это регистр.

Сдвиговый регистр — очень распространенное устройство, которое часто применяется для упрощения работы с сегментными индикаторами, с линейками и с матрицами светодиодов. Все эти устройства состоят из множества светодиодов, и если управлять ими напрямую, потребуется занять много выводов контроллера. К примеру, для подключения обычного сегментного индикатора необходимо задействовать восемь выводов. Два таких индикатора займут уже 16 ног Ардуино.

Сдвиговый регистр — очень распространенное устройство, которое часто применяется для упрощения работы с сегментными индикаторами, с линейками и с матрицами светодиодов. Все эти устройства состоят из множества светодиодов, и если управлять ими напрямую, потребуется занять много выводов контроллера. К примеру, для подключения обычного сегментного индикатора необходимо задействовать восемь выводов. Два таких индикатора займут уже 16 ног Ардуино.

Регистр позволяет нам увеличить количество цифровых выводов микроконтроллера, и мы сможем управлять любым количеством светодиодов, реле, зуммеров и любых других цифровых устройств.

Считывать данные из регистра можно одновременно из всех ячеек. Именно это его свойство помогает нам работать с кучей светодиодов.

Эта функция отправляет регистру состояние всех разрядов сразу. Это пригодится для управления семисегментом (например). Но, чтобы использовать регистр как расширитель портов, нужно управлять каждым разрядом по-отдельности (аналогично функции digitalWrite()):

Сдвиговый регистр — это набор последовательно соединённых триггеров (обычно их 8 штук). В отличии от стандартных регистров, сдвиговые поддерживают функцию сдвига вправо и влево. (т. е. переписывание данных с каждого предыдущего триггера на следующий по счёту).

Функционал и назначение у сдвиговых регистров довольно велик. Сегодня мы познакомим одного из них с Arduino (Отличный способ множить выходы у Arduino: занимаем 3, получаем 8).

Наверное самая популярная микросхема, представляющая собой такой регистр — это 74HC595.

— Работает на интерфейсе SPI: ноги DS, ST_CP, SH_CP — это шины управления. Соответственно: шина данных(MOSI), защёлка(SS) и тактовая линия(SCK). Подключаем на любые 3 контакта Arduino (библиотека SPI в коде не будет задействована). У меня это 12, 10, 13 выходы Arduino (стандарт).

— Ноги Q0, Q1, . Q7 — это выходы регистра (разряды). Для того, чтобы следить за состоянием каждого из них, повесим на каждый вывод по светодиоду (с последовательно соединённым резистором. Номинал от 150 до 330 Ом)

— VCC и GND — это питание. Подключаем к +5v и GND.

— выход Q7` не трогаем (предназначен для последовательного соединения таких регистров)

— MR — это сброс. Подключаем к +5v (сброс не активен).

— ну и OE притягиваем к земле (подключаем к контакту GND).

Получается вот, такая схема:

На BreadBoard можно разместить вот, так:

Теперь к коду:

— как говорилось ранее, библиотека SPI использоваться не будет. Есть удобная функция shiftOut().

для начала именуем наши пины (тактовая линия — clock, данные — data, защёлка — latch):

потом в void setup() обозначаем их как выходы и сразу ставим защёлке высокий уровень, чтобы регистр не принимал сигналов:

теперь давайте попробуем что-нибудь отправить на регистр:

— для начала ставим LOW на защёлку (начинаем передачу данных. Теперь регистр принимает сигналы с Arduino).

— потом отправляем данные (т. е. отправляем байт в цифровом или двоичном виде. В двоичном проще, т. к. каждый из 8 битов отвечает за свой разряд в регистре. Проще сориентироваться глазами):

Для начала отправим байт 0b10000000; (должен будет загореться первый светодиод):

— и в конце выставляем HIGH на защёлку (заканчиваем передавать данные).

В итоге весь наш код:

Теперь вгружаем в ардуину. Результат должен быть таким (зажёгся первый светодиод):

(если у вас зажёгся не первый, а последний светодиод, то в функции shiftOut поменяйте LSBFIRST на MSBFIRST и всё станет на свои места).

Итак, получилось! Предлагаю создать функцию для того, чтобы каждый раз не писать эти 3 СТРОЧКИ:

Я назову её: sendbyte;

Эта функция отправляет регистру состояние всех разрядов сразу. Это пригодится для управления семисегментом (например). Но, чтобы использовать регистр как расширитель портов, нужно управлять каждым разрядом по-отдельности (аналогично функции digitalWrite()):

— Мы можем отправлять регистру только полный байты (8 бит — 0b00000000). Если отправить не 8, а 5 бит (например: 0b00000000), то регистр будет ждать недостающие 3 бита. Значит, что когда мы хотим изменить состояние одного разряда регистра (включить его, или выключить) мы должны, по сути, послать ранее отправленный байт, с изменением на один бит.

(P. S.: Сейчас долгое и нудное объяснение (новичкам), кому не интересно, спуститесь чуть ниже :);

— Итак, сначала создаём, так называемую (мною), базу данных, в которой будет храниться состояние каждого разряда (включен(HIGH) или выключен(LOW)). тип: boolean:

Только что у нас появился массив переменных;

Каждая переменная в данном массиве обозначает свой разряд (в нулевой (по счёту) будет храниться состояние 1 разряда, второй — 3-го, и т. д.)

— Теперь напишем функцию (я назову её: sendpin). Она будет принимать 2 значения: номер разряда, и уровень, который нам надо этому разряду приписать: высокий(HIGH) или низкий(LOW).

— из-за того, что счёт начинается с нуля, нам придётся называть первый пин нулевым. Чтобы это исправить (мы будем писать как есть(первый, значит первый), а Arduino будет сама отбавлять один), Я написал:

— Затем отмечаем изменения в базе данных:

Теперь надо сформировать из 8 битов байт и отправить его на регистр.

— для начала создаём переменные:

value — тот байт, который будем отправлять. (по умолчанию его нужно сделать нулём):

add — это переменная, которая будет хранить в себе байт текущего разряда. для первого разряда это байт 1 (0b10000000);

теперь нам нужно прокрутить в базе данных все 8 переменных и сформировать байт (делать это будем с помощью цикла for():

Итак, каждый раз мы проверяем очередной разряд в базе данных. Если он должен иметь высокий уровень, то мы прибавляем к value add и переходим на следующий разряд в цепочке (как бы сдвигаемся на разряд выше (левее). Т. е., в двоичном коде всё просто: было так: 0b01000000; сдвинули единичку влево и получилось так: 0b10000000. А вот в цифровом виде всё по-другому. Сдвиг влево аналогичен умножению на 2 (а вправо, кстати, — делению на 2)). Получается примерно так:

Теперь остаётся только послать value на регистр:

В принципе, если понять, то всё очень просто.

Итак, давайте попробуем включить 2, 4, 6, и 8 разряды отдельно (4 раза напишем в цикле нашу функцию):

И кстати, в setup-e нужно очистить регистр (послать 0).

Переводить все выходы в состояние логического нуля. Чтобы сбросить регистр нужно подать логический ноль на этот вход и подать положительный импульс на вход STCP.
Подключаем этот выход через резистор к питанию микросхемы и при необходимости замыкаем на землю.

Входы 74HC595:

Вход переводящий выходы из высокоимпедансного состояние в рабочее состояние. При логической единице на этом входе выходы 74HC595 будут отключены от остальной части схемы. Это нужно например для того чтобы другая микросхема могла управлять этими сигналами.
Если нужно включить в рабочее состояние микросхеме подайте логический ноль на этот вход. А если в принципе не нужно переводить выходы в высокоимпедансное состояние – смело заземляйте этот вывод.

MR — сброс регистра

Переводить все выходы в состояние логического нуля. Чтобы сбросить регистр нужно подать логический ноль на этот вход и подать положительный импульс на вход STCP.
Подключаем этот выход через резистор к питанию микросхемы и при необходимости замыкаем на землю.

DS – вход данных

Последовательно подаваемые сюда данные будут появляются на 8-ми выходах регистра в параллельной форме.

SHCP – вход для тактовых импульсов

Когда на тактовом входе SHCP появляется логическая единица, бит находящийся на входе данных DS считывается и записывается в самый младший разряд сдвигового регистра. При поступлении на тактовый вход следующего импульса высокого уровня, в сдвиговый регистр записывается следующий бит со входа данных. Тот бит который был записан ранее сдвигается на один разряд (из Q0 в Q1) , а его место занимает вновь пришедший бит. И так далее по цепочке.

STCP – вход «защёлкивающий» данные

Что бы данные появились на выходах Q0…Q7 нужно подать логическую единицу на вход STCP. Данные поступают в параллельный регистр который сохряняет их до следующего импульса STCP.

Последовательные регистры, кроме хранения, могут преобразовывать последовательный код в параллельный или наоборот. В последовательных регистрах триггеры соединины последовательно смотри рисунок ниже.

Что такое регистр. Основой функциональной единицей построения регистров являются RS-триггеры или Д-триггеры.

В этой схеме цифровой код поступает на D-вход триггеров. Запись возможна при наличии логической единицы на вход С. Записанная числовая последовательность снимается с выходов Q. Параллельные регистры используются для хранения цифровых данных в виде параллельного двоичного кода, а также для преобразования прямого в обратный код или наоборот.

Последовательные регистры, кроме хранения, могут преобразовывать последовательный код в параллельный или наоборот. В последовательных регистрах триггеры соединины последовательно смотри рисунок ниже.

Внутри сдвигового регистра, как мы видим все триггеры соединены последовательно, то есть выход первого подключен ко входу второго и т.п.

При поступлении тактового импульса код, находящийся в регистре, сдвигается на один разряд. Т.е для нашей схемы, сдвиг кода идет вправо (в направлении младших разрядов).

При подаче следующего тактового импульса на входы синхронизации уровень, на входе второго триггера запоминается в нем и следует на вход третьего триггера. Одновременно следующий бит запоминается в первом триггере и т.д.

Рассмотрим, работу четырёх разрядного универсальный регистра на микросборке К155ИР1 (SN7495N), который может работать как со сдвигом вправо так и влево.

К155ИР1 несет в себе четыре D-триггера, связанные дополнительно между собой с помощью логических элементов И – ИЛИ, позволяюших расширить базовые функции:

Алгоритм работы следующий. Если на V2 подать низкий уровень, тактовые импульсы на первый вход синхронизации C1, а на V1 подавать биты информации, то регистр работает со сдвигом вправо и после приёма четырех разрядов на выходах Q1 – Q4 мы получим параллельный код.

Для обратного преобразования данных параллельный код записывается на D1 – D4, на V2 подают высокий уровень, а тактовых импульсы следуют уже на второй вход С2. Затем подавая на V2 низкий уровень, а синхроимпульсы на С1 мы сдвигаем записанный код, а с выхода последнего триггера идет последовательный код.

Условно-графическое обозначение параллельного, сдвигового и реверсивного регистров на схемах рассмотрено ниже:

Помимо уже перечисленных функций, регистры могут выполнять арифметические и логические операции, временную задержку и даже деление частоты. Сдвиговые регистры в отечественном варианте представлены микросборками: 133ИР1, К155ИР1, КМ155ИР1, 134ИР1

Применяя универсальный сдвигающий регистр ИР1, можно собрать многоразрядные регистры, для этого выход последнего разряда подсоединяем к входу VR последующего. Пример построения двенадцатиразрядного сдвигающего регистра показан чуть ниже.

Если использовать дополнительно элемент «НЕ», можно сделать делитель частоты. На схеме ниже приведены делители частоты на 2, 3, 4, 5, 6, 7. При этом сигнал на L=0.

Импульсы следуют на вход синхронизации С1, а выходные импульсы идут с выхода Q старшего разряда, включенные через инвертор ОС со входом VR.

Отечественная микросборка К134ИР2 испоьзуется для хранения восьмиразрядного кода, который записывается последовательно через инверсный вход V. Для считывания кода в прямом виде используют инверсный выход, для считывания в инверсии — прямой. Считывани и запись, осуществляются поразрядно с поступлением фронта каждого последующего тактового импульса на тактовый вход С. Обнуление происходит за счет подачи напряжения логического 0 на вход сброса.

Микросхема 134ИР8, КР134ИР8, 533ИР8, КМ555ИР8, КР1533ИР8 для хранения восьмиразрядных данных и преобразования их из последовательного в параллельный вид. Запись осуществляется через любой из входов VR по тактовому импольсу. Считывание идет с выходов Q1-Q8 или поразрядно с выхода Q8.

Конструкция тахометра использует 8-разрядный сдвиговый регистр 74HC595 с ЖК дисплеем 16х2.

Для того, чтобы оценить ресурс, необходимо авторизоваться.

Для того, чтобы оценить ресурс, необходимо авторизоваться.

В пособии изложены принципы функционирования основных узлов цифровой автоматики. Предложен комплекс практических заданий для закрепления студентами теоретического материала и навыков синтеза электронных схем на основе цифровых устройств. Пособие подготовлено на кафедре промышленной и медицинской электроники Томского политехнического университета и предназначено для студентов, обучающихся по направлениям 210100 «Электроника и наноэлектроника» и 201000 «Биотехнические системы и технологии».

Выход данных при этом может быть как последовательным так и параллельным. В последнем случае сдвиговый регистр работает как последовательно-параллельный преобразователь. Очевидно, для сдвиговых регистров, имеющих большое число разрядов (более восьми), параллельные выходы нецелесообразны из-за большого количества выходов в корпусе ИС. Существуют сдвиговые регистры, имеющие более 1000 разрядов.

Сдвиговые регистры реализуются на СИС – устройствах, выполненных с применением RS-, JK-, или D – триггеров, и различия между ними главным образом связаны с методом обработки входных и выходных данных. В данном разделе описываются основные типы этих регистров.

Рис. 2.29. Типичный 4 х разрядный регистр с последовательным входом.

Рис. 2.30. Временная диаграмма работы 4 х разрядного сдвигового регистра.

Сдвиговый регистр с последовательным входом.

Выход данных при этом может быть как последовательным так и параллельным. В последнем случае сдвиговый регистр работает как последовательно-параллельный преобразователь. Очевидно, для сдвиговых регистров, имеющих большое число разрядов (более восьми), параллельные выходы нецелесообразны из-за большого количества выходов в корпусе ИС. Существуют сдвиговые регистры, имеющие более 1000 разрядов.

Сдвиговый регистр с параллельным входом

Рис. 2.31. Типичный 4-разрядный сдвиговый регистр с параллельным выходом.

Пример регистра

В микросхеме ИР1 каждый разряд образован синхронным двухступенчатым триггером RS с логикой на входе (рис. 2.32). Регистр сдвига позволяет реализовать следующие режимы работы: запись информации параллельным кодом; сдвиг вправо; сдвиг влево. Управление режимом работы регистра осуществляется по входам VI, V2, С1, С2 (выводы 1, 6, 9, 8).

Рис. 2.32. Логическая структура микросхемы ИР1

Микросхемы ИР1 могут быть использованы в качестве основного элемента в арифметических устройствах буферной памяти, элемента задержки на n тактов, преобразователя последовательных кодов в параллельные и наоборот, делителя частоты, закольцованного распределителя импульсов и т. д.

Целью работы является изучение принципа работы схем триггерных регистров и приобретение практических навыков в выполнении микроопераций на регистрах в статическом режиме.

3 Задание к работе

3.1 Исследовать параллельный регистр

Сконфигурировать ПЛИС в соответствии с рисунком 3.1.

Рисунок 3.1 – Схема 4-х битного параллельного регистра

Записать целые десятичные числа от 0 до 15 в двоичной системе счисления в регистр и считать их. Заполнить таблицу 3.1.

Таблица 3.1 – Коды, записанные в параллельный регистр

Записываемое десятичное число Считанное из регистра двоичное число
0
1
.
15

3.2 Исследовать последовательно-параллельный регистр

Сконфигурировать ПЛИС в соответствии с рисунком 3.2.

Рисунок 3.2 – Схема последовательно-параллельного регистра

Элемент 74164 – это последовательно-параллельный регистр.

ВНИМАНИЕ! Для того, что бы выполнить блок Antitinkling, прочтите инструкцию Борьба с дребезгом контактов.

Записать нечётное число в интервале от 32 до 56 в последовательном коде, поразрядно продвигая его влево путём нажатия кнопки Button. Записать результат в отчёт.

3.3 Исследовать параллельно-последовательный регистр

Сконфигурировать ПЛИС в соответствии с рисунком 3.3.

Рисунок 3.3 – Схема параллельно-последовательного регистра

Элемент 74166 представляет собой параллельно-последовательный регистр.

Чтобы записать на входе число необходимо установить на входе STLD логический 0 и подать синхроимпульс, чтобы начать считывать записанное число необходимо на вход STLD подать логическую 1 и подавать синхроимпульсы.

Записать число в интервале от 32 до 56 в параллельном коде и поразрядно считывать его на выходе. Записать результат в отчёт.

Порядок подключения:

В этом эксперименте мы рассмотрим работу Arduino с микросхемой 74HC595 – расширителем выходов, позволяющей уменьшить количество выводов Arduino для управления 4-разрядной семисегментной матрицей.

Необходимые компоненты:

Приступаем к написанию скетча запуска и останова секундомера 0–999 сек с точностью 0.1 сек. Используем библиотеку Arduino SPI. Поскольку при использовании библиотеки SPI применяются Arduino выводы 11 и 13, для выбора регистров матрицы используем выводы Arduino 4, 5, 6, 7. Содержимое скетча показано в листинге 8.1.

Порядок подключения:

1. Подключаем семисегментный индикатор по схеме на рис. 8.2.
2. Загружаем в плату Arduino скетч из листинга 8.1.
3. Нажатием кнопки запускаем или останавливаем секундомер.

Источники
Источник — http://easyelectronics.ru/sdvigovyj-registr.html
Источник — http://go-radio.ru/registr.html
Источник — http://robotclass.ru/tutorials/arduino-shift-register/
Источник — http://cxem.net/arduino/arduino166.php
Источник — http://hardelectronics.ru/74hc595.html
Источник — http://www.texnic.ru/tools/cif_ms/7.html
Источник — http://window.edu.ru/catalog/pdf2txt/981/77981/58922?p_page=10
Источник — http://studfile.net/preview/5760138/page:6/
Источник — http://www.labfor.ru/guidance/digital-leso2/5
Источник — http://arduino-kit.ru/blogs/blog/project_08

Оцените статью
( Пока оценок нет )
Как Это Работает?
Добавить комментарий