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 кнопки S1-S4. Добавив два сдвоенных диода можно опрашивать 8 кнопок. А добавив 4 транзистора и резистора можно подключить дополнительный 4-х знаковый индикатор.
Чтобы динамическая индикация заработала в регистры нужно послать два байта: первый байт определяет, какой из 4-х индикаторов будет работать и какую кнопку будем опрашивать. А второй, какие из сегментов загорятся.

Подключение сдвигового регистра 74HC595 к светодиодному индикатору на примере ATtiny13 и Ардуино | Электроника и жизнь

Здравствуйте, уважаемые читатели! В прошлой статье мы говорили о семисегментном индикаторе и о его подключении к Ардуино

. Сегодня поговорим о подключении данного индикатора к микроконтроллерам семейства ATtiny с помощью сдвигового регистра 74HC595. Подключать я буду на примере ATtiny13.

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

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

Если посмотреть схему подключения из прошлой статьи, в которой мы задействовали 9 пинов Arduino UNO (8 цифровых пинов и землю), то очевидно, что у малыша ATtiny просто не хватит ног. У него всего 8 ног, из которых только 5 мы можем использовать как цифровые.

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

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

Изначально мы соберем схему на Arduino UNO, протестируем, а затем, вместо Ардуино подключим ATtiny13 и адаптируем подключение и схему для него.

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

Распиновка сдвигового регистра 74HC595

Распиновка сдвигового регистра 74HC595

Пины с 1 по 7, на схеме обозначенные от Q1 до Q7 и еще пин номер 15, обозначенный на схеме как Q0 – это цифровые выходы, которые и будут зажигать секции светодиодного индикатора.

8 пин – пин для подключения земли, а 16 пин для подачи напряжения 5В.

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

10 пин – это reset. Он очищает память регистра, при подаче низкого уровня сигнала, т.е. логического нуля. Нам это не нужно, поэтому данный пин будет постоянно подключен к питанию 5В.

С помощью подачи 5 В на 13 пин мы можем отключить выходные пины Q0-Q7. При этом значение, записанное в память регистра сохраняться. Т.е. этот пин, можно использовать для включения и отключения светодиодного индикатора. А пока что соединим его с землей.

Самое интересное происходит с пинами 11, 12 и 14, которые мы и подключаем к микроконтроллеру и по ним передаем данные, управляющие сдвиговым регистром.

Начнем с 12 пина (ST). При подаче низкого уровня сигнала на данный пин, мы подготавливаем регистр к приему цифровых данных от микроконтроллера. А при подаче высокого уровня сигнала, записывает данные во внутреннюю память регистра и одновременно, передаем сигналы на цифровые выходы регистра.

14 пин (Ds) принимает значение для выбранного бита. Т.е. при получении высокого уровня сигнала 5 В, записывается в память единица, а при получении низкого уровня сигнала, записывается 0.

А при подаче 5 В на 11 пин (SH), мы произведем сдвиг битов влево, чтобы освободить место получения нового значения через 14 пин Ds.

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

В среде Arduino IDE есть стандартная функция shiftOut(), которая значительно упрощает работу со сдвиговым регистром.

shiftOut (dataPin, clockPin, bitOrder, value)

В качестве первого аргумента (dataPin) нужно указать пин микроконтроллера, который соединен с 14 пином (Ds) сдвигового регистра.

В качестве второго аргумента (clockPin) нужно указать пин микроконтроллера, который соединен с

11 пином (SH) сдвигового регистра.

Третий аргумент (bitOrder) задает порядок чтения передаваемых регистру байт – слева направо (MSBFIRST) или справа налево (LSBFIRST).

Четвертый аргумент (value) – собственно битовое представление передаваемой цифры.

Вначале соберем схему на макетной плате с Arduino UNO.

Схема подключения сдвигового регистра 74HC595 к Ардуино

Схема подключения сдвигового регистра 74HC595 к Ардуино

Разместим на макетной плате светодиодный индикатор и рядом сдвиговый регистр.

Пины 5 В и GND Arduino UNO соединим с плюсом и минусом макетной платы.

Пины с 1 по 7 сдвигового регистра соединим с пинами светодиодного индикатора, в том же порядке, в каком они идут у светодиодного индикатора, пропуская 3 пин, связанный с землей, 5-й пин связанный с точкой и 8-й пин снова связанный с землей.

3 пин светодиодного индикатора соединим через резистор 220 Ом с землей.

Всё, со светодиодным индикатором закончили, возвращаемся к регистру. 8 его пин соединяем с землей, 16 пин с плюсом макетной платы. Еще с плюсом соединим

10 пин, а с минусом 13 пин.

Остались у нас пины для связи с микроконтроллером. Подключим 11 пин (SH) ко второму пину Arduino UNO, 12 пин (ST) к 3 пину Ардуино, а 14 пин (Ds) к 4 пину Ардуино.

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

Скетч для работы сдвигового регистра 74HC595 и Ардуино

Скетч для работы сдвигового регистра 74HC595 и Ардуино

В функции setup() настроим пины со 2 по 4 для работы с выходным сигналом.

А в функции loop() в цикле будем последовательно выводить все цифры от 0 до 9.

В начале подаем низкой уровень сигнала, на 12 пин (ST) регистра, подготавливая его к приему новых данных. Далее с помощью функции shiftOut() указываем номера пинов связанных с пином 14 (Ds) и 11 (SH) сдвигового регистра и передаем регистру битовое представление текущей цифры. После этого, подаем высокий уровень сигнала на 12 пин (ST), сообщая регистру, что записанные данные можно отправлять на цифровые выводы.

Загружаем скетч в Ардуино. И видим как цифры последовательно сменяют друг друга.

Подключение сдвигового регистра 74HC595 к Arduino UNO на макетной плате

Подключение сдвигового регистра 74HC595 к Arduino UNO на макетной плате

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

Теперь вместо Arduino UNO подключим ATtiny13. Подключение аналогичное. Только у ATtiny13 мы задействуем 5,6 и 7 ножки, которые в Arduino IDE обозначаются 0, 1 и 2.

Видоизменяем скетч для работы с ATtiny. Загружаем скетч в ATtiny.

Скетч для работы сдвигового регистра 74HC595 и ATtiny13

Скетч для работы сдвигового регистра 74HC595 и ATtiny13

Все ссылки на статьи по прошивке микроконтроллеров ATtiny, а так же схемы и скетчи я оставлю в конце статьи.

Устанавливаем ATtiny13 на макетную плату. 5, 6 и 7 его ножки соединяю с 11, 12 и 14 пинами сдвигового регистра. 4 ножку с минусом, а 8 с землей.

Схема подключения сдвигового регистра 74HC595 к ATtiny13

Схема подключения сдвигового регистра 74HC595 к ATtiny13

А в качестве источника питания буду использовать

LiPo аккумулятор на 3,7 В.

Как только подаем питание на схему, видим как последовательно выводятся все цифры от 0 до 9.

Подключение сдвигового регистра 74HC595 к ATtiny13 на макетной плате

Подключение сдвигового регистра 74HC595 к ATtiny13 на макетной плате

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

О 4-х символьных индикаторах поговорим в одной из следующих статей. Т.к. есть вариант использования вот таких готовых модулей. Существенно упрощающих подключение светодиодного индикатора к микроконтроллеру. Что в каких случаях лучше использовать и о способах подключения светодиодного индикатора и модуля на его основе к Ардуино и ATtiny мы обсудим далее.

Схема подключения сдвигового регистра 74HC595 к Ардуино - https://yadi.sk/i/aq6c40LjqrmxaA

Схема подключения сдвигового регистра 74HC595 к ATtiny13 - https://yadi.sk/i/aq6c40LjqrmxaA

Скетч семисегментный индикатор + сдвигового регистра 74HC595 + Arduino UNO -https://yadi.sk/d/pO3-qut4WgpLUQ

Скетч семисегментный индикатор + сдвигового регистра 74HC595 + ATtiny13 - https://yadi.sk/d/pO3-qut4WgpLUQ

Видео по материалам статьи:

_________________________________________________________

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

Другие публикации по теме:

74Hc595 datasheet на русском схема включения

Достаточно часто у любителей микроконтроллеров возникает проблема с нехваткой выводов. Обычно для расширения портов ввода/вывода используют сдвиговые регистры типа 74HC595. Но для управления ими требуется целых три вывода! А можно обойтись и ОДНИМ! Именно об этом пойдет речь далее.

Совершенно случайно ко мне в руки попала вот такая игрушка. Устройство представляет собой четырех разрядный статический семисегментный дисплей, выполненный на основе сдвиговых регистров 74HC595. Модуль ориентирован на ардуино и давно снят с продажи. Но интересна схема коммутации входов. Она выполнена с использованием двух RC цепочек на входах тактирования и управления выходной защелкой и позволяет управлять выходами сдвиговых регистров всего по одному проводу вместо трех.

Я бы может и прошел мимо, но данную схему впервые встретил в журнале Радио еще лет 15 назад, и тогда хотелось ее повтрить, но почему-то этого не случилось.

Схема подключения индикаторов к регистрам не вызывает вопросов. Разберемся с подключением сигналов управления. Вход тактирования 11 сдвигового регистра подключается к порту микроконтроллера напрямую. Вход данных 14 подключается к той же линии через RC-цепочку R1C1, время заряда которой составляет примерно 20-25мкС. Вход управления защелкой 12 подключен через RC-цепочку R2C2, которая заряжается примерно за 250мкС.

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

