Параллельный сдвиговый регистр как работает

от admin

Различные типы регистров сдвига и их применение с примерами

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

Регистры сдвига — это в основном регистры, которые могут передавать («сдвигать») данные. Регистры обычно представляют собой запоминающие устройства, которые создаются путем последовательного соединения определенного количества триггеров, а количество данных (количество битов), которые могут храниться в регистре, всегда прямо пропорционально количеству триггеров, поскольку каждый триггер flop может хранить только один бит за раз. Когда триггеры в регистре соединены таким образом, что выход одного триггера становится входом другого, создается регистр сдвига.

Вьетнамки — это устройства, работа которых аналогична защелке. Его можно назвать бистабильным вибратором, который может перемещаться между двумя состояниями (0 или 1) и может хранить данные в битах. Новые данные считываются в триггер с каждым тактовым циклом, а предыдущие данные отправляются на выход.

Какие регистры сдвига состоят из триггеров?

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

Для работы D-триггеров, что делает их такими желательными для регистров сдвига, всякий раз, когда происходит изменение тактовой частоты D-триггера (либо нарастающий, либо на спадающий фронт, в зависимости от характеристик триггера). Данные на выходе «Q» становятся теми же данными, что и на входе «D». Выходной сигнал «Q» триггера останется на этом значении до следующего тактового цикла, после чего он снова изменится на значение (высокое или низкое, 1 или 0) на входе.

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

  • Регистр сдвига с 74HC595 с Arduino для управления последовательностью светодиодов
  • Регистр сдвига с ESP32 для интерфейса 7-сегментного дисплея
  • Сдвиговый регистр с Raspberry Pi для управления несколькими светодиодами
  • Регистр сдвига с PIC для управления последовательностью светодиодов

Типы регистров в цифровой электронике

Регистры сдвига подразделяются на типы в основном в зависимости от режима работы: последовательный или параллельный.

Существует шесть (6) основных типов регистров сдвига, которые перечислены ниже, хотя некоторые из них могут быть дополнительно разделены в зависимости от направления потока данных: сдвиг вправо или сдвиг влево.

1. Сдвиговый регистр последовательного входа и выхода (SISO)

2. Последовательный вход — параллельный выходной регистр сдвига (SIPO)

3. Регистр сдвига с параллельным входом и выходом (PIPO)

4. Регистр сдвига параллельного входа — последовательного выхода (PISO)

5. Регистры двунаправленного сдвига.

1. Регистры сдвига последовательного входа и выхода

Сдвиговые регистры последовательного ввода — последовательного вывода — это регистры сдвига, которые последовательно передают данные (один бит за такт) и выводят данные таким же образом, один за другим.

Выше показан простой 4-разрядный регистр сдвига с последовательным входом — последовательным выходом, регистр состоит из 4 триггеров, а принцип его работы поясняется ниже;

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

Есть два основных способа сдвига данных через регистр сдвига SISO;

  1. Неразрушающее считывание
  2. Разрушительное считывание
  • Неразрушающее считывание

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

Когда устройство находится в рабочем режиме «запись», сдвиговый регистр сдвигает все данные на один бит за раз, ведя себя точно так же, как версия с деструктивным считыванием, и данные, таким образом, теряются, но когда рабочий режим переключается на «чтение», данные которые сдвигаются на входе, возвращаются в систему и служат входом в регистр сдвига. Это помогает гарантировать, что данные остаются дольше (пока они остаются в режиме чтения)

  • Разрушительное считывание

При разрушающем считывании данные полностью теряются, поскольку триггер просто перемещает информацию. Предполагая, что для 4-битного регистра сдвига выше мы хотим отправить слово «1101». После очистки регистра сдвига выход всех триггеров становится равным 0, поэтому во время первого тактового цикла, когда мы применяем эти данные (1101) последовательно, выходы триггеров выглядят, как в таблице ниже.

Цифровые схемы – сдвиговые регистры

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

Если регистр способен сдвигать биты либо вправо, либо влево, это называется регистром сдвига . Регистр сдвига битов «N» содержит триггеры «N». Ниже приведены четыре типа регистров сдвига, основанные на применении входов и доступе к выходам.

  • Serial In – сдвиговый регистр Serial Out
  • Серийный вход – параллельный выходной регистр сдвига
  • Параллельный вход – сдвиговый регистр последовательного выхода
  • Параллельный вход – сдвиговый регистр параллельного выхода

