Использование сдвиговых регистров в устройствах индикации. Реферат: Регистры сдвиги Как работает сдвиговый регистр

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

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

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

На схемах символом регистра служат буквы RG. Для регистров сдвига указывается также направление сдвига:

· → вправо (основной режим, который есть у всех сдвиговых регистров);

· ← влево (этот режим есть только у некоторых, реверсивных сдвиговых регистров);

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

Направление сдвига отражают внутреннюю структуру регистров сдвига (Рис. 4.14) и перезапись сигналов последовательно по цепочке триггеров. При этом триггеры, вполне естественно, нумеруются слева направо, например, от 0 до 7 (или от 1 до 8) для 8-разрядных регистров. В результате сдвиг информации регистром вправо представляет собой сдвиг в сторону разрядов, имеющих большие номера, а сдвиг информации регистром влево - это сдвиг в сторону разрядов, имеющих меньшие номера.

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

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

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


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

Регистры сдвига могут служить также в качестве элементов задержки сигнала, представленного в цифровой форме: регистры с последовательным приемом (вводом) и выводом осуществляют задержку передачи информации на m+1 тактов (m+1 - число разрядов регистра) машинного времени.

Регистры сдвига чаще все6го реализуются на D-триггерах (Рис.4.15, а) или на RS-триггерах (Рис.4.15, б), где для ввода информации в первый разряд включается инвертор (первый разряд представляет собой D-триггер).

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

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

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

Работу регистра сдвига рассмотрим на примере схемы, приведенной на Рис. Рис.4.15.

Можно предположить, что в начале все триггеры регистра находятся в состоянии логического нуля, т.е. Q0=0, Q1=0, Q2=0, Q3=0. Если на входе D-триггера Т1 имеет место логический 0, то поступление синхроимпульсов на входы «С» триггеров не меняет их состояния.

Как следует из Рис.4.15, синхроимпульсы поступают на соответствующие входы всех триггеров регистра одновременно и записывают в них то, что имеет место на их информационных входах. На информационных входах триггеров Т2, Т3, Т4 - уровни логического «0», т.к. информационные входы последующих триггеров соединены с выходами предыдущих триггеров, находящихся в состоянии логического «0», а на вход «D» первого триггера, по условию примера, подается «0» из внешнего источника информации.

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

При поступлении второго синхроимпульса логическая «1» , с выхода первого триггера, запишется во второй триггер, и в результате происходит сдвиг первоначально записанной «1» с триггера Т1 в триггер Т2, из триггера Т2 в триггер Т3 и т.д.. Таким образом, производится последовательный сдвиг поступающей на вход регистра информации (в последовательном коде) на один разряд вправо в каждом такте синхроимпульсов.

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

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

Реверсивные регистры сдвига объединяют в себе свойства регистров прямого и обратного сдвига.

Этот обзор посвящен, собственно, начинающим пользователям Arduino или желающим приобщиться к этому делу. Речь пойдёт об увеличении количества выходов микроконтроллера при помощи сдвигового регистра, причём что это не требует больших затрат (по сравнению с покупкой Arduino Mega, например). Самое простое применение - помигать светодиодами, вот и попробуем это на практике.

Когда начинал знакомство с микроконтроллерами (собственно и сейчас всё ещё продолжаю «начинать знакомиться»), один из первых вопросов был: как же имея всего десяток выходов на контроллере управлять той же сотней, тысячей светодиодов? Да, можно использовать мультиплексирование сигнала, встречное включение и множество других ухищрений, но всё равно максимальное количество подключаемых светодиодов ограничено, и необходимо искать другое решение. И подсказали мне один из вариантов - «возьми одну, две, десяток микросхем сдвиговых регистров и развлекайся». Было решено сразу же их заказать, а в перспективе даже собрать светодиодный куб с их применением. От последнего правда пришлось отказаться, нашёл более простой вариант, но это - тема другого обзора.
Заказал сразу 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) к питанию 5В, OE (пин 13) на землю, MR (пин 10) к питанию 5В. Теперь к сдвиговому регистру подключено питание и все выходы активны. Теперь время подключить микросхему к Arduino: вход данных DS (пин 14) подключим к 9-ому цифровому выходу ардуино, вход тактовых импульсов SH_CP (пин 11) к 10-ому цифровому выходу, вход-защелку ST_CP (пин 12) к 8-ому пину ардуино. Между землёй и защелкой рекомендуется поставить конденсатор на 0,1 мкФ для минимизации шумов.
Осталось подключить светодиоды - через резисторы 150-300 Ом подключаем их от выходов регистра к земле. Собственно и всё. Вот нашёл схему, кто любит наглядные материалы (обратите внимание, распиновка реальной микросхемы и схематическое изображение на данной схеме различаются!)