Принцип работы схемы хорошо виден на осциллограмме управляющих сигналов

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

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

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

На этом можно было бы и закончить баловство, если бы не моя привычка тестировать свои железяки. Меня насторожил тот факт, что RC цепочки имеют разницу по времени заряда всего на один порядок. Отсюда получается, что конденсатор на входе защелки может полностью зарядиться, если подать 10 единиц подряд. А с учетом того, что уровень логической единицы для 74НС595 начинается с напряжения 3,15В, то для полного заряда конденсатора достаточно подряд подать около 6 единиц.

В схеме использованы индикаторы с общим анодом, для отключения сегментов которых на выходе регистра необходимо записать единицы. Получается, что при включении на индикаторе цифры 1 необходимо передать двоичный код 11001111, который как раз и содержит 6 единиц. Если включать на семисегментном дисплее две единицы подряд, то как раз и получим шесть импульсов, передающих логические единицы. Такая комбинация успевает зарядеть конденсатор на входе защелки. В результате чего в момент обновления дисплея наблюдается кратковременное "подмигивание".

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

Мусор появляется на очень короткое время и практически не различим, НО теперь я об этом знаю… и не могу с этим жить. Как только я не пытался сократить длительности импульсов высокого уровня и увеличить паузы, полностью устранить этот глюк не получилось.

Проблему решил заменой резистора R2 с 33КОм на 100КОм. Время заряда RC-цепочки увеличилось в несколько раз. Индикатор стал работать лучше. Но все равно разница между временем заряда конденсаторов на входе данных и защелки было недостаточным для вывода на дисплей четырех единиц. Да и включить при такой схеме больше четырех сдвиговых регистров подряд не получится, т.к. конденсатор С2 все равно может успеть зарядиться до уровня логической единицы.

Для окончательной доработки схемы нужно добавить один а лучше два диода для ускорения разряда С2 и заряда С1. В идеале нужно использовать диоды Шоттки, они обладают более высоким быстродействием. Результат доработки показан на схеме.

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

А вот и листинг демо программы для микроконтроллера armega328. Частота процессора 16000000Гц. Данные передаются по линии PORTC.0. Писал в CodeVisionAVR. Думаю, что по комментариям все понятно.

В какой-то момент времени вы неизбежно столкнетесь с проблемой отсутствия достаточного количества контактов на вашем ардуино для удовлетворения потребностей вашего проекта или прототипа. Решение этой проблемы? Сдвиговый регистр, а точнее Arduino сдвиговый регистр 74hc595.

Каждый кто делал проекты на Ардуино, где использовал много светодиодов, понимал, что в значительной степени ограничен контактами Arduino и не может создавать огромные проекты, требующие большого количества контактов. В нашем конкретном проекте 16 светодиодов управляются всего лишь тремя контактами Arduino. Ключевым элементом является arduino сдвиговый регистр 74hc595. Каждый сдвиговый регистр 74HC595 может принимать до 8 светодиодов, а с помощью последовательных цепочек регистров можно увеличить контакты платы от условных 3-х до бесконечного числа.

Как работает регистр сдвига?

Прежде чем мы начнем подключать чип, давайте рассмотрим, как этот процесс работает.

Первое, что нужно прояснить, — это понятие «биты» для тех из вас, кто не знаком с двоичным кодом. Когда мы говорим о «битах», мы имеем в виду одно из чисел, составляющих двоичное значение. В отличие от обычных чисел, мы обычно считаем, что первый бит является самым большим. Итак, если мы берем двоичное значение 10100010, первый бит на самом деле равен 0, а восьмой бит равен 1. Следует также отметить, если это не подразумевалось, каждый бит может быть только 0 или 1.

Чип содержит восемь контактов, которые мы можем использовать для вывода, каждый из которых связан с битом в регистре. В случае сдвигового регистра 74HC595 мы рассматриваем их от QA до QH.

Чтобы записать эти выходы через Arduino, мы должны отправить двоичное значение в регистр сдвига, и из этого числа сдвиговый регистр может определить, какие выходы использовать. Например, если мы отправили двоичное значение 10100010, контакты, выделенные зеленым цветом на изображении выше, будут активными, а выделенные красным цветом будут неактивными.

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

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

Начинаем с 8 светодиодов

Для первой части урока нам понадобятся следующие комплектующие:

  • Arduino Uno
  • Макетная плата
  • Ардуино сдвиговый регистр 74HC595
  • 8 светодиодов
  • 8 резисторов – 220 ом должно хватить
  • Провода/перемычки

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

С надписью, направленной вверх, штифты 1-8 с левой стороны сверху вниз и 16 — 9 с правой стороны сверху вниз, как показано на рисунке ниже.

Собираем схему

Для начала подключим контакты 16 (VCC) и 10 (SRCLR) к выходу 5v на Arduino и соединяем выводы 8 (GND) и 13 (OE) с выводом Gnd на Arduino. Pin 13 (OE) используется для включения выходов, так как это активный низкий контакт, который мы можем подключить непосредственно к земле.

Затем нам нужно соединить три контакта, которыми мы будем управлять сдвиговым регистром:

  • Pin 11 (SRCLK) сдвигового регистра 74HC595 на пин 11 на Arduino — это будет называться «синхронизирующим пином»,
  • Pin 12 (RCLK) сдвигового регистра на пин 12 на Arduino — это будет обозначаться как «пин защелка»,
  • Pin 14 (SER) сдвигового регистра на пин 13 на Arduino — это будет называться «пином данных»,

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

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

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

При размещении светодиодов убедитесь, что они подключены по порядку, так что QA подключен к первому светодиоду, а QH подключен к последнему светодиоду, так как иначе наш код не включит светодиоды в правильном порядке. Когда вы закончите, у вас должно получится что-то вроде этого:

Скетч для ардуино

Теперь мы готовы загрузить код. Подключите свой Arduino к компьютеру и загрузите на него следующий эскиз для 74hc595 Arduino:

Для начала определим в верхней части эскиза следующее:

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

В методе setup мы просто инициализируем режимы пинов и переменную светодиодов.

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

После этих двух операций мы переходим к более важной части — смещению бит. Сначала мы начинаем с вызова метода bitSet. Мы передаем методу bitSet байт, что хранит биты, и переменную currentLED.

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

Таким образом, каждый раз, когда мы увеличиваем текущую переменную currentLED и передаем ее методу bitSet, мы каждый раз устанавливаем бит слева от предыдущего до 1 и, таким образом сообщаем сдвиговому регистру активировать вывод слева от предыдущего.

После установки бит мы записываем на контакт защелки указание сдвиговому регистру, что собираемся отправить ему данные. Как только мы это сделаем, мы вызываем метод shiftOut, который есть Arduino. Этот метод разработан специально для использования сдвиговых регистров и позволяет просто сдвигать биты за один вызов. Для этого мы передаем данные и синхронизацию в качестве первых двух параметров, затем передаем константу LSBFIRST, которая сообщает методу, что первый бит должен быть наименее значимым, а затем мы проходим через байт, содержащий биты, которые мы действительно хотим перенести в регистр сдвига.

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

16 светодиодов

Теперь перейдем к более сложной схеме используем 74hc595 Arduino для 16 светодиодов.

Детали

По большому счету в данном случае количество всех комплектующих увеличиваем вдвое, кроме, конечно, Ардуино Уно:

  • Arduino UNO (x1)
  • 74HC595 сдвиговый регистр (x2)
  • Светодиоды (x16)
  • 220 ом резисторы (x16)
  • Провода/перемычки
  • Две макетные платы (одна с 400 пинами, вторая с 830 пинами)
  • Потенциометр для контроля яркости (по желанию)

Схема соединения

Схема соединения получилась уже больше, чем при 8 светодиодах и одном регистре сдвига 74HC595.

Соберите схему как на рисунке выше и подключите первый регистр сдвига следующим образом:

  • GND (контакт 8) на землю
  • Vcc (контакт 16) — 5В
  • OE (контакт 13) на землю (GND)
  • MR (контакт 10) — 5 В
  • DS (контакт 14) — пин 11 Arduino
  • SH_CP (контакт 11) на контакт Arduino 12
  • ST_CP (контакт 12) к контакту 8 Arduino

Подключите второй регистр сдвига точно так же, но подключите DS (контакт 14) к первому выходу 9 регистра. После этого соедините контакты 1, 2, 3, 4, 5, 6, 7 и 15 из обоих регистров и светодиоды. Это соединение делает все контакты всегда активными и адресными, однако при включении Arduino некоторые из светодиодов могут быть включены. Решение для этого — подключить MR (контакт 10) и OE (контакт 13) к Arduino напрямую, но таким образом вы должны пожертвовать 2 выводами ардуины.

Чтобы добавить больше регистров сдвига, соедините их, как второй регистр. Всегда подключайте контакты MR и OE непосредственно к контакту Arduino и DS к предыдущему регистру. Если вы хотите отрегулировать яркость светодиодов, подключите потенциометр, как показано на рисунке выше, для управления сопротивлением для всех светодиодов. Однако это необязательно, и вы можете обойтись без него.

Скетч для ардуино

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

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

Вы также можете использовать этот код не только для светодиодов, если вам просто нужно больше контактов для вашего Arduino, используйте функцию regWrite (int pin, bool state) для записи состояния любого вывода. И нет предела, сколько сдвиговых регистров вы используете, просто измените значение numOfRegisters, а все остальное уже втоматизировано.