Серийный вход – Серийный выход (SISO) Сдвиговый регистр

Сдвиговый регистр, который допускает последовательный ввод и производит последовательный вывод, известен как сдвиговый регистр Serial In – Serial Out (SISO) . Блок-схема 3-битного регистра сдвига SISO показана на следующем рисунке.

SISO

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

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

пример

Давайте посмотрим, как работает 3-битный регистр сдвига SISO, посылая двоичную информацию «011» из LSB в MSB последовательно на входе.

Предположим, что начальный статус D-триггеров слева направо равен Q 2 Q 1 Q 0 = 000 . Мы можем понять работу 3-битного регистра сдвига SISO из следующей таблицы.

Нет положительного края часов Последовательный ввод Q 2 Q 1 Q 0
0 0 0 0
1 1 (LSB), 1 0 0
2 1 1 1 0
3 0 (СЗБ) 0 1 1 (LSB),
4 0 1
5 0 (СЗБ)

Начальное состояние D-триггеров в отсутствие тактового сигнала: Q 2 Q 1 Q 0 = 000 . Здесь последовательный вывод исходит из Q 0 . Таким образом, LSB (1) принимается на 3- м положительном фронте тактового сигнала, а MSB (0) принимается на 5- м положительном фронте тактового сигнала.

Следовательно, 3-битный сдвиговый регистр SISO требует пяти тактовых импульсов для получения действительного выхода. Аналогично, N-битный сдвиговый регистр SISO требует 2N-1 тактовых импульсов для сдвига «N» битовой информации.

Сдвиговый регистр Serial In – Parallel Out (SIPO)

Сдвиговый регистр, который допускает последовательный ввод и производит параллельный вывод, известен как сдвиговый регистр Serial In – Parallel Out (SIPO) . Блок-схема 3-битного регистра сдвига SIPO показана на следующем рисунке.

СИПО

Эта схема состоит из трех D-триггеров, которые каскадно. Это означает, что выход одного D-триггера подключен как вход следующего D-триггера. Все эти триггеры синхронны друг с другом, поскольку к каждому из них применяется один и тот же тактовый сигнал.

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

пример

Давайте посмотрим, как работает 3-битный регистр сдвига SIPO, посылая двоичную информацию «011» из LSB в MSB последовательно на входе.

Предположим, что начальный статус D-триггеров слева направо равен Q 2 Q 1 Q 0 = 000 . Здесь Q 2 & Q 0 – это MSB и LSB соответственно. Мы можем понять работу 3-битного сдвигового регистра SIPO из следующей таблицы.

Нет положительного края часов Последовательный ввод Q 2 (MSB) Q 1 Q 0 (LSB)
0 0 0 0
1 1 (LSB), 1 0 0
2 1 1 1 0
3 0 (СЗБ) 0 1 1

Начальное состояние D-триггеров в отсутствие тактового сигнала: Q 2 Q 1 Q 0 = 000 . Двоичная информация «011» получается параллельно на выходах D триггеров для третьего положительного фронта тактового сигнала.

Итак, 3-битный сдвиговый регистр SIPO требует три тактовых импульса для получения действительного выхода. Аналогично, N-битный сдвиговый регистр SIPO требует N тактовых импульсов для сдвига «N» битовой информации.

Сдвиговый регистр параллельного входа – последовательного выхода (PISO)

Сдвиговый регистр, который допускает параллельный ввод и производит последовательный выход, известен как сдвиговый регистр Parallel In-Serial Out (PISO) . Блок-схема 3-битного регистра сдвига PISO показана на следующем рисунке.

PISO

Эта схема состоит из трех D-триггеров, которые каскадно. Это означает, что выход одного D-триггера подключен как вход следующего D-триггера. Все эти триггеры синхронны друг с другом, поскольку к каждому из них применяется один и тот же тактовый сигнал.