Собрал схему на макетной плате, у меня получилось вот так.

собранная схема








В ардуино удобно воспользоваться функцией 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); } }
Вот так получилось у меня, всё работает как положено:


Таким образом, при минимальном использовании пинов контроллера можно управлять большим количеством светодиодов (или ещё чем-нибудь). Всё бы хорошо, но расскажу и о недостатках. Как видим, ток для каждого светодиода необходимо ограничивать резистором, и при построении больших светодиодных матриц это становится достаточно трудоёмко. Есть более интересное решение для управления светодиодами - драйвер DM13A, который представляет собой сдвиговый регистр, при этом ещё и ограничивает ток на каждом выходе. Про него расскажу в следующий раз, а в качестве бонуса - тот самый мой первый LED куб, 5x5x5, собранный на упрощенной элементной базе, уже без применения 74HC595.

Планирую купить +37 Добавить в избранное Обзор понравился +35 +61

1. Оглавление

2. Введение …………………………………………………………… 2

3. Обзор литературных источников ………………………………… 3

3.1. Общие сведения о регистрах ………………………………… 3

3.2. Общие сведения о триггерах …………………………….…... 6

3.3. Сдвигающие регистры ……………………………………….. 12

3.4. Универсальные регистры ……………………………………….. 20

4. Разработка схемы регистра сдвига ………………………………… 24

4.1. Исходные данные ……………………………………………… 24

4.2. Порядок разработки регистра сдвига …………………..……… 24

4.3. Разработка четырёхфазного регистра сдвига ……............……… 25

5. Вывод ……………………………………………………………. 27

6. Список используемой литературы …………………………………. 28


2. Введение

Регистры – самые распространённые узлы цифровых устройств. Они оперируют с множеством связанных переменных, составляющих слово. Над словами выполняется ряд операций: приём, выдача, хранение, сдвиг в разрядной сетке, поразрядные логические операции.

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

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

3. Обзор литературных источников

3.1. Общие сведения о регистрах

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

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

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

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

Последовательно-параллельные регистры имеют входы-выходы одновременно последовательного и параллельного типа. Имеются варианты с последовательным входом и параллельным выходом (SIPO, Serial Input – Parallel Output), параллельным входом и последовательным выходом (PISO, Parallel Input – Serial Output), а также варианты с возможностью любого сочетания способов приёма и выдачи слов.

В параллельных (статических) регистрах схемы разрядов не обмениваются данными между собой. Общими для разрядов обычно являются цепи тактирования, сброса / установки, разрешение выхода или приёма, то есть цепи управления. Пример схемы статического регистра, построенного на триггерах D-типа с прямыми динамическими входами, имеющего входы сброса R и выходы с третьим состоянием, управляемые сигналом EZ, показан на рисунке 1 .

Рисунок 1. Схема статического регистра (а) и его условное графическое обозначение (б)

Для современной схемотехники характерно построение регистров на триггерах D-типа, преимущественно с динамическим управлением. Многие имеют выходы с третьим состоянием. Некоторые регистры относятся к числу буферных, то есть рассчитаны на работу с большими ёмкостными и / или низкоомными активными нагрузками. Это обеспечивает их работу непосредственно на магистраль (без дополнительных схем интерфейса).

Из статических регистров составляются блоки регистровой памяти – регистровые файлы.

Главные функции регистров:

1) Хранение информации,

2) Прием информации,

3) Выдача информации,

4) Сдвиг информации,

5) Преобразование кодов,

6) Установление в ноль или в единицу нужного числа,

7) Поразрядные логические операции: дизъюнкция, конъюнкция, сложение по модулю 2.

3.2. Общие сведения о триггерах

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