В ситуации когда не хватает выходов микроконтроллера, что обычно делают? Правильно – берут микроконтроллер с большим количеством выходов. А если не хватает выводов у микроконтроллера с самым большим количеством выходов, то могут поставить и второй микроконтроллер.
Но в большинстве случаев проблему можно решить более дешевыми способами например использовать сдвиговый регистр 74HC595.

Преимущества использования сдвигового регистра 74HC595:

  • не требует никакой обвязки кроме конденсатора по питанию;
  • работает через широкораспостраненный интерфейс SPI;
  • для самого простого включения достаточно двух выходов микроконтроллера;
  • возможность практически неограниченного расширения количества выходов без увеличения занятых выходов микроконтроллера;
  • частота работы до 100 МГц;
  • напряжение питания от 2 В до 6 В;
  • дешевый — стоит менее 5 центов;
  • выпускается как в планарных корпусах (74HC595D удобен для производства), так и в DIP16 (74HC595N удобен для радиолюбителей и макетирования).

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

  • 8-битного регистра сдвига,
  • 8-битного регистра хранения,
  • 8-битного выходного регистра.

Рассмотрим какие выводы есть у сдвигового регистра 74hc595.

Общего вывод и вывод питания объяснений не требуют.

  • GND — земля
  • VCC — питание 5 вольт

Входы 74HC595:

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

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

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

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

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

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

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

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

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

Выходы 74HC595

  • Q0…Q7 – выходы которыми будем управлять. Могут находится в трёх состояниях: логическая единица, логический ноль и высокоимпедансное состояние
  • Q7′ – выход предназначенный для последовательного соединения регистров.

Временная диаграмма на которой показано движение логической единицы по всем выходам регистра.

Как говориться лучше один раз увидеть, чем семь раз услышать. Я сам впервые применяя регистр 74HC595 не до конца понимал его работу и чтобы понять смоделировал нужную схему в Proteus.

Вот такая схема подключения семисегментных индикаторов к микроконтроллеру ATMega48 по SPI получилась:

Это схема с динамической индикацией, то есть в каждый момент времени загорается только одна цифра счетверенного семисегментного индикатора, потом загорается следующая и так по кругу. Но так как смена происходит очень быстро, то глазу кажется, что горят все цифры.
Кроме того одновременно эта схема и опрашивает 4 кнопки S1-S4. Добавив два сдвоенных диода можно опрашивать 8 кнопок. А добавив 4 транзистора и резистора можно подключить дополнительный 4-х знаковый индикатор.
Чтобы динамическая индикация заработала в регистры нужно послать два байта: первый байт определяет, какой из 4-х индикаторов будет работать и какую кнопку будем опрашивать. А второй, какие из сегментов загорятся.

12 thoughts on “ Сдвиговый регистр 74HC595 и семисегментный индикатор ”

По моему — это тот случай, когда объяснение простого может выглядеть сложным, а не наоборот. Что может быть проще, чем два бита переслать? В данном примере, биты, пересылаемые микроконтроллером в последовательном виде — преобразуются регистрами в параллельный. Один подает на матрицу, в роли которой выступает индикатор, данные, другой — адрес. Приведен один из примеров интерфейса периферии, обслуживаемой микроконтроллером. Я бы только добавил, что счетверенный семисегментныйт индикатор, чаще всего, используют в роли часов.

В приведенной схеме динамической индикации светодиоды семисегментного индикатора должны быть на напряжение не более 4 В. В больших индикаторах часто используется последовательное включение нескольких светодиодов: например в индикаторах высотой 5см — 4 светодиода.

Поэтому стоит сделать регистру 74HC595 высоковольтный выход: подключить по MosFET на каждый выход. Затвор на выход микросхемы, исток на землю, а к стоку — «высоковольтную» нагрузку.

А действительно, часто такие схемы обслуживают таблоиды и поболее 5 см. Там может и предложенные MosFET (КМОП, полевики с изолированным затвором) будут рентабельны — цена-то у них, как правило, кусючая. В большинстве-же случаев, достаточно будет DD1, как и DD2 подсоединить к токовым ключам, а не напрямую.
Этого не сделано на приведенной схеме, так как на DD2 может падать нагрузка одновременно с семи сегментов, а на DD1 — только с одного. А экономичность схематического решения — далеко не последнее дело, в каждом, конкретном случае.

Datasheet 74HC595 и 74HCT595 от NXP.

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

А зачем, если цена фактически одна? Купить сразу несколько сотен 74HC595 по 1,50 за штуку и ставить их везде и всюду, где нужны последовательно-параллельные регистры.

Мне в 74HC595 нравится именно возможность организации статической индикации, с одновременным переключением индикаторов. Так шумов меньше, чем у индикации динамической или у статической индикации без промежуточного (буферного) регистра. К тому же во втором случае имеется паразитная засветка индикатора при частой смене показаний.

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

Тот микроконтроллер что дает сигнал на включение разрядов индикатора.
Например логическим нулем зажигаем разряд который подключен к выводу Q0 микросхемы DD2 , тогда при нажатии кнопки S1 на 9-том контакте X1 разъема появляется логический ноль, этот сигнал и считывает микроконтроллер.

А кто и как будет считывать значения с кнопок?

В этом схеме нет алгоритм для считывание состояние кнопок.
Для управление 7сег. индик. лучше включить после 595 микросхему 2003.

Применяйте микросхему TPIC6B595DWR, которая уже содержит полевики с открытым стоком на выходе.

Как подключить сдвиговый регистр 74HC595 и управлять 16 реле с телефона

Смотрите как управлять 16 реле со своего телефона. Рассказываю как установить выходной сдвиговый регистр 74hc595. Эта микросхема 74hc595 добавит выходы на Ардуино или ESP 8, 16, 24, 32 и так далее без потерю скорости.

В проектировании микроконтроллеров очень часто надо подключать большое количество модулей и датчиков, а входов и выходов на микроконтроллерах очень мало, если не считать такого монстра как Ардуино МЕГА. Но и у него выходы могут быстро закончиться если вы захотите например построить большое табло на индикаторах. 
Но разработчики придумали сдвиговый регистр 74hc595.
Одна такая микросхема способна добавить 6 выходов, а 2 уже 16, 3- 24 и так далее. А задействовано будет всего 3 вывода. 

74HC595 — это восьмиразрядный сдвиговый регистр с последовательным вводом, последовательным или параллельным выводом информации, с триггером-защелкой и тремя состояниями на выходе.
 И не волнуйтесь, что можете потерять в  скорости, этого не случится, так как эта микросхема работает на частотах до 100 мГц, а это значительно больше, чем может выдать микроконтроллер.

Кстати, такие же сдвиговые регистры есть и для увеличения количества входов 74HC165
У меня уже есть пара видео про сдвиговые регистры можете посмотреть. Правда там всё про Ардуино, но там я объяснял больше теории, поэтому здесь будет больше практики.

Вот так выглядит WEB страница с кнопками на экране телефона. Так как я разместил все 16 кнопок в 1 ряд, то они не поместились в вертикальном положении, поэтому я снимал в горизонтальном. 
А ещё у меня установлено 12 реле вместо 16, я просто не нашёл свободных ещё 4 реле. Но в скетче прописано для 16 кнопок.
К реле я не стал подключать никакую нагрузку и поэтому будем ориентироваться по загорающимся светодиодам на модулях.
Так же в скетче прописано, что если реле активно, то кнопки будут окрашены в зелёный цвет. Кстати внутри кнопок, для тех кто не понял, изображено малюсенькое реле.
Включение и выключение реле осуществляется одной кнопкой. А снизу расположена кнопка, которая может включать или выключать все реле одновременно.
Теперь давайте посмотрим как это выглядит в экране браузера. Тоже понажимаем кнопки и проверим как работает из браузера.
Как видите отличий нет, ну если только кнопки стали побольше.
У нас получилось добавить дополнительно 16 выходов, затратив при этом всего 3 выхода, но нам никто не мешает добавить ещё 16 реле, а задействовано будет всё те же 3 вывода.
Посмотрим схему подключения.

Я нарисовал схему для двух регистров. Можно было бы и больше, но они подключаются каскадом, и там ничего сложного.
Питание микросхемы от 2,5 вольт поэтому не важно к какому выводу питания вы будете подключать, 5 или 3 вольта. Я питаю всю схему от 5 вольт, поэтому подключился к контакту VIN.
Выход первого регистра, вывод 9 должен быть подключен ко входу второго вывод 14.  А вывод 9 пойдёт к следующему регистру.
11, 12 и 14 подключаются соответственно к d1, d3, и d2 первой микросхемы.
Для более подробного описания смотрите видео, что я указал в начале видео.
К выходам 15, 1, 2, 3, 4, 5, 6 и 7 подключены входы реле. Я на схеме вместо реле нарисовал светодиоды, так как это более понятно.
Ну и наконец пришло время посмотреть на скетч. Я вроде там постарался всё откомментировать. Что будет не понятно, спрашивайте.
Здесь пишем пароль и логин своей WIFI сети. А это пины для подключения регистра к плате.
Вот так пишем код для отображения 16 кнопок на странице, и 17 кнопка – это включить или выключить все реле.
Это стандартное подключение к сети и получение IP адреса с выводом в монитор порта.

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

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

Схема подключения 74hc595

Схема подключения 74hc595 Ардуино: всё о сдвиговом регистре | класс робототехники.

Сдвиговый регистр 74hc595 и arduino — записки программиста.