В этом регистре сдвига мы можем применить параллельные входы к каждому D-триггеру, установив Preset Enable в 1. Для каждого срабатывания положительного фронта тактового сигнала данные сдвигаются от одного этапа к следующему. Итак, мы получим последовательный вывод с самого правого D-триггера.

пример

Давайте посмотрим, как работает 3-битный регистр сдвига PISO, применяя двоичную информацию «011» параллельно через предустановленные входы.

Так как предустановленные входные данные применяются до положительного фронта тактового сигнала, начальное состояние D-триггеров от крайнего левого к правому будет Q 2 Q 1 Q 0 = 011 . Мы можем понять работу 3-битного регистра сдвига PISO из следующей таблицы.

Нет положительного края часов Q 2 Q 1 Q 0
0 0 1 1 (LSB),
1 0 1
2 0 (LSB)

Здесь последовательный вывод исходит из Q 0 . Таким образом, LSB (1) принимается до применения положительного фронта тактового сигнала, а MSB (0) принимается на 2- ом положительном фронте тактового сигнала.

Следовательно, 3-битный регистр сдвига PISO требует двух тактовых импульсов для получения действительного выхода. Аналогично, N-битный регистр сдвига PISO требует N-1 тактовых импульсов, чтобы сдвигать N-битную информацию.

Регистр сдвига параллельного входа – параллельного выхода (PIPO)

Сдвиговый регистр, который допускает параллельный ввод и производит параллельный вывод, известен как сдвиговый регистр Parallel In – Parallel Out (PIPO) . Блок-схема 3-битного регистра сдвига PIPO показана на следующем рисунке.

PIPO

Эта схема состоит из трех D-триггеров, которые каскадно. Это означает, что выход одного D-триггера подключен как вход следующего D-триггера. Все эти триггеры синхронны друг с другом, поскольку к каждому из них применяется один и тот же тактовый сигнал.

В этом регистре сдвига мы можем применить параллельные входы к каждому D-триггеру, установив Preset Enable в 1. Мы можем применить параллельные входы через предустановку или сброс. Эти два являются асинхронными входами. Это означает, что триггеры производят соответствующие выходные данные, основываясь на значениях асинхронных входных данных. В этом случае влияние выходов не зависит от тактового перехода. Итак, мы получим параллельные выходы от каждого D-триггера.

пример

Давайте посмотрим, как работает 3-битный регистр сдвига PIPO, применяя двоичную информацию «011» параллельно через предустановленные входы.

Так как предустановленные входные данные применяются до положительного фронта тактового сигнала, начальное состояние D-триггеров от крайнего левого к правому будет Q 2 Q 1 Q 0 = 011 . Таким образом, двоичная информация «011» получается параллельно на выходах D триггеров перед применением положительного фронта тактового сигнала.

Следовательно, 3-битный регистр сдвига PIPO требует нулевых тактовых импульсов для получения действительного выхода. Аналогично, N-битный регистр сдвига PIPO не требует никакого тактового импульса для сдвига информации «N» битов.

Регистры (сдвиговые, параллельные, последовательные)

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

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

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

В зависимости от формы представления числа (параллельной или последовательной), используемой при его вводе в регистр, различают два типа регистров: параллельные и последовательные. В параллельный регистр предназначенное для хранения число подается одновременно всеми разрядами, т. е. в параллельной форме. В последовательный регистр ввод числа производится путем последовательной во времени подачи цифр отдельных разрядов (обычно начиная с цифры младшего разряда), т. е. в последовательной форме.

Параллельный регистр.

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

Если цифра i-го разряда ai = 1, то поступает 1 на вход S соответствующего триггера и при подаче уровня лог. 1 на вход С триггер устанавливается в состояние 1. Если ai = 0 (i = l), то поступает 1 на вход R и этот триггер устанавливается в состояние 0. Таким образом, триггеры устанавливаются в состояния, определенные поступающими на их входы цифрами разрядов числа.

Когда на вход регистра поступает однофазный код числа (без подачи инверсных значений цифр разрядов), регистр может быть построен с использованием простейших синхронных D-триггеров (рис. 7.37,а). В таком регистре при подаче уровня 1 на вход С триггеры устанавливаются в состояния, определяемые действующими на входах D цифрами разрядов. На рис. 7.36,б и 7.37,б показаны условные обозначения рассмотренных типов регистров.