Триггер – импульсное логическое устройство с памятью (элемент памяти – фиксатор).

Существует более десятка различных интегральных триггеров. В основу их классификации положены:

Функциональный признак,

Способ записи информации в триггер.

По функциональному признаку различают Т-триггеры, JK-триггеры, RS-триггеры, D-триггеры, комбинированные триггеры (TV, DV, E, R) и т.д.

По способу записи (приёма) информации различают:

8) Асинхронные триггеры:

а) с внутренней задержкой;

б) управляемые уровнем входного импульса;

9) Синхронные триггеры (тактируемые):

а) с внутренней задержкой;

б) управляемые уровнем тактирующего импульса:

Однотактного действия (одноступенчатые);

Многократного действия.

Запись информации в тактируемые триггеры осуществляется только при подаче разрешающего тактирующего импульса. Такие триггеры делят на управляемые уровнем (для срабатывания необходим определённый уровень сигнала) и управляемые фронтом (не зависят от уровня сигнала, важно его присутствие) тактирующего импульса. Тактирующие импульсы иногда ещё называют синхронизирующими, исполнительными, командными сигналами (на схемах обычно обозначают буквой С - Clock).

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

Управление фронтом тактирующего импульса:

Управление спадом тактирующего импульса:

Управление верхним уровнем тактирующего импульса:

Управление нижним уровнем тактирующего импульса:

Тактируемые триггеры с внутренней задержкой (срабатывают по окончании действия сигнала) являются, как правило, однотактными. Многотактные триггеры срабатывают после n -ного импульса.

RS-триггер имеет два информационных входа: S (Set) и R (Reset). Одновременная подача сигналов S и R не допускается. На рисунке 2 изображен синхронный RS-триггер, срабатывающий по фронту тактирующего сигнала.

Рисунок 2. Синхронный RS-триггер

Кроме входов, простейший RS-триггер имеет и два выхода. Выходы обозначают Q и . Выход Q называют прямым, a - инверсным. Уровни напряжения на обоих выходах взаимно инверсны: если сигнал Q = 1, то = 0, либо если Q = 0, то = 1. Необходимо еще отметить, что состояние триггера, при котором Q = 1, a = 0, называют единичным. При нулевом состоянии триггера Q = 0 и = 1. С поступлением сигналов на входы триггера в зависимости от его состояния либо происходит переключение, либо исходное состояние сохраняется.

Рисунок 3. - триггер: его условное графическое обозначение и схема с двумя логическими элементами И-НЕ

На рисунке 3 показан простейший триггер – типа . Здесь использованы только два логических элемента И-НЕ. Назначение входов: -для установки триггера в единичное состояние и - для возвращения в нулевое состояние. Черточки над обозначениями входов показывают, что переключение триггера происходит, когда входное напряжение высокого уровня сменяется напряжением низкого уровня (рисунок 4 ). Нетрудно видеть, что когда на входы не поступают сигналы, триггер сохраняет свое состояние. Если, например, Q = 1 и = 0, то есть триггер в единичном состоянии, то, поскольку выход DD1 связан с одним из входов DD2, а выход DD2 - с одним из входов DD1, на двух входах DD2 действует напряжение

Рисунок 4. Временная диаграмма работы - триггера

высокого, а на выходе - низкого ( = 0) уровня. В то же время на одном из входов DD1 напряжение низкого, а на выходе - высокого уровня. Если теперь на вход поступает сигнал с обозначенной полярностью (момент t1 , рисунок 4 ), состояние триггера не изменится, потому что поступление сигнала на второй вход DD1 временно изменит только сочетание сигналов на входах (до подачи сигнала оно было 1 и 0, а стало 0 и 0), но выходное состояние DD1 остается при этом неизменным. Если, однако, сигнал поступит на вход (момент t2 ), на обоих входах DD2 уже окажутся напряжения разного уровня, состояние логических элементов изменится и на выходе его будет напряжение высокого уровня. На обоих входах DD1 окажутся напряжения высокого уровня, а на выходе - низкого, то есть триггер "опрокинется" и перейдет в другое состояние: Q = 0 и = 1.