Учебный курс avr. Работа с spi модулем. Управление.

Микроконтроллеры avr: 74hc595 (сдвиговый регистр) через.

Подключение семисегментных индикаторов по трём проводам.
Подключение lcd hd44780 к avr attiny85 через сдвиговой.

Урок 3 подключаем 2 сдвиговых регистра к arduino. Пишем.

Сдвиговый регистр 74hc595 и семисегментный индикатор.

Сдвиговый регистр 74hc595 и семисегментный индикатор.
Сдвиговый регистр 74hc595.

Множим выходы с помощью сдвигового регистра 74hc595.
Как подключить сдвиговый регистр 74hc595 к arduino.

74hc595 arduino: сдвиговый регистр, основы использования.

Знакомство с микросхемой регистра сдвига 74hc595.
Урок 2 — подключаем сдвиговый регистр 74нс595 к arduino.
Arduino: сдвиговый регистр 74нс595 или размножаем/экономим.
Эксперимент 14. Счётчик нажатий [амперка / вики]. Avr урок 25. Spi. Подключаем сдвиговый регистр 74hc595.

Знакомство с микросхемой регистра сдвига 74hc595.

Множим выходы с помощью 74hc595. Сдвиговый регистр.Железное небо скачать центр Lp скачать lost on you Скачать джейлбрейк 9.3.2 Шансон скачать альбомом Скачать запись советы парты

Микроконтроллеры AVR: 74HC595 (сдвиговый регистр)

Сдвиговый регистр 74HC595 используется в основном для расширения количества выводов микроконтроллера. К примеру нам необходимо к микроконтроллеру ATtiny13 подключить 8 светодиодов. Сделать это попросту было бы не возможно, т.к. микроконтроллер имеет всего 8 ножек, две из которых отведены под питание и одна под сброс. Но если в Вашем арсенале есть сдвиговый регистр, то задача очень сильно упрощается. управлять регистром можно всего по трем ножкам. А что если потребуется подключить 16, 24 или еще больше светодиодов? Все просто, сдвиговый регистр 74HC595 имеет возможность наращивать разрядность при помощи аналогичных микросхем. При этом количество задействованных ножек микроконтроллера останется неизменным.
Рисунок 1 - Схема 74HC595
На рисунке 1 изображена схема сдвигового регистра.
  • DS - вход данных
  • Q7S - выход для каскадного подключения регистров
  • Q0-Q7 - рабочие выходы
  • SHCP - вход тактовых импульсов
  • MR - вход для сброса регистра
  • STCP - вход помещения данных в регистр хранения
  • OE - вход, переводящий рабочие выходы из высокоомного в рабочее состояние

При поступлении тактового импульса на вход SHCP со входа DS считывается первый бит и записывается в младший разряд. Со следующим тактовым импульсом бит из младшего разряда сдвигается на один разряд, а на его места записывается бит, поступивший на вход DS. Так повторяется все время, а при переполнении сдвигового регистра, ранее поступившие биты последовательно появляются на выходе Q7S. Очистка регистра производится подачей низкого уровня на вход MR

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

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

Основные характеристики:

  • напряжение питания 2-6 В
  • рабочая частота 2-100 МГц (зависит от напряжения питания и от производителя)
  • максимальный выходной ток 35 мА на выход (75 мА на весь регистр)

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

Подключение семисегментного индикатора через 74hc595. Статическая индикация. - Как подключить - AVR project.ru


$regfile = "m32def.dat" ' тип МК
$crystal = 16000000 ' выбор кристала для расчета задержек

'*****************************************[Определение переменных и констант]************************************

Dim Count As Byte ' переменная для работы с индикацией
Dim Ledout As Byte ' переменная для загрузки в регистры сдвига
Dim Number(4) As Byte ' значения 6-ти разрядов
Dim H_flag(4) As Byte ' флаги точек 6-ти разрядов
Dim Blink_count As Word ' счетчик времени мигания
Dim Blink_flag(4) As Byte ' флаги мигания разрядов

'***********************************************[Инициализация портов]*******************************************

Ddrc = &B11111111 'порт В на выход ' вывод SH_CP регистра (тактовые импульсы)

'*********************************************[Инициализация прерываний]*****************************************

Config Timer0 = Timer , Prescale = 64 ' конфигурируем таймер индикации
On Ovf0 Refresh ' метка на прерывание индикации

Enable Interrupts ' разрешаем прерывания
Enable Ovf0 ' и для индикации в частности

'********************************************[Присвоение уникальных имен]****************************************

595clock Alias Portc.0 : 595data Alias Portc.1 ' выводы 74HC595

'*********************************************[Начало основной программы]****************************************

Number(1) = 1 ' на индикацию выводим -tESt-
Number(2) = 2
Number(3) = 3
Number(4) = 4

Blink_flag(1) = 1 ' мигаем первым и шестым разрядом
Blink_flag(4) = 1

'-------------------------

Do

Loop

'***********************************[Процедуры обработки подпрограмм и прерываний]*******************************

Refresh: ' прерывание таймера Т0

If Blink_flag(count) = 1 And Blink_count > 200 Then ' если флаг мигания выставлен и счетчик > 200
Ledout = Lookup(0 , Rank) ' выключаем разряд
Else ' иначе (флаг не выставлен, либо счетчик < 200)
Ledout = Lookup(count , Rank) ' забираем в переменную номер разряда
End If

Shiftout 595data , 595clock , Ledout , 1 ' закидываем в регистр

Incr Count : If Count > 4 Then Count = 1 ' выбираем разряд для загрузки
Incr Blink_count : If Blink_count > 400 Then Blink_count = 1 ' длительность мигания

Ledout = Lookup(number(count) , Digits) ' забираем в переменную код цифры

If H_flag(count) = 1 Then ' управление точками индикатора
Ledout = Ledout Xor &B00100000
End If

Shiftout 595data , 595clock , Ledout , 1 ' закидываем в регистр

Pulseout Portc , 2 , 20 ' защелкиваем данные (для 8МГц импульс 5мкс)

Return

'******************************************************[DATA]****************************************************

Digits: ' цифры

Data &B11000000 , &B11111100 , &B10100100 , &B10110000 , &B10011001 ' 0 1 2 3 4
'-------------------------

Rank: ' разряды

'Data &B00000000 ' выкл
Data &B00000001 , &B00000010 , &B00000100 ' 1 2 3
Data &B00001000 , &B00010000 , &B00100000 ' 4 5 6

74HC595 Распиновка регистра сдвига, характеристики, схема и техническое описание

74HC595 8-битный регистр сдвига

74HC595 8-битный регистр сдвига

74HC595 8-битный регистр сдвига

74HC595 Распиновка

нажмите на картинку для увеличения

Конфигурация контактов

Номер контакта

Имя контакта

Описание

1,2,3,4,5,6,7

Выходные контакты (от Q1 до Q7)

74hc595 имеет 8 выходных контактов, из которых 7 являются этими контактами.Могут управляться серийно

8

Земля

Подключен к заземлению цепи

9

(Q7) Последовательный выход

Этот вывод используется для подключения более одного 74hc595 в качестве каскадного

10

(MR) Общий сброс

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

11

(SH_CP) Часы

Это тактовый вывод, на который должен быть подан тактовый сигнал от MCU / MPU

.

12

(ST_CP) Защелка

Штифт защелки используется для обновления данных на выходных контактах.Активный высокий

13

(OE) Разрешение выхода

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

14

(DS) Последовательные данные

Это вывод, на который отправляются данные, на основании которого управляются 8 выходов

15

(Q0) Выход

Первый выходной контакт.

16

Vcc

Этот вывод питает ИС, обычно используется + 5В.

Характеристики
  • 8-битный регистр сдвига, последовательный вход - параллельный выход
  • Рабочее напряжение: от 2 В до 6 В
  • Потребляемая мощность: 80 мкА
  • Выходной ток источника / стока: 35 мА
  • Выходное напряжение
  • равно рабочему напряжению
  • Минимальное входное напряжение высокого уровня: 3.15 В при (Vcc = 4,5 В)
  • Максимальное входное напряжение низкого уровня: 1,35 В при (Vcc = 4,5 В)
  • Можно легко каскадировать с большим количеством микросхем для получения большего количества выходов
  • Максимальная тактовая частота: 25 МГц при 4,5 В
  • Доступен в 16-контактных корпусах PDIP, GDIP, PDSO

Примечание. Полную техническую информацию можно найти в таблице данных 74hc595 , приведенной в конце этой страницы.

Альтернативные регистры сдвига

с.Номер:

Имя

Тип

1

4035

4-битный параллельный выходной регистр сдвига

2

74LS379

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

3

4014

4-битный статический регистр сдвига

4

74LS166

8-битный регистр сдвига

5

74LS323

8-битный регистр сдвига / хранения

6

74LS164

Регистр сдвига S / P

7

4015

Двойной 4-битный статический регистр

8

74LS299

8-битный регистр сдвига / хранения

Где использовать 74HC595 IC

74HC595 - это 8-битный регистр последовательного ввода - параллельного вывода , т.е.е. он может получать (вводить) данные поочередно и параллельно управлять 8 выходными контактами. Это очень удобно, когда на нашем MCU / MPU не хватает контактов GPIO для управления требуемым количеством выходов. Он часто используется в проектах, где необходимо управлять относительно большим количеством светодиодов с помощью микроконтроллера. Его также можно использовать для сопряжения с ЖК-экраном, поскольку они могут действовать как бит данных для ЖК-дисплеев. Его также можно использовать для управления нагрузками 5 В, такими как реле, через микроконтроллер 3,3 В, поскольку напряжение высокого уровня составляет всего 3.15. Так что, если вы ищете ИС, чтобы сэкономить на выводах GPIO на микроконтроллере, то эта ИС может быть для вас правильным выбором.

