Как работает сдвиговый регистр 74HC595. Какие преимущества дает его использование с микроконтроллерами. Как подключить и запрограммировать 74HC595 для управления светодиодами и другими устройствами. Какие есть практические примеры применения сдвигового регистра 74HC595 в электронных проектах.
Что такое сдвиговый регистр 74HC595 и зачем он нужен
Сдвиговый регистр 74HC595 — это микросхема, позволяющая расширить количество выходов микроконтроллера. Она преобразует последовательный входной сигнал в параллельный выходной на 8 пинах. Это дает возможность управлять большим количеством устройств, используя всего 3 пина микроконтроллера.
Основные преимущества использования 74HC595:
- Увеличение количества выходов микроконтроллера на 8 штук
- Возможность каскадного подключения для еще большего расширения
- Простота подключения — требуется всего 3 управляющих провода
- Низкая стоимость микросхемы
- Высокая скорость работы — до 100 МГц
- Широкий диапазон напряжения питания — от 2 до 6 В
Принцип работы сдвигового регистра 74HC595
Принцип работы 74HC595 основан на последовательной записи битов во внутренний регистр и параллельном выводе данных на выходы. Схема работы выглядит следующим образом:
- На вход DS подаются биты данных последовательно
- По фронту сигнала на входе SHCP происходит сдвиг регистра и запись нового бита
- После записи 8 бит подается сигнал на вход STCP
- Данные из сдвигового регистра переносятся в выходной регистр
- На выходах Q0-Q7 появляются новые значения
Таким образом, используя всего 3 сигнальных провода, можно управлять 8 выходами микросхемы.
Подключение сдвигового регистра 74HC595 к микроконтроллеру
Для базового подключения 74HC595 к микроконтроллеру необходимо соединить следующие выводы:
- DS (вход данных) — к любому цифровому выходу МК
- SHCP (тактирование сдвига) — к цифровому выходу МК
- STCP (защелка) — к цифровому выходу МК
- OE (разрешение выхода) — к земле
- MR (сброс) — к питанию через резистор 10 кОм
- VCC — к питанию 5В
- GND — к земле
Выходы Q0-Q7 подключаются к управляемым устройствам, например, светодиодам через токоограничивающие резисторы.
Программирование сдвигового регистра 74HC595
Для управления 74HC595 с микроконтроллера используется следующий алгоритм:
- Установить низкий уровень на STCP
- Передать 8 бит данных, подавая их на DS и формируя импульсы на SHCP
- Установить высокий уровень на STCP для защелкивания данных
Пример функции для Arduino:
void shiftOut(uint8_t data) { digitalWrite(STCP_PIN, LOW); for (int i = 0; i < 8; i++) { digitalWrite(DS_PIN, data & (1 << i)); digitalWrite(SHCP_PIN, HIGH); digitalWrite(SHCP_PIN, LOW); } digitalWrite(STCP_PIN, HIGH); }
Практические примеры использования 74HC595
Сдвиговый регистр 74HC595 широко применяется в различных электронных проектах:
- Управление большим количеством светодиодов для создания бегущих огней, матричных дисплеев и т.д.
- Подключение семисегментных индикаторов для вывода цифровой информации
- Управление реле и другими исполнительными устройствами
- Расширение портов ввода-вывода микроконтроллеров в сложных проектах
- Создание светодиодных кубов и других объемных световых конструкций
Преимущества использования 74HC595 в проектах
Применение сдвигового регистра 74HC595 дает ряд существенных преимуществ при разработке электронных устройств:
- Экономия портов микроконтроллера - всего 3 пина для управления 8 выходами
- Простота масштабирования проекта путем каскадного подключения регистров
- Снижение общей стоимости устройства за счет использования недорогих микросхем
- Уменьшение количества проводов в конструкции
- Повышение надежности за счет упрощения схемы
Особенности работы с 74HC595 при создании устройств
При использовании сдвигового регистра 74HC595 в проектах следует учитывать некоторые особенности:
- Необходимость программного управления выходами через последовательный интерфейс
- Ограничение по току на каждом выходе - не более 35 мА
- Возможность появления помех при высокой частоте переключения выходов
- Задержка между подачей данных и их появлением на выходах
- Необходимость внешних подтягивающих резисторов для некоторых входов
Учет этих особенностей позволит создавать надежные устройства на базе 74HC595.
Заключение
Сдвиговый регистр 74HC595 является удобным и недорогим способом расширения возможностей микроконтроллеров по управлению внешними устройствами. Его использование позволяет создавать сложные проекты с большим количеством управляемых элементов при минимальных аппаратных затратах. Освоение работы с этой микросхемой открывает широкие возможности для творчества в области электроники и робототехники.
В ситуации когда не хватает выходов микроконтроллера, что обычно делают? Правильно – берут микроконтроллер с большим количеством выходов. А если не хватает выводов у микроконтроллера с самым большим количеством выходов, то могут поставить и второй микроконтроллер.
Но в большинстве случаев проблему можно решить более дешевыми способами например использовать сдвиговый регистр 74HC595.
Преимущества использования сдвигового регистра 74HC595:
- не требует никакой обвязки кроме конденсатора по питанию;
- работает через широкораспостраненный интерфейс SPI;
- для самого простого включения достаточно двух выходов микроконтроллера;
- возможность практически неограниченного расширения количества выходов без увеличения занятых выходов микроконтроллера;
- частота работы до 100 МГц;
- напряжение питания от 2 В до 6 В;
- дешевый — стоит менее 5 центов;
- выпускается как в планарных корпусах (74HC595D удобен для производства), так и в DIP16 (74HC595N удобен для радиолюбителей и макетирования).
Для понимания работы регистра стоит взглянуть на функциональную схему. Она состоит из:
- 8-битного регистра сдвига,
- 8-битного регистра хранения,
- 8-битного выходного регистра.
Рассмотрим какие выводы есть у сдвигового регистра 74hc595.
Общего вывод и вывод питания объяснений не требуют.
- GND — земля
- VCC — питание 5 вольт
Входы 74HC595:
OE
Вход переводящий выходы из высокоимпедансного состояние в рабочее состояние. При логической единице на этом входе выходы 74HC595 будут отключены от остальной части схемы. Это нужно например для того чтобы другая микросхема могла управлять этими сигналами.
MR — сброс регистра
Переводить все выходы в состояние логического нуля. Чтобы сбросить регистр нужно подать логический ноль на этот вход и подать положительный импульс на вход STCP.
Подключаем этот выход через резистор к питанию микросхемы и при необходимости замыкаем на землю.
DS – вход данных
Последовательно подаваемые сюда данные будут появляются на 8-ми выходах регистра в параллельной форме.
SHCP – вход для тактовых импульсов
Когда на тактовом входе SHCP появляется логическая единица, бит находящийся на входе данных DS считывается и записывается в самый младший разряд сдвигового регистра. При поступлении на тактовый вход следующего импульса высокого уровня, в сдвиговый регистр записывается следующий бит со входа данных. Тот бит который был записан ранее сдвигается на один разряд (из Q0 в Q1) , а его место занимает вновь пришедший бит. И так далее по цепочке.
STCP – вход «защёлкивающий» данные
Что бы данные появились на выходах Q0…Q7 нужно подать логическую единицу на вход STCP. Данные поступают в параллельный регистр который сохряняет их до следующего импульса STCP.
Выходы 74HC595
- Q0…Q7 – выходы которыми будем управлять. Могут находится в трёх состояниях: логическая единица, логический ноль и высокоимпедансное состояние
- Q7′ – выход предназначенный для последовательного соединения регистров.
Временная диаграмма на которой показано движение логической единицы по всем выходам регистра.
Как говориться лучше один раз увидеть, чем семь раз услышать. Я сам впервые применяя регистр 74HC595 не до конца понимал его работу и чтобы понять смоделировал нужную схему в Proteus.
Вот такая схема подключения семисегментных индикаторов к микроконтроллеру ATMega48 по SPI получилась:
Это схема с динамической индикацией, то есть в каждый момент времени загорается только одна цифра счетверенного семисегментного индикатора, потом загорается следующая и так по кругу. Но так как смена происходит очень быстро, то глазу кажется, что горят все цифры.
Чтобы динамическая индикация заработала в регистры нужно послать два байта: первый байт определяет, какой из 4-х индикаторов будет работать и какую кнопку будем опрашивать. А второй, какие из сегментов загорятся.
МИКРОСХЕМА SN74HC595N
Одно из основных предназначений микроконтроллеров – это управление относительно простыми устройствами и системами, что очевидно требует опроса датчиков и выдачи управляющих сигналов на исполнительные устройства. Зачастую имеющихся портов микроконтроллера для подобных целей может оказаться недостаточно. Одним из способов увеличения количества подключаемых внешних устройств может служить сдвиговый регистр SN74HC595N. Данная микросхема приобретена на Ru.aliexpress.com по 0,6$ за партию 10 штук.
Она позволяет, используя три порта микроконтроллера управлять 8 выходами [1-3], что немаловажно данный регистр позволяет осуществлять каскадное подключение, получая, таким образом, 16 и более цифровых выходов, управляемых все теми же тремя портами микроконтроллера. Конструктивно, это микросхема в корпусе DIP-16
Микросхема имеет 16 контактов, которые имеют следующее назначение: Vcc и GND питание +5В и общая шина, соответственно. DS – вход для данных, SHcp – вход синхронизации для записи состояния DS в память регистра, STcp – сигнал управления, по низкому уровню которого, данные из памяти регистра попадают в на информационные выходы Q0-Q7, Q7’ – выход для передачи данных на следующий регистр (необходим при совместной работе нескольких регистров), - управление включением/отключением выходов Q0-Q7, - обнуление регистра.
Для примера можно взять код от производителей аппаратной платформы Arduino, иллюстрирующий работу данного регистра [4]. Данная программа последовательно выдает на выходы Q0-Q7 двоичное число от 00000000 до 11111111. На примере подключено только пять светодиодов, но в целом понятно, что данная программа представляет собой просто счетчик от 0 до 255.
Видео
В итоге имеем простой и дешевый способ увеличения количества подключенных к Arduino внешних устройств, но за это приходится заплатить меньшим их быстродействием. Впрочем, для устройств вывода информации, типа семисегментных индикаторов и линейных светодиодных шкал, это не очень критично, так как скорость вывода информации все равно будет больше скорости восприятия ее органами чувств человека... Скачать файлы проекта. Обзор подготовил Denev.
Ссылки
- http://arduino.ru/Tutorial/registr_74HC595
- http://soltau.ru/index.php/arduino/item/458-kak-podklyuchit-sdvigovyj-registr-74hc595-k-arduino
- http://amperka.ru/product/74hc595-shift-out-register
- https://www.arduino.cc/reference/en/language/functions/advanced-io/shiftout/
Форум
Обсудить статью МИКРОСХЕМА SN74HC595N
Кстати, на прыгающие шарики меня вдохновил Oss 🙂
Что касается вывода – все просто и понятно, но мне нужно было посадить еще 10 кнопок и, естественно, на минимум портов. Использовать аноды индикации не покатит, это уже не укладывается в 3 провода к блоку индикации. А все технические приёмы, описанные на этом сайте, какие-то уж чересчур мудрёные и неудобоваримые (использовать К155ИР13 это, простите, какой-то муветон), легче уж и вправду использовать еще один контроллер. Но мы не ищем лёгких путей! На выручку опять пришел 595! И опять 3 порта! Но на эти 3 порта можно посадить хоть 1000 кнопок! Тока наращивай регистры!
Суть в том, что пока не прошел положительный перепад на PCL(12) регистра, данные на нем будут отображаться, в независимости от того что творится на выводах SI(14) и SCL(11), а значит, что порты, управляющие этими выводами можно перевести на ввод и считывать с них состояние кнопок! Главное, перед считыванием, быстро подготовить нужную группу этик кнопок. А чтобы выходные данные регистра не мешали его программированию их нужно перевести в Z-состояние. А управлять Z-состоянием можно тем же выводом PCL, ведь он не нужен пока мы работаем с последовательным вводом данных.
Если в последовательности действий, то так:
1) Подаем низкий уровень на PCL/Z (Выводы регистра переходят в Z)
2) Переводим SI и SCL на вывод, и передаем выборку группы (лог. ноль на нужную группу)
3) Переводим SI и SCL на ввод.
4) Поднимаем PCL/Z.
5) Считываем данные с SI и SCL
6) Повторяем цикл…
Небольшое замечание – из-за того что при переводе на ввод произойдет переход с 0 на 1 (подтягивающий резистор) вывода SCL, использовать Q0 регистра нельзя, потому как произойдет сдвиг и Q0 загрузится неопределенным значением от SI (как показал опыт – всегда по разному.) Но это касается только первого регистра, в следующей секции регистров его смело можно использовать.
Вобщем, посадить на эти 3 порта можно целую клавиатуру :)
- Цена: $0.94 (за 10 штук)
Летом и осенью я сделал немало устройств упрощающих жизнь в дачных условиях. Но наступила зима, да и времени было мало — была пауза в обзорах. Сейчас появилось время, и я продолжил свое творчество для дачи. Данная микросхема позволяет размножить выходы контроллера для управления большИм количеством устройств. Под катом краткий обзор микросхемы и изготовление устройства, ардуинство + программная часть…
Данная микросхема уже обозревалась здесь. Но там был пример, приведенный в большинстве инструкций по этой микросхеме. В данном обзоре постараемся рассмотреть реальное практическое применение.
Посылка дошла за 3 недели, никаких проблем с микросхемами в дороге не произошло.
Вид:
В прошлом обзоре уже привели основные свойства микросхемы, кратко скажу только следующее:
Датшит на микросхему.
Микросхема 74HC595 — один из самых распространённых сдвиговых регистров: синхронный, с регистром данных (latch). Она позволяет увеличивать количество выходов микроконтроллера.
Чип преобразовывает входящий последовательный сигнал на 1 пине (Ds) в выходной параллельный на 8 пинах (Qx). Последовательная передача синхронна: для такта используется дополнительный пин (SHcp). Также отдельным пином управляется регистр данных (STcp), что позволяет изменять сигнал на 8 выходах единовременно, когда все данные переданы.
Таким образом образом из трёх пинов микроконтроллера, такого как Arduino, можно получить 8 цифровых выходов. Из регистров 74HC595 можно делать каскады, подключая один за другим (через пин Q7’), и таким образом из всё тех же 3 входящих линий получать 16, 24, 32 и т.д. цифровых выходов. Естественно, что скорость передачи данных снизится.
Выпускается в корпусах:
В нашем случае микросхема 74HC595N, соответственно она имеет DIP-16 корпус.
Обозначения выводов:
Типовая схема вкл
Сдвиговый регистр 74HC595 — AVR devices
Когда необходимо подключить к контроллеру два десятка светодиодов или еще чего на помощь приходят сдвиговые регистры. Ну не тратить же драгоценные пины микроконтроллера на это дело 🙂 Для эксперимента купил сдвиговый регистр 74HC595 и в этой небольшой статье покажу как с ним работать при помощи самого крохотного контроллера Tiny13.
Посмотрим что из себя представляет эта микруха. Распиновка на рисунке ниже:
С первого взгляда кажется немного запутано, будем разбираться. Начнем с назначения выводов:
- Q0…Q7 — выходы которыми будем управлять. Могут находится в трёх состояниях: логическая единица, логический ноль и высокоомное Hi-Z состояние
- GND — земля
- Q7′ — выход предназначенный для последовательного соединения регистров.
- MR — сброс регистра.
- SH_CP — вход для тактовых импульсов
- ST_CP — вход «защёлкивающий» данные
- OE — вход переводящий выходы из HI-Z в рабочее состояние
- DS — вход данных
- VCC — питание 5 вольт
Для управления нам вполне достаточно всего лишь трёх выводов а именно: SH_CP, ST_CP, DS.
Как работает регистр
Все не так сложно, как кажется на первый взгляд. Когда на тактовом входе SH_CP появляется логическая единица, регистр считывает бит со входа данных DS и записывает его в самый младший разряд. При поступлении на тактовый вход следующего импульса, всё повторяется, только бит записанный ранее сдвигается на один разряд, а его место занимает вновь пришедший бит. Когда все восемь бит заполнились и приходит девятый тактовый импульс то регистр снова начинает заполнятся с младшего разряда и всё повторятся вновь. Что бы данные появились на выходах Q0…Q7 нужно их «защёлкнуть». Для этого необходимо подать логическую единицу на вход ST_CP. Что бы мы не делали с регистром, данные на выходах не изменятся пока мы вновь не «защёлкнем» их. Отсюда кстати пошло название «регистр-защёлка». Теперь пару слов о других выводах микросхемы. Когда на входе OE лог 1 то выходы находятся в высокоомном состоянии. Когда подаем на этот вход логический 0, тогда выходы работают в нормальном режиме. MR — сбрасывает регистр устанавливая все выходы Q0…Q7 в состояние логического нуля. Для осуществления сброса нужно подать логический ноль на этот вход. После этого «защёлкнуть» данные. В нормальном состоянии на этом выводе должна находится логическая единица. Q7′ предназначен для последовательного соединения сдвиговых регистров. Можно соединить хоть десяток штук!
Программное обеспечение
Для того чтоб управлять этим регистром была написана небольшая библиотека. Вы без труда сможете использовать её в любом своем проекте. Состоит она всего навсего из одной процедуры ShiftRegOut перед вызовом которой нужно загрузить в регистр temp то что должно быть записано в сдвиговый регистр. Код неплохо прокомментирован, поэтому вопросов я думаю не будет. Если будут то прошу задавать их в комментариях. Если паять совсем лениво то можно собрать тестовую схемку в симуляторе Proteus. Файл симуляции прилагается. Если же хочется попробовать в настоящем железе то вот сама схема:
Кстати существуют регистры работающие на вход с параллельной загрузкой и последовательным выводом. Если требуется чтобы в ходе работы программы назначение пина можно было менять, (делать входом или выходом) то применяют так называемые расширители портов. Они обычно имеют интерфейс i2c но слишком дороги и малораспространенны во всяком случае у нас. Так что сдвиговые регистры наше все =)
Ну и напоследок фото того на чем это всё проверялось и отлаживалось:
Кстати очень удобно для отладки использовать мини макетки для SOIC корпусов. Рекомендую взять на заметку =). Все вопросы складываем в комментарии.
Файл симуляции + исходник
Чисто по приколу записал видео всего этого безобразия