Из сказанного следует, что смена состояния триггера происходит только при чередовании сигналов низкого уровня на входах и . При этом, если такие сигналы поступят на оба входа одновременно, то после их прекращения состояние триггера станет неопределенным (состояние Q = 0 или Q = 1 равновероятно). Поэтому одновременная подача сигналов низкого уровня на оба входа не разрешается.

Работа -триггера характеризуется таблицей состояний (индексы n и n+1 означают принадлежность сигнала моменту времени t n и следующему за ним t n+1 ):

Неопределённое состояние

Не разрешается одновременная подача напряжения низкого уровня на оба входа -триггера.

Триггер типа RS, как и -триггер, "запоминает", на какой из двух входов (R или S) поступил последний сигнал: если на вход R, триггер находится в нулевом состоянии (Q = 0 и = 1), а если на вход S, то в единичном состоянии (Q = 1 и = 0).

Рисунок 5. RS- триггер: его условное графическое обозначение и схема с четырьмя логическими элементами И-НЕ

На рисунке 5 показана схема RS-триггера, выполненного на логических элементах И-НЕ. Она отличается от схемы -триггера тем, что к каждому входу добавлено по инвертору (DD3 и DD4), которые только обеспечивают необходимый уровень входных сигналов.

Изменение входных сигналов от низкого уровня до высокого приводит к смене состояния триггера (моменты t1, t2, t2 и t5 ; в момент t4 опрокидывания не происходит, так как триггер уже установлен в единичное состояние в предшествующий момент - t3, рисунок 6 ).

Рисунок 6. Временная диаграмма работы RS- триггера

Все сказанное относительно RS-триггера сохраняет силу и для -триггера. Единственное различие касается инверсии уровней входных сигналов (R вместо и S вместо ).

Работа RS-триггера характеризуется следующей таблицей состояний:

Неопределённое состояние

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

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

В однотактных регистрах со сдвигом на один разряд вправо (рисунок 7 ) слово сдвигается при поступлении сигнала синхронизации. Вход и выход последовательные (DSR – Data Serial Right). На рисунке 8 показана схема регистра со сдвигом влево (вход данных DSL – Data Serial Left), а на рисунке 9 иллюстрируется принцип построения реверсивного регистра, в котором имеются связи триггеров с обоими соседними разрядами, но соответст-вующими сигналами разрешается работа только одних из этих связей (команды «влево» и «вправо» одновременно не подаются).

Рисунок 7. Схема право-сдвигающего регистра

Рисунок 8 . Схема лево-сдвигающего регистра

Рисунок 9 . Схема реверсивного регистра

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

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

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

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

Сдвиг влево

Сдвиг вправо

Ввод информации в регистр может выполнятся различными способами, однако наиболее часто используют параллельный или последовательный ввод, при которых ввод двоичного числа осуществляется или одновременно во все разряды регистра, или последовательно во времени по отдельным разрядам. В счётчиках импульсов находят применение сдвигающие регистры с последовательным вводом и выводом информации и со сдвигом вправо. На рисунке 10 a приведена схема четырёхразрядного регистра сдвига, выполненного на RS-триггерах. В этой схеме каждый выход Q триггера соединён со входом S последующего разряда, а каждый выход - с входом R. Тактовые входы всех триггеров соединены вместе, и поступление сигнала синхронизации осуществляется одним общим импульсом через логический элемент И-НЕ (DD7). Состояние первого триггера определяется входными сигналами на входах Х1, Х2 логического элемента И-НЕ (DD5). На вход Х1 подаётся текущая информация, а на вход Х2 сигнал разрешения её передачи. Логический элемент НЕ используется (DD6) используется для инвертирования входного сигнала, подаваемого на вход S.

На рисунке 10 б приведены временные диаграммы выходных сигналов триггеров и состояния регистров при записи в первый разряд единичного сигнала. Если при поступлении первого тактового импульса на входах Х1 и Х2 установлены сигналы Х1 = Х2 = 1, которые затем снимаются к приходу второго тактового импульса, то в результате в первый триггер будет записан сигнал Q 1 = 1. С приходом второго тактового импульса в первый триггер будет записан сигнал Q 1 = 0, а на выходе второго триггера появится сигнал Q 2 = 1, который перед этим был на выходе второго триггера. При поступлении последующих тактовых импульсов единичный сигнал перемещается последовательно в третий и четвёртый триггеры, после чего все триггеры устанавливаются в нулевое состояние.