Как использовать 74HC595 IC

Регистр сдвига 74HC595 обычно используется с микроконтроллерами или микропроцессорами для расширения функциональных возможностей GIPO. Для этого требуется всего 3 контакта, подключенных к MCU: часы, данные и защелка. Он имеет широкое рабочее напряжение от 2 В до 6 В. Схема применения ИС показана ниже:

Контакты 11, 14 и 12 подключены к контактам GPIO микроконтроллера.В котором вывод 11 - это часы, которые посылают постоянный импульс, чтобы поддерживать синхронизацию. Контакт 14 - это данные, которые фактически отправляют данные о том, какие выходные контакты должны оставаться на низком уровне, а какие - на высоком. Контакт 12 - это защелка, которая обновляет полученные данные на выходных контактах, когда он установлен в высокий уровень, этот контакт также может постоянно удерживаться в высоком состоянии. Изображение ниже поможет вам лучше понять.

Как вы можете видеть, часы продолжают серию импульсов, и данные идут на высокий уровень только в том месте, где выходной сигнал должен стать высоким.Вот, например, двоичное значение 0b10110011 передается в микроконтроллер. Вывод Master Reset (MR) используется для сброса выходов, когда он не используется, он удерживается на высоком уровне до vcc, аналогично на выводе должен оставаться низкий уровень, когда он не используется.

Еще одним важным преимуществом 74hc595 IC является возможность каскадного подключения для управления более чем 8 выходами. Для этого мы используем Q7 ’(вывод 9), этот вывод должен быть подключен к выводу данных второй микросхемы 74HC595. Таким образом, первые 8 бит, отправленные из MCU, будут использоваться 1-й IC, а вторые 8-битные будут использоваться 2-й IC.

Приложения
  • Расширьте контакт GPIO на MCU / MPU
  • Проекты светодиодных матриц / кубов
  • Интерфейс LCD
  • Каскадные приложения
  • Контроллер высокого логического уровня

2D Модель 74HC595 (PDIP)

Схема

драйвера светодиодов

I. Введение

74HC595 - это 8-битный регистр сдвига с последовательным входом или параллельным выходом с регистром хранения и выходами с 3 состояниями.74HC595 с характеристиками высокой скорости, низкого энергопотребления и простого управления может быть легко использован в интерфейсе MCU для управления работой светодиодов. В этой статье представлена ​​принципиальная схема светодиодного дисплея, управляемого 74HC595.

Каталог

II. Базовое описание

2.1 Светодиодный дисплей

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

2.2 74HC595

74HC595 - это 8-битный регистр сдвига с последовательным входом / последовательным или параллельным выходом с регистром хранения и выходами с 3 состояниями. И сдвиговый регистр, и регистр хранения имеют отдельные часы. Устройство оснащено последовательным входом (DS) и последовательным выходом (Q7S) для включения каскадирования и входа MR с асинхронным сбросом. LOW на MR сбрасывает регистр сдвига. Данные сдвигаются при переходах от LOW-to-HIGH входа SHCP. Данные из сдвигового регистра передаются в регистр хранения при переходе от низкого уровня к высокому на входе STCP.Если оба тактовых генератора соединены вместе, регистр сдвига всегда будет на один тактовый импульс впереди регистра хранения. Данные в регистре хранения появляются на выходе всякий раз, когда вход разрешения выхода (OE) имеет низкий уровень. ВЫСОКОЕ значение на OE заставляет выходы переходить в высокоимпедансное состояние ВЫКЛ. Работа входа OE не влияет на состояние регистров. Входы включают фиксирующие диоды. Это позволяет использовать токоограничивающие резисторы для сопряжения входов с напряжением, превышающим VCC.

Рисунок 1.Функциональная схема 74HC595

Рис. 2. 74HC595 Логический символ

III. Конструкция схемы

3.1 Аппаратная схема

На рисунке 3 показана схема панели дисплея, разработанная с интерфейсами AT89C2051 и 74HC595.

Рисунок 3. Схема панели дисплея

P115, P116 и P117 порта P1 используются для управления отображением светодиода, и они подключены к контактам SLCK, SCLK и SDA соответственно. Для отображения значения напряжения используются три цифровых трубки.На печатной плате LED3 находится крайним левым, а LED1 - крайним правым. При отправке данных сначала отправьте код дисплея LED3 и, наконец, отправьте код дисплея LED1. Яркость светодиода регулируется сопротивлением PR1 - PR3.

2.2 Драйвер дисплея

Используйте DISP1, DISP2 и DISP3 для хранения данных дисплея. После завершения инициализации ЦП вызовите подпрограмму LRDISP, чтобы очистить регистр 74HC595. Нет необходимости вызывать подпрограмму очистки перед вызовом подпрограммы отображения DISPLAY.Теперь напишите две подпрограммы следующим образом.

CLRDISP:

MOVR2 , # 24

CLRBIT :

CLRSCLK

CLRC

MOVSDA , C

SETBSCLK

DJNZR2 , CLRBIT

RET

Дисплей:

CLRSLCK

MOVR3 , # 3

MOVR0 , # DISP3

DISP1 :

MOVA , @ R0

MOVR2 , # 8

DISP2 :

CLRSCLK

RLCA

MOVSDA , C

SETBSCLK

DJNZR2 , DISP2

DECR0

DJNZR3 , DISP1

SETBSLCK

RET

IV.Заключение

Из приведенных выше примеров видно, что не возникает сложных технических проблем при проектировании аппаратного и программного обеспечения, когда 74HC595 используется для разработки схемы драйвера светодиода. Кроме того, 74HC595 может использоваться не только для управления светодиодными дисплеями, но и для управления светодиодами. Каждый 74HC595 может управлять 8 светодиодами одновременно. Это решение идеально, когда требования к объему продукта невелики и необходимо снизить стоимость.


FAQ

74HC595 - это сдвиговый регистр, работающий по протоколу Serial IN Parallel OUT.Он последовательно получает данные от микроконтроллера, а затем отправляет эти данные через параллельные выводы. Мы можем увеличить наши выходные контакты на 8, используя одну микросхему.

8-битный регистр сдвига 74HC595N

Регистр сдвига - это микросхема, которую вы можете использовать для управления множеством выходов (здесь 8) одновременно, используя только несколько контактов (здесь 3) вашего Arduino.

  • Как работает сдвиговый регистр?

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

  • Как 74HC595 Shift Regiester работает?

У 595 есть два регистра (которые можно рассматривать как «контейнеры памяти»), каждый из которых содержит всего 8 бит данных. Первый называется сдвиговым регистром. Регистр сдвига находится глубоко внутри микросхем ИС, спокойно принимая входные данные.

  • Как работает 8-битный регистр сдвига?

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

Как взаимодействовать регистр сдвига 74HC595 с Arduino?

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

Введение

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

Теперь рассмотрим слегка продвинутый проект, в котором ваши требования включают в себя те же 8 светодиодов, а также выполнение других вещей, таких как отображение сообщения или любой информации на ЖК-дисплее 16 × 2 или интерфейс устройства Bluetooth для управления светодиодами через смартфон. !!!

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

На помощь приходит ИС сдвигового регистра.

Что такое сдвиговый регистр?

Регистр сдвига - это, по сути, ИС преобразователя из последовательного в параллельный. Он в основном принимает последовательный ввод через один контакт (ну, технически вам нужно как минимум 3 контакта, о которых я расскажу позже) и преобразует его в 8-битный параллельный вывод, тем самым эффективно уменьшая количество контактов интерфейса между микроконтроллером и его устройства вывода.

Существуют и другие разновидности регистров сдвига, такие как Serial IN Parallel OUT (тот, который нас интересует), Serial IN, Serial OUT, Parallel IN, Serial OUT и Parallel IN, Parallel OUT.Для получения дополнительной информации о регистрах сдвига посетите страницу ТИПЫ И ПРИЛОЖЕНИЯ СДВИГОВЫХ РЕГИСТРОВ .

В этом проекте я буду использовать ИС сдвигового регистра типа Serial IN и Parallel OUT под названием 74HC595.

Краткое примечание 74HC595 Регистр сдвига IC

Как упоминалось ранее, 74HC595 IC представляет собой 8-битный регистр сдвига последовательного входа и параллельного выхода. Это 16-контактная ИС, доступная в широком диапазоне корпусов, таких как DIP, SOIC, SSOP и TSSOP.

Схема контактов регистра сдвига 74HC595

На следующем изображении показана схема контактов регистра сдвига 74HC595.

Описание выводов регистра сдвига 74HC595

В следующей таблице кратко описаны выводы регистра сдвига 74HC595.

Номер контакта Имя контакта Описание
15, 1-7 QA, QB - QH QA - QH (8) Выходные контакты
8 GND Контакт заземления
9 QH ' QH' Выход
10 SRCLR ' Вход сброса
11 SRCLK Вход часов
12 RCLK Вход часов регистра памяти
13 OE ' Разрешение выхода
14 SER Последовательный вход
16 VCC Напряжение питания