Сдвиговый регистр.

Покажем пример сдвига числа на один разряд вправо.

Суть сдвига состоит в том, что цифра, имевшаяся до сдвига в i-м разряде регистра, передается в соседний справа (i-1)-й разряд (т. е. значение четвертого разряда передается в третий разряд, значение третьего разряда — во второй разряд и т. д.). В крайний левый разряд заносится значение, подаваемое извне, а цифра крайнего правого разряда числа выдвигается из регистра во внешнюю цепь. Такого рода сдвиги числа вправо (либо влево) выполняются так называемым сдвиговым регистром.

Для построения сдвигового регистра чаще всего исполъзуются D-триггеры, управляемые одним фронтом синхронизирующего сигнала, но могут использоваться и другие типы триггеров, управляемые одним фронтом синхронизирующего сигнала, либо триггеры, построенные по принципу двухступенчатого запоминания информации.

Рассмотрим работу показанного на рис. 7.38,а сдвигового регистра, построенного на D-триггерах. Выход Q триггера каждого из разрядов подключен к входу D триггера соседнего более младшего разряда. Таким образом, при низком уровне синхронизирующего сигнала хранящееся в триггере значение разряда числа передается на вход триггера соседнего справа разряда и производит в нем подготовку управляющих цепей. В момент положительного фронта синхронизирующего сигнала каждый из триггеров устанавливается в состояние, соответствующее действовавшему на входе D сигналу, и число в регистре оказывается сдвинутым вправо на один разряд; в старший разряд заносится значение, подаваемое извне на вход D триггера этого разряда. На рис. 7.38,б показано содержимое регистра в процессе выполнения последовательных сдвигов вправо.

Для осуществления сдвига влево необходимо в сдвиговом регистре изменить связи между триггерами, подключая выход триггера ко входу D триггера соседнего слева (более старшего) разряда.

Сдвиговые регистры имеют разнообразные применения. Рассмотрим некоторые из них.

Последовательный регистр.

Представляет собой сдвиговый регистр, в который многоразрядное двоичное число вводится последовательно цифра за цифрой (обычно начиная с цифры младшего разряда) через один из его крайних разрядов (обычно через старший).

Таким образом, представленный на рис. 38,а сдвиговый регистр может выполнять функции последовательного регистра, если на вход D-триггера старшего разряда подавать не постоянный уровень логического 0 (как показано на рисунке), а вводимое в регистр число в последовательной форме.

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

В момент tl появление синхронизирующего импульса на входе С вызывает сдвиг информации в регистре на один разряд вправо. Если до этого момента в регистре было число 0000, то в результате сдвига в первом, втором, третьем разрядах сохранится значение 0, в четвертый разряд будет со входа принято значение 1. Таким образом, в регистре возникает число 10002. В момент t2 появления следующего синхронизирующего импульса процессы сдвига и приема очередного разряда вводимого числа приводят регистр в состояние 11002. Далее, в момент t3 в регистре образуется число 01102 и, наконец, в момент t4-число 10112. Поданное на вход число оказывается зафиксированным в регистре.

Преобразование формы представления чисел из последовательной в параллельную.

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

В процессе преобразования формы представления числа n-разрядное двоичное число в последовательной форме подается на вход последовательного регистра. Через n тактов (после подачи и синхронизирующих импульсов) число окажется принятым в регистр и может затем быть снято в параллельной форме с выходов триггеров всех разрядов.

Преобразование формы представления чисел из параллельной в последовательную.

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

После принятия в регистр n-разрядного числа на выходе триггера первого разряда образуется младший разряд числа. При сдвиге числа в регистре на один разряд вправо в триггер первого разряда передается цифра второго разряда введенного в регистр числа и, таким образом, с выхода этого триггера снимается цифра следующего разряда. При повторении сдвигов вправо (n — l) раз на выходе триггера первого разряда регистра появляются цифры всех n разрядов и, таким образом, число может быть снято в последовательной форме.

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

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

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

От МК, как видно, требуется только четыре выхода. Одним (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. Нажатием кнопки запускаем или останавливаем секундомер.

Похожие публикации