a)

n

Q 1

Q 2

Q 3

Q 4

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

Сдвиговые регистры также можно реализовать на D-триггерах ил JK-триггерах. Для всех регистров сдвига характерны следующие положения:

1) необходима предварительная установка исходного состояния и ввод единицы в первый триггер

2) для регистра из n триггеров после поступления n входных тактовых импульсов первоначально введённая единица выводится, вследствие чего прямые выходы всех регистров оказываются в нулевом состоянии.

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

Рисунок 11. Реализация регистра сдвига на однотактных RS-триггерах

Последовательный регистр сдвига обладает двумя недостатками: он позволяет вводить только по одному биту информации на каждом тактовом импульсе и, кроме того, каждый раз при сдвиге информации в регистре вправо теряется крайний правый информационный бит. На рисунке 12 показана система, которая позволяет осуществлять одновременную параллельную загрузку 4 бит информации.

Рисунок 12. Структурная схема 4-разрядного параллельного регистра

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

Рисунок 13. Логическая схема четырёхразрядного параллельного кольцевого регистра

Схема 4-разрядного параллельного кольцевого регистра сдвига показана на рисунке 13 . В этом регистре сдвига используются четыре JK-триггера. Благодаря цепи обратной связи введенная в регистр информация, которая обычно теряется на выходе четвёртого триггера, будет циркулировать по регистру сдвига. Сигналом очистки регистра (установки его выходов в состояние 0000) является уровень логического 0 на входе CLR. Входы параллельной загрузки данных 1, 2, 3 и 4 связаны со входами предварительной установки триггеров (PS), что позволяет устанавливать уровень логической 1 на любом выходе (1, 2, 3, 4). Если на один из этих входов даже кратковременно подать логический 0, то на соответствующем выходе будет установлена логическая 1. Подача тактовых импульсов на входы C всех JK-триггеров приводит к сдвигу информации в регистре вправо. Из четвёртого триггера данные передаются в первый триггер (кольцевое перемещение информации).

Таблица 1.


строки

Входы

Выходы

№ тактового импульса

Принцип работы параллельного регистра сдвига описан в таблице 1 . При включении питания на выходах регистра может установиться любая двоичная комбинация, такая, например, как в строке 1 таблицы. Подача логического 0 на входы CLR триггеров инициирует очистку регистра (строка 2). Далее (строка 3) осуществляется загрузка в регистр двоичной комбинации 0100. Последовательные тактовые импульсы вызывают сдвиг введенной информации вправо (строки 4 - 8). В строках 5 и 6: единица из крайнего правого триггера (четвёртого) переносится в крайний левый триггер (первый). В данном случае можно говорить о кольцевом перемещении единицы в регистре. Далее (строка 9) вновь инициируется очистка регистра с помощью входа CLR. Загружается новая двоичная комбинация 0110 (строка 10). Подача 5 тактовых импульсов (строки 11-15) приводит к кольцевому сдвигу информации на 5 позиций вправо. Для возвращения данных в исходное состояние требуется 4 тактовых импульса.

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


Рисунок 14. Трехтактный регистр сдвига на RS-триггерах


3.4. Универсальные регистры

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

Есть множество серий ИС регистров многорежимных (многофункциональных) или универсальных, способных выполнять набор микроопераций. Многорежимность достигается композицией в одной и той же схеме частей, необходимых для выполнения различных операций. Управляющие сигналы, задающие вид выполняемой в данное время операции, активизируют необходимые для этого части схемы.

Рисунок 15. Универсальные регистры сдвига: а – К155ИР13, б – К500ИР141, в – КМ155ИР1

На рисунке 15 показано три типичных представителя универсальных сдвиговых регистров серии К155, КМ155 и К500.

Микросхема ИР13 (рисунок 15 а ) – это восьмиразрядный реверсивный сдвигающий регистр с допустимой тактовой частотой до 25 МГц при токе потребления до 40 мА. Имеет параллельные входы и выходы, вход асинхронного сброса , входы DSL (сдвиг влево) и DSR (сдвиг вправо) по перепаду синхронизирующих импульсов С, входы выбора режима S0 и S1. При S0 = 0, S1 = 1 происходит сдвиг информации вправо, при S0 = 1, S1 = 0 – влево, а при S0 = S1 = 1 – запись информации в регистр.

Микросхема ИР141 (рисунок 15 б ) – это универсальный четырёх-разрядный сдвиговый регистр, построенный на эмитерно-связной логике. Тактовая частота – до 150 МГц. Потребляемый ток – не менее 120 мА. При S0 = 0, S1 = 1 происходит сдвиг информации вправо, при S0 = 1, S1 = 0 – влево, а при S0 = S1 = 1 – хранение числа, при S0 = S1 = 0 – установка числа.

Микросхема ИР1 (рисунок 15 в ) – это сдвигающий регистр с синхронной записью информации на RS-триггерах. Входы 1 – 4 предназначены для параллельной записи информации, вход D – для последовательной записи. Вход V – управляющий. При V = 0 схема работает как сдвигающий регистр по отрицательному перепаду (с 1 на 0) сигнала С1, а при V = 1 схема работает в режиме синхронной записи в регистр сигналов входов 1 – 4 по отрицательному перепаду сигнала С2.

Регистры, имеющие разнотипные вход и выход, служат основными блоками преобразователей параллельных кодов в последовательные и обратно. На рисунке 16 показана схема преобразователя параллельного кода в последовательный на основе восьмиразрядного регистра типа SI/PO/SO. В этой схеме отрицательный стартовый импульс St, задающий уровень логического нуля на верхнем входе элемента 1, создаёт единичный сигнал параллельного приёма данных на вход L (Load – загрузка), по которому в разряды 1 – 7 регистра загружается преобразуемое слово, а в нулевой разряд – константа 0. На последовательный вход DSR подана константа 1. Таким образом, после загрузки в регистре формируется слово. Тактовые импульсы, поступающие на вход С, вызывают сдвиг слова вправо. Сдвиги выводят слово в последовательной форме через выход Q7. Вслед за информационными разрядами идёт 0, после которого цепочка единиц. Пока ноль не выведен из регистра, на выходе элемента 2 действует единичный сигнал. После вывода нуля все входы элемента 2 становятся единичными, его выход приобретает нулевое значение и через элемент 1 формирует сигнал автоматической загрузки следующего слова, после чего цикл преобразования повторяется.

Рисунок 16. Схема преобразователя параллельного кода в последовательный

Современные регистры мало приспособлены для выполнения поразрядных логических операций, но при необходимости их можно выполнить пользуясь регистрами на RS-триггерах. Для выполнения операции ИЛИ на S вход статического регистра с исходным нулевым состоянием подаётся первое слово, единичные разряды которого устанавливают соответствующие триггеры. Затем без сброса регистра на S выходы подаётся второе слово.

При выполнении поразрядной операции И в первом такте на S входы регистра подаётся первое слово, устанавливающее те разряды регистра, в которых это слово имеет единицы. Затем следует подать на регистр второе слово. Чтобы в регистре сохранились единицы только в тех разрядах, в которых оба слова имеют единицы, второе слово подаётся на входы R триггеров в инверсном виде.

Сложение по модулю 2 может быть выполнено схемой с триггерами типа Т в разрядах путём последовательной во времени подачи на неё двух слов.


4. Разработка схемы регистра сдвига

4.1. Исходные данные

Заданы тактовые импульсы положительной полярности.

4.2. Порядок разработки регистра сдвига

а) Рассмотрение общих требований к схеме регистра.

б) Разработка регистра сдвига.

в) Описание работы разработанной схемы.


4.3. Разработка четырёхфазного регистра сдвига

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

Рисунок 17. Разработанная схема правосдвигающего синхронного регистра на RS-триггерах

Выполняя инвертирование сигнала на входах триггеров мы добиваемся того, что подача напряжений одинаковых уровней на входы S и R невозможна. Значит, при S = 0, R = 1 – на выходе получим 0, при S = 1, R = 0 – на выходе получим 1. На входах сдвигающего регистра необходимо установить четыре элемента со следующей таблицей истинности:

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

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

№ комбинации

Вход

Выход

№ синхроимпульса


5. Вывод

В курсовом проекте было рассмотрено классификацию регистров, принципы их работы. Рассмотрено типы и принцип работы триггеров как главных составляющих регистров. Было детально рассмотрено регистры сдвига и, в частности, сдвиговые регистры на RS-триггерах.

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


6. Список используемой литературы

1. Прянишников В.А. Электроника (курс лекций). – С-П., 1998

2. Скаржепа В.А., Луценко А.Н. Электроника и микросхемотехника (часть первая). – К.: Высшая школа, 1989

3. Будищев М.С. Электротехника, электроника и микропроцессорная техника. – Л.: Афиша, 2001

4. Угрюмов Е.П. Цифровая схемотехника. – С-П., 2000

5. Справочник современных интегральных микросхем

1. Оглавление

2. Введение …………………………………………………………… 2

3. Обзор литературных источников ………………………………… 3

3.1. Общие сведения о регистрах ………………………………… 3

3.2. Общие сведения о триггерах …………………………….…... 6

3.3. Сдвигающие регистры ……………………………………….. 12

3.4. Универсальные регистры ……………………………………….. 20

4. Разработка схемы регистра сдвига ………………………………… 24

4.1. Исходные данные ……………………………………………… 24

4.2. Порядок разработки регистра сдвига …………………..……… 24

4.3. Разработка четырёхфазного регистра сдвига ……............……… 25

5. Вывод ……………………………………………………………. 27

6. Список используемой литературы …………………………………. 28


2. Введение

Регистры – самые распространённые узлы цифровых устройств. Они оперируют с множеством связанных переменных, составляющих слово. Над словами выполняется ряд операций: приём, выдача, хранение, сдвиг в разрядной сетке, поразрядные логические операции.

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

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

3. Обзор литературных источников

3.1. Общие сведения о регистрах

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

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

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

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

Последовательно-параллельные регистры имеют входы-выходы одновременно последовательного и параллельного типа. Имеются варианты с последовательным входом и параллельным выходом (SIPO, Serial Input – Parallel Output), параллельным входом и последовательным выходом (PISO, Parallel Input – Serial Output), а также варианты с возможностью любого сочетания способов приёма и выдачи слов.

В параллельных (статических) регистрах схемы разрядов не обмениваются данными между собой. Общими для разрядов обычно являются цепи тактирования, сброса / установки, разрешение выхода или приёма, то есть цепи управления. Пример схемы статического регистра, построенного на триггерах D-типа с прямыми динамическими входами, имеющего входы сброса R и выходы с третьим состоянием, управляемые сигналом EZ, показан на рисунке 1 .

Рисунок 1. Схема статического регистра (а) и его условное графическое обозначение (б)

Для современной схемотехники характерно построение регистров на триггерах D-типа, преимущественно с динамическим управлением. Многие имеют выходы с третьим состоянием. Некоторые регистры относятся к числу буферных, то есть рассчитаны на работу с большими ёмкостными и / или низкоомными активными нагрузками. Это обеспечивает их работу непосредственно на магистраль (без дополнительных схем интерфейса).

Из статических регистров составляются блоки регистровой памяти – регистровые файлы.

Главные функции регистров:

1) Хранение информации,

2) Прием информации,

3) Выдача информации,

4) Сдвиг информации,

5) Преобразование кодов,

6) Установление в ноль или в единицу нужного числа,

7) Поразрядные логические операции: дизъюнкция, конъюнкция, сложение по модулю 2.

3.2. Общие сведения о триггерах

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

Триггер – импульсное логическое устройство с памятью (элемент памяти – фиксатор).

Существует более десятка различных интегральных триггеров. В основу их классификации положены:

Функциональный признак,

Способ записи информации в триггер.

По функциональному признаку различают Т-триггеры, JK-триггеры, RS-триггеры, D-триггеры, комбинированные триггеры (TV, DV, E, R) и т.д.

По способу записи (приёма) информации различают:

8) Асинхронные триггеры:

а) с внутренней задержкой;

б) управляемые уровнем входного импульса;

9) Синхронные триггеры (тактируемые):

а) с внутренней задержкой;

б) управляемые уровнем тактирующего импульса:

Однотактного действия (одноступенчатые);

Многократного действия.

Запись информации в тактируемые триггеры осуществляется только при подаче разрешающего тактирующего импульса. Такие триггеры делят на управляемые уровнем (для срабатывания необходим определённый уровень сигнала) и управляемые фронтом (не зависят от уровня сигнала, важно его присутствие) тактирующего импульса. Тактирующие импульсы иногда ещё называют синхронизирующими, исполнительными, командными сигналами (на схемах обычно обозначают буквой С - Clock).

Динамический вход может быть прямым и инверсным. Прямое динамическое управление подразумевает разрешение на переключение при изменении тактового сигнала с нулевого значения на единичное (). Инверсное динамическое управление – изменение тактового сигнала с единичного на нулевой (). Управление фронтом тактирующего импульса: Управление спадом тактирующего импульса: Управление верхним уровнем тактирующего импульса:

Управление нижним уровнем тактирующего импульса:

Тактируемые триггеры с внутренней задержкой (срабатывают по окончании действия сигнала) являются, как правило, однотактными. Многотактные триггеры срабатывают после n -ного импульса.

RS-триггер имеет два информационных входа: S (Set) и R (Reset). Одновременная подача сигналов S и R не допускается. На рисунке 2 изображен синхронный RS-триггер, срабатывающий по фронту тактирующего сигнала.

Рисунок 2. Синхронный RS-триггер

Кроме входов, простейший RS-триггер имеет и два выхода. Выходы обозначают Q и

. Выход Q называют прямым, a - инверсным. Уровни напряжения на обоих выходах взаимно инверсны: если сигнал Q = 1, то = 0, либо если Q = 0, то = 1. Необходимо еще отметить, что состояние триггера, при котором Q = 1, a = 0, называют единичным. При нулевом состоянии триггера Q = 0 и = 1. С поступлением сигналов на входы триггера в зависимости от его состояния либо происходит переключение, либо исходное состояние сохраняется.

Рисунок 3. - триггер: его условное графическое обозначение и схема с двумя логическими элементами И-НЕ

Сдвиговый регистр - это набор последовательно соединённых триггеров (обычно их 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):

#define clock 13 #define data 12 #define latch 10

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

Void setup(){ pinMode(clock, OUTPUT); pinMode(data, OUTPUT); pinMode(latch, OUTPUT); digitalWrite(latch, HIGH); }

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

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

DigitalWrite(latch, LOW);

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

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

ShiftOut(data, clock, LSBFIRST,0b10000000);

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

DigitalWrite(latch, HIGH);

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

#define clock 13 #define data 12 #define latch 10 void setup() { pinMode(clock, OUTPUT); pinMode(data, OUTPUT); pinMode(latch, OUTPUT); digitalWrite(latch, HIGH); } void loop() { digitalWrite(latch, LOW); shiftOut(data, clock, LSBFIRST, 0b10000000); digitalWrite(latch, HIGH); }

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

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

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

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

Void sendbyte(byte value){ digitalWrite(latch, LOW); shiftOut(data, clock, LSBFIRST, value); digitalWrite(latch, HIGH); }

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

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

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

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

Boolean states;

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

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

Void sendpin(int pin, boolean state){ pin--; states=state; byte value = 0; byte add = 1; for(int i=0; i<8; i++){ if(states[i]==HIGH) value+=add; add*=2; } digitalWrite(latch, LOW); shiftOut(data, clock, LSBFIRST, value); digitalWrite(latch, HIGH); }

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

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

States=state;

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

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

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

Byte value = 0;

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

Byte add = 1;

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

For(int i=0; i<8; i++){ }

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

If(states[i]==HIGH) value+=add; add*=2;

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

DigitalWrite(latch, LOW); shiftOut(data, clock, LSBFIRST, value); digitalWrite(latch, HIGH);

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

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

Sendpin(2, HIGH); sendpin(4, HIGH); sendpin(6, HIGH); sendpin(8, HIGH);

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

Можно даже такую функцию создать:

Void cleanreg(){ for(int i=0; i<8; i++) states[i]=LOW; digitalWrite(latch, LOW); shiftOut(data, clock, LSBFIRST, 0); digitalWrite(latch, HIGH); }

В общем результат таков:

Список радиоэлементов

Обозначение Тип Номинал Количество Примечание Магазин Мой блокнот
Плата Arduino

Arduino Uno

1

Похожие статьи