ПРИМЕЧАНИЕ: Существует несколько производителей ИС регистра сдвига 74HC595 и Соглашение каждого производителя может быть разным.Ознакомьтесь с таблицей данных производителя. Вышеуказанные названия контактов взяты из таблицы данных, предоставленной Texas Instruments.

Как использовать регистр сдвига 74HC595 с Arduino?

Позвольте мне построить простую схему, в которой я буду использовать только три контакта Arduino UNO и управлять 8 светодиодами. Это станет возможным при использовании регистра сдвига 74HC595 с Arduino.

Три контакта сдвигового регистра, которые необходимо подключить к Arduino, - это контакты 11 (вход часов), 12 (вход часов регистра хранения или просто вход защелки) и 14 (вход данных).

Все 8 светодиодов будут подключены к ИС сдвигового регистра. (подробнее в разделе схемотехники).

Принципиальная схема

На следующем изображении показана принципиальная схема взаимодействия регистра сдвига 74HC595 с Arduino UNO.

Необходимые компоненты
  • Arduino UNO
  • 74HC595 Регистр сдвига IC
  • Макетная плата
  • 8 светодиодов
  • 8 резисторов 1 кОм
  • Первая цепь питания 5 В
    3
  • Конструкция 9 Подключение проводов вывод последовательного входа регистра сдвига 74HC595 на вывод 4 Arduino.Затем подключите контакты часов и защелки, то есть контакты 11 и 12 74HC595 к контактам 6 и 5 Arduino соответственно.

    Теперь подключите 8 светодиодов с отдельными резисторами ограничения тока 1 кОм к 8 выходным контактам 74HC595 IC. Что касается источника питания, подключите отдельный источник питания 5 В к микросхеме 74HC595 с общим заземлением к Arduino, а не подайте 5 В от Arduino.

    Код

    Ниже приведен простой код для последовательного включения светодиодов.

    Рабочий

    Давайте теперь попробуем разобраться в работе этого проекта.Первоначально все светодиоды будут выключены, поскольку светодиод байтовой переменной установлен на 0. Теперь каждый бит устанавливается на 1 с помощью функции «bitSet» и смещается с помощью функции «shiftOut».

    Соответственно, каждый светодиод будет включаться в одинаковой последовательности. Если вы хотите выключить светодиод, вы можете использовать функцию «bitClear».

    Приложения

    ИС сдвигового регистра 74HC595 или любой аналогичный сдвиговый регистр в этом отношении можно использовать в следующих приложениях:

    • LED Control
    • Сетевые коммутаторы
    • Серверы
    • Power Infrastructure
    • Industrial Control
    • Electronic Appliances
    • Простое преобразование данных из последовательного в параллельный
    • Логика захвата и хранения

    7-сегментный дисплей со сдвиговым регистром 74HC595

    / *

    * 7-сегментный дисплей со сдвиговым регистром 74HC595

    * Пример 4-значного счетчика .

    * Используется 7-сегментный дисплей с общим анодом.

    * Это бесплатное программное обеспечение БЕЗ ГАРАНТИЙ.

    * https://simple-circuit.com/

    * /

    // определение кнопки счетчика

    #define button A0

    // определение контактов регистра сдвига

    #define clockPin 7 // тактовый вывод

    #define dataPin 6 // data pin

    // общие выводы четырехзначных определений

    #define Dig1 5

    #define Dig2 4

    #define Dig3 3

    #define Dig4 2

    // объявления переменных

    byte current_digit;

    int count = 0;

    void disp (номер байта, bool dec_point = 0);

    void setup ()

    {

    pinMode (кнопка, INPUT_PULLUP);

    pinMode (Dig1, ВЫХОД);

    pinMode (Dig2, ВЫХОД);

    pinMode (Dig3, ВЫХОД);

    pinMode (Dig4, ВЫХОД);

    pinMode (clockPin, ВЫХОД);

    pinMode (dataPin, ВЫХОД);

    disp_off (); // выключить дисплей

    // Конфигурация прерывания переполнения модуля Timer1

    TCCR1A = 0;

    TCCR1B = 1; // включаем Timer1 с предварительным делителем = 1 (16 тиков по 1 мкс)

    TCNT1 = 0; // установить значение предварительной загрузки Timer1 на 0 (сброс)

    TIMSK1 = 1; // разрешить прерывание переполнения таймера 1

    }

    ISR (TIMER1_OVF_vect) // подпрограмма обслуживания прерывания таймера 1 (ISR)

    {

    disp_off (); // выключить дисплей

    switch (current_digit)

    {

    case 1:

    disp (count / 1000); // готовимся к отображению цифры 1 (крайняя левая)

    digitalWrite (Dig1, LOW); // включаем цифру 1

    break;

    case 2:

    disp ((count / 100)% 10); // готовимся к отображению цифры 2

    digitalWrite (Dig2, LOW); // включаем цифру 2

    break;

    case 3:

    disp ((count / 10)% 10); // готовимся к отображению цифры 3

    digitalWrite (Dig3, LOW); // включаем цифру 3

    break;

    case 4:

    disp (count% 10); // готовимся к отображению цифры 4 (крайняя правая)

    digitalWrite (Dig4, LOW); // включаем цифру 4

    }

    current_digit = (current_digit% 4) + 1;

    }

    // основной цикл

    void loop ()

    {

    if (digitalRead (button) == 0)

    {

    count ++; // увеличиваем "count" на 1

    if (count> 9999)

    count = 0;

    задержка (200); // ждать 200 миллисекунд

    }

    }

    void disp (номер байта, bool dec_point)

    {

    переключатель (число)

    {

    case 0: // print 0

    shiftOut (dataPin , clockPin, MSBFIRST, 0x02 |! dec_point);

    digitalWrite (clockPin, HIGH);

    digitalWrite (clockPin, LOW);

    перерыв;

    case 1: // печать 1

    shiftOut (dataPin, clockPin, MSBFIRST, 0x9E |! Dec_point);

    digitalWrite (clockPin, HIGH);

    digitalWrite (clockPin, LOW);

    перерыв;

    case 2: // печать 2

    shiftOut (dataPin, clockPin, MSBFIRST, 0x24 |! Dec_point);

    digitalWrite (clockPin, HIGH);

    digitalWrite (clockPin, LOW);

    перерыв;

    case 3: // print 3

    shiftOut (dataPin, clockPin, MSBFIRST, 0x0C |! Dec_point);

    digitalWrite (clockPin, HIGH);

    digitalWrite (clockPin, LOW);

    перерыв;

    case 4: // print 4

    shiftOut (dataPin, clockPin, MSBFIRST, 0x98 |! Dec_point);

    digitalWrite (clockPin, HIGH);

    digitalWrite (clockPin, LOW);

    перерыв;

    case 5: // печать 5

    shiftOut (dataPin, clockPin, MSBFIRST, 0x48 |! Dec_point);

    digitalWrite (clockPin, HIGH);

    digitalWrite (clockPin, LOW);

    перерыв;

    case 6: // печать 6

    shiftOut (dataPin, clockPin, MSBFIRST, 0x40 |! Dec_point);

    digitalWrite (clockPin, HIGH);

    digitalWrite (clockPin, LOW);

    перерыв;

    case 7: // печать 7

    shiftOut (dataPin, clockPin, MSBFIRST, 0x1E |! Dec_point);

    digitalWrite (clockPin, HIGH);

    digitalWrite (clockPin, LOW);

    перерыв;

    case 8: // печать 8

    shiftOut (dataPin, clockPin, MSBFIRST,! Dec_point);

    digitalWrite (clockPin, HIGH);

    digitalWrite (clockPin, LOW);

    перерыв;

    case 9: // печать 9

    shiftOut (dataPin, clockPin, MSBFIRST, 0x08 |! Dec_point);

    digitalWrite (clockPin, HIGH);

    digitalWrite (clockPin, LOW);

    }

    }

    void disp_off ()

    {

    digitalWrite (Dig1, HIGH);

    digitalWrite (Dig2, HIGH);

    digitalWrite (Dig3, HIGH);

    digitalWrite (Dig4, HIGH);

    }

    // конец кода.

    74HC595: Регистры сдвига последовательного вывода и приложения для схем

    Варианты 74HC595 в поисковой системе Ultra Librarian.

    Регистры сдвига перемещают данные в точные интервалы времени при выполнении вычислений в сложных электронных компонентах. 74HC595 и его обновленный компонент SN74HC595 могут как обрабатывать, так и объединять простые данные в более сложные вычисления, управляя калькуляторами, компьютерами и другими сложными машинами. Эти компоненты и их варианты могут использоваться в последовательных или параллельных схемах, с их собственными внутренними часами или с общесистемными часами.

    Обзор 74HC595

    74HC595 - это 8-битный регистр сдвига, который принимает последовательный ввод и может создавать последовательный или параллельный вывод. У него есть вариантный компонент 74HCT595, который имеет немного другую форму. Оба компонента также содержат регистр хранения и три отдельных выхода. Регистр сдвига и регистр хранения имеют свои собственные часы. Если часы соединены вместе, часы регистра сдвига всегда будут на один цикл опережать часы регистра хранения.

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

    74HC595 работает в диапазоне напряжений 2-6 В, а 74HCT595 работает в более узком диапазоне 4,5-5,5 В. Хотя 74HC595 может работать в более широком диапазоне напряжений, он имеет значительно большую задержку распространения, чем 74HCT595.74HCT595 имеет задержку распространения чуть более четверти длины задержки 74HC595 - 63 наносекунды по сравнению с 240 наносекундами. Эта более короткая задержка означает, что длительные задержки с меньшей вероятностью будут накапливаться со временем, что может вызвать общее замедление в проекте электроники. Замедление сдвигового регистра, поскольку его основная функция - обработка данных, может иметь катастрофические последствия для скорости вычислений.

    SN74HC595: обновленный 74HC595

    SN74HC595 работает в том же диапазоне напряжений, что и его предшественник, и имеет собственный вариант - SN54HC595.Этот обновленный компонент и его вариант в некоторых отношениях напрямую не сопоставимы со своими предшественниками, но имеют те же базовые функции. Оба обновленных варианта компонентов работают в одном и том же широком диапазоне напряжений, и оба обновленных компонента имеют меньшую задержку распространения, чем их предшественники, всего 13 наносекунд. Эта уменьшенная задержка означает, что эти обновленные компоненты обрабатывают данные намного быстрее. Обновленные компоненты потребляют на 10 мА больше энергии, чем их предшественники, но это очень небольшое количество, которое легко уравновешивается увеличением скорости.Основное различие между двумя наборами компонентов - увеличение скорости; большинство других характеристик между наборами остаются неизменными. Это включает в себя наличие 3 выходов, позволяющих преобразование между одиночными входами и параллельными выходами, а также наличие отдельных часов для регистров хранения и сдвига.

    Логическая схема для SN74HC595

    Используется для 74HC595 и SN74HC595

    Читая их таблицы данных, становится ясно, что основная цель 74HC595 и SN74HC595, как регистров сдвига, - это хранение данных.Они перемещают двоичные данные через свои регистры, а также могут выполнять простые вычисления с этими данными. Они обычно используются внутри калькуляторов для сложения, вычитания, умножения и деления, а простые операции можно быстро объединить в более сложные вычисления. Компьютерные системы имеют аналогичный механизм для вычисления данных в регистрах, часто каким-то образом связанных с тактовой частотой ядра процессора. Регистры сдвига в калькуляторах и компьютерах также могут вычислять последовательности чисел и реализовывать различные типы счетчиков.Поскольку они могут вычислять все четыре основных арифметических операции, не имеет значения, является ли последовательность арифметической или геометрической.

    Регистры сдвига

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

    Конфигурация выводов 74HC595

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

    Использование 74hc595 Shift Register с Raspberry PI

    Следите за моими последними статьями в Twitter: Подписывайтесь на @peppecassibba.Или подпишитесь на мою рассылку (вверху справа на этой странице), чтобы получать уведомления о появлении новых проектов!

    Raspberry PI GPIO-порты являются действительно полезным ресурсом и позволяют PI взаимодействовать в реальном мире с большим количеством внешних датчиков. Однако для некоторых проектов требуется так много соединений с большим количеством датчиков / устройств, что богатый 40-контактный GPIO может стать ограниченным. В этих случаях вы можете получить помощь от простого и дешевого электронного устройства: сдвигового регистра или преобразователя из последовательного в параллельный.

    В этом руководстве я покажу вам, как использовать чип 74hc595 с Raspberry PI и python в простой конфигурации, которая управляет 8 светодиодами.

    Я собираюсь использовать Raspberry PI Zero W, но эта процедура работает и с другими платами Raspberry PI.

    Что такое регистр сдвига

    Микросхема регистра сдвига - это электронный элемент, способный получать последовательный поток данных от одного из своих ПИН-кодов (ПИН-код данных), сохранять эти данные и предоставлять их в своих 8-ми выходных ПИН-кодах (Q0, Q1, … Q7).

    Каждый выходной контакт может иметь значение 0 (выключено) или 1 (включено). Чтобы включить или выключить каждое из этих значений, мы вводим данные, используя PIN-коды данных и часов чипа на точной временной диаграмме.Часы должны получить девять импульсов. В каждом импульсе (на переднем фронте), если ПИН-код данных высокий, то в сдвиговый регистр помещается 1; в противном случае - 0.

    Когда все восемь импульсов были получены, включение «защелкивающего» контакта сохраняет эти восемь значений для регистрации и выставляет их в выходных PIN-кодах:

    Как вы можете видеть на этом рисунке, важно, чтобы ваши данные Передача стабильна до нарастающего фронта тактового сигнала, потому что это момент, когда выполняется передача.

    Помимо выходных PINS (Q0… Q7), данных, часов и защелки, другие PINS доступны от 74hc595:

    • Vcc и GND: конечно, 5 В и заземление на выход питания
    • OE (Output Enable): этот PIN включает или отключает вывод.74hc595 предоставляет выход при низком уровне OE (0)
    • MR (Master Reclear): этот PIN очищает память при установке на 0. Таким образом, наличие 74hc595 означает, что MR подключен к 1.
    • serOut (последовательный выход): используется, когда вы нужно управлять вторым сдвиговым регистром, присоединенным к этому.

    Что нам нужно

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

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

    Проверьте цены на оборудование по следующим ссылкам:

    Схема подключения

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

    Ниже приведены некоторые изображения с подробностями:

    Пошаговая процедура

    Подготовка операционной системы

    Начните подготовку PI к установке Raspberry PI OS Lite.Это руководство также применимо к Raspberry PI OS Desktop с помощью его внутреннего терминала.

    Обновите свою ОС. С терминала:

     sudo apt update -y && sudo apt upgrade -y 

    Установить пакет RPI.GPIO из aptitude:

     sudo apt install rpi.gpio 

    Импорт скрипта Python

    Вы можете получить мой скрипт python shift_register.py прямо в ваш RPI с терминала:

     wget https://peppe8o.com/download/python/shift_register.py 

    Код поясняется в следующем абзаце.

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

     import RPi.GPIO as GPIO
    import sys 

    Затем ПИН назначаются переменным для лучшего управления. Эти значения соответствуют показанной на схеме подключения. Если вы использовали другие PIN-коды, отредактируйте их в соответствии с распиновкой Raspberry PI BCM в соответствии с вашим кабелем:

     dataPIN = 16
    latchPIN = 20
    clockPIN = 21 

    PIN установлены для вывода:

     GPIO.setmode (GPIO.BCM)
    GPIO.setup ((dataPIN, latchPIN, clockPIN), GPIO.OUT) 

    Функция используется для управления вызовом обновления регистра сдвига.Для этой функции требуются 4 параметра:

    • вход -> строка, содержащая 8 символов, состоящая только из «1» и «0»
    • данные -> для идентификации PIN передачи данных
    • часы -> для идентификации синхросигнала PIN
    • защелка -> для идентификации PIN-кода защелки

    Эта функция также управляет тактовым сигналом до и после каждого шага:

    • защелка до нуля,
    • передача данных
    • защелка на 1

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

     def shift_update (ввод, данные, часы, защелка):
      # поставить защелку, чтобы начать отправку данных
      GPIO.output (часы, 0)
      GPIO.output (защелка, 0)
      GPIO.output (часы, 1)
    
      # загрузить данные в обратном порядке
      для i в диапазоне (7, -1, -1):
        GPIO.output (часы, 0)
        GPIO.output (данные, целое число (вход [i]))
        GPIO.output (часы, 1)
    
      # поставить защелку для хранения данных в регистре
      GPIO.output (часы, 0)
      GPIO.output (защелка, 1)
      GPIO.output (clock, 1) 

    Если эта функция доступна, для ее использования в нашем основном скрипте требуется просто:

     shift_update (sys.argv [1], dataPIN, clockPIN, latchPIN) 

    «sys.argv [1]» используется для передачи нашего байта напрямую в качестве аргумента при выполнении скрипта. Фактически, системное свойство sys.argv [] позволяет передавать аргументы из терминала в скрипт с массивом, упорядоченным следующим образом:

     $ python test.py arg1 arg2 arg3 ...
               | | | |
           sys.argv [0] sys.argv [1] sys.argv [2] sys.argv [3] ... 

    с sys.argv [0], возвращающим «test.py», sys.argv [1] возвращает «arg1» и так далее.

    Заключительная операция очищает статус PIN-кодов GPIO, а последнее обновление остается в регистре сдвига:

     GPIO.cleanup () 

    Запуск сценария

    Для запуска нашего сценария требуется простая команда терминала:

     python3 shift_register.py 00000000 

    изменение строки из 8 нулей на «1» или «0» в соответствии с вашими потребностями.

    Некоторые примеры:

     python3 shift_register.py 10101010 

    Еще один пример:

     python3 shift_register.py 11100011 

    Последний пример:

     python3 shift_register.py 00000011 

    Наслаждайтесь!

    Связанные

    Использование регистра сдвига для управления группой светодиодов

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

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

    Регистр сдвига

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

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

    Обзор

    Так как это работает? ИС состоит из двух регистров и , модулей памяти, которые могут содержать несколько двоичных значений по порядку (8 для ИС в вашем комплекте). Их:

    • Регистр сдвига , который содержит 8 значений до того, как они будут записаны на выходные контакты. С помощью этого регистра значения можно «сдвигать» из одной позиции в другую, начиная с позиции «A» до позиции «H».
    • Регистр хранения , который принимает значения из сдвигового регистра и отправляет их на линии вывода данных, обозначенные QA - QH .Например, логическая последовательность 1 в позиции «C» регистра памяти создаст сигнал HIGH на QC .

    На микросхеме есть три контакта, которые мы используем для управления ею с помощью Omega. Два из этих выводов - это тактовые импульсы : специальные входы, которые запускают ИС для выполнения каких-либо действий, когда они получают сигнал, который изменяется с НИЗКОГО на ВЫСОКИЙ (также известный как импульс или передний фронт ).

    SER Контакт последовательного порта Это линия ввода последовательных данных.Когда мы подаем импульсный сигнал тактовой частоты (SRCLK), сигнал в этой строке сохраняется в 1-й позиции («A») сдвигового регистра.
    SRCLK Последовательные часы В импульсном режиме сдвигает каждое значение в регистре сдвига вперед на одну позицию, затем загружает значение с вывода SER в положение «A». Обратите внимание, что это не изменит сигналы на выходных линиях до тех пор, пока вы не выполните импульс тактовой частоты регистра (RCLK).
    RCLK Регистрируйте часы или «фиксатор» В импульсном режиме обновляет регистр хранения новыми значениями из регистра сдвига, отправляя новый набор сигналов на 8 выходных контактов.Это происходит так быстро, что кажется, что все они меняются одновременно!
    Порядок битов

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

    Допустим, мы хотим отправить следующие биты: 10101010 . Интуитивно кажется, что проще всего послать каждый бит числа слева направо, как если бы это была строка. В Python это будет выглядеть примерно так:

    Однако отправка таким образом означает, что после того, как мы отправим все восемь, 1-й бит будет фактически сдвинут до последнего вывода ( QH ), 2-й бит будет сдвинут со 2-го до последнего. вывод ( QG ) и так далее, пока все не изменится на противоположное! Этот способ сдвига значений известен как наиболее значимый бит (MSB) первым.Если бы мы использовали этот метод в нашем классе регистра сдвига, нам пришлось бы все подключать в обратном направлении, и это могло бы затруднить сборку или отладку схем.

    Эту проблему можно обойти, отправив первым самый правый или младший бит (LSB). Мы можем изменить приведенный выше код примерно так:

    Распиновка и схема

    Распиновка 74HC595 показана ниже:

    На правой стороне микросхемы вы можете увидеть три описанных выше контакта управления, а также первый выход (QA).Слева вы можете видеть остальные 7 выходов (QB - QH).

    Управление регистром сдвига

    Итак, как это позволяет нам управлять несколькими выходами с помощью одного вывода данных? Что ж, допустим, у нас есть 8 светодиодов, подключенных к линиям передачи данных, и мы хотим включить 2-й, 4-й и 8-й светодиоды следующим образом:

    1 QA НИЗКИЙ
    2 QB ВЫСОКИЙ
    3 QC НИЗКИЙ
    4 QD ВЫСОКИЙ
    5 QE НИЗКИЙ
    6 QF НИЗКИЙ
    7 QG НИЗКИЙ
    8 QH ВЫСОКИЙ

    Сначала мы очистим регистр, чтобы все светодиоды погасли, записав восемь нулей в регистр сдвига, а затем подбросив штырь защелки для записи выходных сигналов в линии данных.Это делается путем установки и удержания SER LOW, затем 8-кратного импульса SRCLK, а затем однократного пульсации RCLK.

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

    1. Установите SER на указанное значение (HIGH или LOW).
    2. Импульс SRCLK с LOW на HIGH для сдвига значения SER в сдвиговый регистр.

    Мы повторяем два вышеуказанных шага (например, используя цикл), пока не будут сдвинуты все 8 значений.Затем подайте импульс на вывод RCLK, чтобы записать эти значения в регистр хранения и линии данных, что включает светодиоды!

    Таким образом, мы можем контролировать до 8 различных выходов с помощью всего 3 GPIO. Это невероятно мощный метод, который можно использовать для одновременной работы со многими компонентами.

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

    Гирляндное соединение

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

    Просто подключите вывод SER одного регистра сдвига к выводу QH ' другого и соедините их выводы SRCLK и RCLK вместе. Таким образом, когда вы подаете импульс SRCLK, 2-й чип будет читать с последнего выхода 1-го, а когда вы подаете импульс RCLK, оба чипа обновят свои выходные линии. Это замечательно, потому что этот не требует дополнительных GPIO от Omega!

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

    Подробные характеристики

    , если вам интересно узнать время тактового цикла или другую информацию об ИС, вы можете обратиться к таблице данных на сдвиговый регистр SN74HC595. Временную диаграмму тактового цикла можно найти на странице 8.

    Создание схемы

    Для этого эксперимента мы будем посылать 8 бит (байт) последовательно из ATmega в регистр сдвига. Когда фиксирующий контакт сдвигового регистра установлен в LOW, сдвиговый регистр будет использовать сохраненные 8 бит для установки своих 8 выходных контактов соответственно.Мы прикрепим по одному светодиоду к каждому из 8 выходных контактов и заставим их светиться, как KITT Knight Rider. Благодаря мощности сдвигового регистра мы можем сделать это, используя всего три контакта ATmega!

    Это схема цепи, которую мы будем строить:

    Что вам понадобится

    Подготовьте следующие компоненты из вашего набора:

    • Omega подключена к док-станции Arduino
    • Кабель USB Micro-B для питания
    • Макет
    • Перемычки
    • Резистор 8x 200 Ом
    • 8-кратный цвет светодиода на ваш выбор!
    • 1x 74HC595 Регистр сдвига
    Подключение компонентов

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

    Давайте посмотрим, как определены 16 контактов микросхемы регистра сдвига 74HC595. Мы будем называть каждый вывод номерами, указанными на схеме выше. При подключении с буквами, расположенными правой стороной вверх, нижний ряд контактов представляет собой контакты с 1 по 8, идущие слева направо. Верхний ряд контактов - это контакты с 9 по 16, идущие справа налево.

    Примечание. На вашей ИС будет вырез в виде полукруга, обозначающий «вверх».Убедитесь, что вы правильно подключили его, чтобы знать, где какие контакты.

    Вот шаги, чтобы добраться туда:

    1. Подключение сдвигового регистра к макетной плате
    • Начните с подключения сдвигового регистра через канал, чтобы каждый вывод имел свою собственную строку.
    • Подключите вывод напряжения питания ( Vcc ) и главный вывод сброса ( MR ) на ИС к шине Vcc на макетной плате
    • Подключите вывод GND и вывод разрешения выхода ( OE ) к шине GND на макетной плате

    Перемычки наверху со временем будут подключены к светодиодам.

    1. Подключение светодиодов
      • Подключите аноды восьми светодиодов каждый к одному из восьми выходных контактов 74HC595 - контакт 15 и контакт 1 к 7 , что соответствует Q0 к Q7 . Разместите светодиоды слева направо в следующем порядке контактов: Q0 , Q1 , Q2 , Q3 , Q4 , Q5 , Q6 , Q7 .
    • Присоедините восемь токоограничивающих резисторов 100 Ом от катодов светодиодов к шине GND на макетной плате.

    1. Подключение док-станции Arduino
    • Подключите контакт GND док-станции к шине GND на макетной плате.
    • Подключите цифровой контакт 4 док-станции Arduino к DS в регистре сдвига - сюда отправляется наш вход.
    • Подключите цифровой вывод 5 док-станции Arduino к STCP в регистре сдвига.
    • Подключите цифровой вывод 6 док-станции Arduino к SHCP в регистре сдвига.
    • Подключите шину Vcc к контакту 5V на док-станции Arduino

    Чего ожидать

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

    Должно получиться примерно так:

    Смотрите, прямо как KITT:

    Более пристальный взгляд на код

    Мы используем только три контакта док-станции Arduino для управления восемью светодиодами, используя сдвиговый регистр.Начнем с объявления трех переменных контактов ( latchPin , clockPin и dataPin ) и инициализации трех выводов в качестве вывода в setup () .

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

    Обновление регистра сдвига

    Управляем регистром сдвига с помощью единственной функции updateShiftRegister . Первое, что он делает, это устанавливает низкий уровень фиксатора с помощью вызова digitalWrite () :

    .

    Затем мы используем функцию, которая включена в библиотеки Arduino по умолчанию, shiftOut () , чтобы отправить байт:

    Эта функция выполняет следующие действия:

    1. Устанавливает для вывода SER значение HIGH или LOW в соответствии с битом байта, который вы хотите отправить
    2. Устанавливает тактовый вывод HIGH, затем LOW для загрузки бита SER в регистр сдвига
    3. Повторяет два вышеуказанных шага до тех пор, пока не будут отправлены все биты байта.

    Функция принимает аргумент bitOrder , который определяет, отправляет ли она первым правый (наименее значимый) бит или самый левый (наиболее значимый) бит.Здесь мы решили сначала отправить младший бит ( LSBFIRST ), чтобы наш порядок подключения соответствовал порядку выходов сдвигового регистра.

    После того, как байт был отправлен, мы устанавливаем контакт защелки на ВЫСОКИЙ уровень, чтобы запустить тактовый генератор, который обновляет выходы сдвигового регистра. Это делается еще одним вызовом digitalWrite () :

    .

    Вы заметите, что мы уезжаем с небольшой задержкой перед каждым обновлением. Это потому, что если мы позволим ему работать с такой скоростью, с которой может работать ЦП, это будет слишком быстро, чтобы мы могли это увидеть.Вместо этого огни будут выглядеть так, как если бы все они были включены одновременно. Регистр сдвига может точно обновляться на частоте 100 МГц - намного быстрее, чем могут заметить наши глаза! Чтобы действительно увидеть эффект, мы замедляем его, добавляя задержку.

    .

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *