Сдвиговый регистр 74hc595. Расширение портов ввода-вывода Arduino с помощью сдвигового регистра 74HC595: принцип работы и практическое применение

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

Содержание

Что такое сдвиговый регистр 74HC595 и зачем он нужен

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

Ключевые особенности и преимущества использования 74HC595:

  • Позволяет управлять 8 выходами, используя только 3 пина Arduino
  • Можно соединять несколько регистров последовательно, получая еще больше выходов
  • Высокая скорость работы — до 100 МГц
  • Низкое энергопотребление
  • Доступная цена и простота подключения

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


Принцип работы сдвигового регистра 74HC595

Принцип работы 74HC595 основан на преобразовании последовательного двоичного кода в параллельный. Микросхема содержит два 8-битных регистра:

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

Процесс передачи данных в 74HC595 происходит следующим образом:

  1. Биты данных последовательно загружаются в сдвиговый регистр по входу DS
  2. После загрузки всех 8 бит подается сигнал на вход STCP, данные переписываются в регистр хранения
  3. Содержимое регистра хранения выводится на 8 параллельных выходов Q0-Q7

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

Подключение 74HC595 к Arduino

Для базового подключения 74HC595 к Arduino требуется задействовать следующие выводы микросхемы:

  • DS (14 пин) — вход данных, подключается к любому цифровому пину Arduino
  • SHCP (11 пин) — тактовый вход сдвигового регистра, подключается к цифровому пину
  • STCP (12 пин) — вход для защелки данных, подключается к цифровому пину
  • OE (13 пин) — разрешение выхода, подключается к GND для постоянной работы
  • MR (10 пин) — сброс, подключается к 5V
  • GND (8 пин) — земля
  • VCC (16 пин) — питание 5V
  • Q0-Q7 (15, 1-7 пины) — выходы для подключения нагрузки

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


[Здесь можно добавить схему подключения в виде изображения]

Программирование Arduino для работы с 74HC595

Для управления 74HC595 с помощью Arduino используется функция shiftOut(). Базовый скетч для управления 8 светодиодами через сдвиговый регистр выглядит так:


int dataPin = 2;   // DS
int clockPin = 3;  // SHCP
int latchPin = 4;  // STCP

void setup() {
  pinMode(dataPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(latchPin, OUTPUT);
}

void loop() {
  for (int i = 0; i < 256; i++) {
    digitalWrite(latchPin, LOW);
    shiftOut(dataPin, clockPin, MSBFIRST, i);
    digitalWrite(latchPin, HIGH);
    delay(100);
  }
}

Этот код последовательно перебирает все возможные комбинации включения 8 светодиодов. Функция shiftOut() отправляет данные в сдвиговый регистр побитово.

Расширение возможностей: каскадное соединение нескольких 74HC595

Одно из главных преимуществ 74HC595 - возможность каскадного соединения нескольких микросхем. Это позволяет управлять еще большим количеством выходов, используя те же 3 пина Arduino.


Для соединения нескольких регистров необходимо:

  1. Соединить выход Q7S первого регистра со входом DS второго
  2. Объединить входы SHCP и STCP всех регистров
  3. Подключить питание и землю ко всем микросхемам

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

Применение 74HC595 в реальных проектах

Сдвиговые регистры 74HC595 находят широкое применение в различных Arduino-проектах:

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

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

Особенности и нюансы при работе с 74HC595

При использовании сдвиговых регистров 74HC595 следует учитывать некоторые особенности:


  • Максимальный ток через один выход не должен превышать 35 мА
  • Общий ток через все выходы не должен превышать 70 мА
  • При управлении мощной нагрузкой необходимо использовать дополнительные драйверы
  • Скорость работы ограничена скоростью передачи данных по последовательному интерфейсу
  • При каскадном соединении нужно учитывать задержки распространения сигнала

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

Альтернативные решения для расширения портов Arduino

Хотя 74HC595 является одним из самых популярных решений для расширения портов, существуют и альтернативные варианты:

  • Микросхемы расширителей портов I2C (например, PCF8574)
  • Микросхемы расширителей портов SPI (например, MCP23S17)
  • Матричные клавиатуры для увеличения количества входов
  • Мультиплексирование сигналов

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


Arduino Nano и 74HC595 - расширяем порты вывода: trampampamparam — LiveJournal

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

Но настали черные дни, когда мне перестало хватать выходных сигналов Arduino Nano, когда я занимался созданием устройства для тестирования шаговых двигателей. (TODO: вставить ссылку на статью о тестере ШД, когда будет готова). Моё устройство для тестирования ШД в результате вышло довольно комплексным - двухстрочный дисплей 1602 с системой меню, управляемое полнофункциональной клавиатурой 4x4, 3 цифровых разряда для установки величины микрошага ШД, сигналы Step и Dir для шагового двигателя, и тп. Казалось бы, самое время мигрировать на другую версию Arduino. Но моя природная лень воспротивилась этой миграции. И ленивая голова стала искать решение.

Было принято решение искать решение на базе уже того, что есть. Перебирая платки и детальки из наборов, я заметил 16ти-пинового черного "жука". Сначала в одном наборе, потом в другом. Решил поинтересоваться, что же это за деталь, и зачем её добавляют в наборы. Зачем её кладут в кит-наборы, я не понял, но саму микросхему нашел на сайте NXP.

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

Условное обозначение микросхемы 74НС595 (из даташита)

Описание выводов


КонтактНаименованиеОписание и подключение
10~MRMaster Reset - сброс, активный уровень низкий. В идеальном случае неплохо бы сделать схему сброса, которая сначала подает низкий уровень на этот вход, а затем переводит его в единичное состояние. Но можно не возиться, и подключить его на +5В. В этом случае на выходе до первой записи будут случайные значения
13~OEOutput Enable - разрешение выхода, активный уровень низкий. При подаче 0 на выходы подается содержимое регистра, при подаче 1 - выходы отключаются, переводятся в Z-состояние, что позволяет использовать одну шину попеременно разным устройствам. Подключаем на землю, если не нужно управлять состоянием выходов
14DSSerial Data In - последовательный вход. На этот вход следует подавать значение входного сигнала до подачи тактового сигнала сдвига SHCP
11SHCPShift Register Input clock - тактовый вход сдвигового регистра. Для вдвигания бита в регистр следует подать переход с 0 на 1. Когда возвращать в 0 - на усмотрение. Можно - сразу же, можно - непосредственно перед вдвиганием. В первом случае можно считать, что переключение происходит по фронту прямого сигнала, во втором - по спаду инверсного. См. также ниже замечания по быстродействию. Также по приходу этого сигнала изменяется значение последовательного выхода Q7/S
12STCPStorage Register Clock Input - тактовый вход регистра защелки. По фронту данного импульса происходит перенос значения со сдвигового регистра на параллельные выходы Q0-Q7
9Q7SSerial Data Output - последовательный выход. На него выводится значение старшего разряда сдвигового регистра. Данный выход может использоваться для масштабирования сдвигового регистра до 16ти-разрядной, 24х-разрядной и т.д. схемы
15, 1-7Q0, Q1-7Выходы регистра-защелки. Сигнал на них переносится с внутреннего сдвигового регистра по приходу сигнала STCP
8GNDПитание - общий провод
16VCCПитание - +

Питание


HC версия микросхемы требует от 2В до 6В питания, версия HCT (TTL-совместимая) - от 4. 5В до 5.5В. HCT - TTL - а оно вообще еще используется? Ардуино же вроде само по себе CMOS, так что HCT не нужно, но если нужно согласовывать уровни с внешними TTL потребителями, то можно запитать HC от 3.3В, тогда уровни сигналов будут совместимы с TTL. А вообще, с 5ти-вольтовым Ардуино должны работать и HC, и HCT. В интернетах так пишут.

Что более важно, так это блокировочные конденсаторы. Без них схема может работать не так, как задумано, и более того, непредсказуемо. Теоретически, в цепи питания каждого корпуса нужно ставить 0.1мкФ конденсатор. Это значение ёмкости я вычислил как среднее по интернету. Моя схема вполне заработала и без него. Чтобы уточнить, залез было в библию схемотехника, чтобы уточнить - Хилл и Хоровиц, "Искусство схемотехники" - это почти как "Искусство Программирования" Дональда Кнутта, но только для железячников (к слову, Хилл и Хоровиц гораздо ближе к народу, Кнутт через-чур умничает) - но там блокировочными конденсаторами похоже называют развязывающие по входам конденсаторы. Жаль, хорошая книга, но очень отстала уже от жизни. У меня второе или третье русское издание конца 90ых или начала 0ых годов, оригинал скорее всего ещё лет на 10 старше. На третьем, розовом томе, обнаружил наклейку - "14руб" - как же дешево тогда всё было, по современным меркам. А прошло-то всего 15 лет или чуть больше. Аж ностальгия замучала.

Быстродействие


В титле даташита 74HC595 пишут, что она работает на 100МГц. Беглый взгляд на графики и таблицы даташита говорит, что самые большие тайминги в диапазоне температур от -40C до +85C при питании 4.5В - 10-20нс (100-50МГц). С теми частотами, на которых работают Ардуино, ничего больше знать не требуется. Возможно, только то, что стандартные библиотечные digitalRead/digitalWrite - огромнейшие тормоза из-за различных проверок, и их можно (и нужно) переписать в виде более быстрой версии. В планах есть поковырять это и написать поподробнее, но пока у меня нет особой нужды.

Быстродействие Arduino Nano и библиотеки Arduino в плане скорости переключения выходов и обработки входов по моим наблюдениям где-то посередине от единиц килогерц до десятков килогерц. Так что, на мой взгляд, при написании кода для управления сдвиговым регистром 74HC595 нет нужды озадачиваться какими-либо задержками при установке управляющих сигналов.

Другое дело, что для 8ми разрядного последовательного расширителя следует делить максимальную доступную на Ардуино частоту переключения выходов - установили DS, установили SHCP в 1, сбросили SHCP (в 0) - 8 раз, и установка/сброс STCP. Итого, на вскидку, 3*8 + 2 = 26 операций digitalWrite. Итого выходит примерно в 25 раз медленнее, чем может сама Ардуинка.

При масштабировании до 16ти, 24х или 32х выходов замедление будет соответственно примерно 3*16 + 2 = 50, 3*24 + 2 = 74 и 3*32 + 2 = 98 раз.

Для управления чем-то действительно быстрым, очевидно, такой расширитель на сдвиговом регистре 74HC595 не подходит, но, в некоторых применениях, для задания редко меняющихся статичных сигналов вполне подходит. Так, например, я использовал такой расширитель для задания 3х-разрядного режима микрошага для установки режима микрошага для драйвера ШД DRV8825 в тестере для шаговых двигателей. К слову, мне это пока не особо пригодилось - шаговики из матричных принтеров ужасно работают в микрошаговом режиме, по крайней мере, под управлением драйвера DRV8825 - так, например, в режиме микрошага 1/2 половина шага какая-то вялая и не уверенная, только вторая половина бодрая и мощная. Поэтому при использовании микрошага при малейшем усилии на ось ШД он первые пол-шаги начинал пропускать. Остальные режимы микрошага я как-то после этого и не исследовал на имеющихся принтерных ШД.

Масштабирование


Расширитель выходов Ардуино на базе 74HC595 достаточно элементарно из 8ми-разрядной версии может быть переделан в схему любой разрядности. Для этого последовательный выход младшего регистра Q7S нужно соединить со входом DS более старшего, а линии SHCP и STCP соединить параллельно. Ну, и, в зависимости от принятого схемотехнического и программного решения, нужно выбрать, как подключать линии ~MR и ~OE.

Расширение ввода


Расширение линий ввода для Ардуино в принципе похоже на расширение вывода, с учетом того, что нужно не задавать значение DS на выходе, а считывать его на входе, и использовать микросхему типа 74HC597. Впрочем, это я пока на практике не проверял.

Мультиплексирование


Увеличить количество выходных линий, которыми управляет Ардуина, можно двумя способами: 1) увеличить разрядность одного последовательного выхода, что при увеличении разрядности в два, три или четыре раза соответственно уменьшает в два, три или четыре раза быстродействие расширителя; 2) параллельным подключением нескольких расширителей, при этом задействуя один дополнительный выход на каждый расширитель, что может сохранить быстродействие на приемлемом уровне, но требует использования как минимум одного выхода Ардуино для каждого расширителя.

Если не управлять прямо сигналами регистра 74HC595 - ~MR, ~OE с Ардуино, то достаточно только трех выходов Ардуино для управления сигналами DS, SHCP и STCP сдвигового регистра, чтобы при помощи микросхемы 74HC595 превратить их в 8 или 16 или больше выходных сигналов.

Для мультиплексирования нескольких расширителей на базе 74HC595 можно пойти двумя путями: 1) для каждого расширителя сигнала выделить отдельный latch сигнал - т.е. все регистры на шине параллельно сдвигают поступающие данные, и, соответственно, сдвигают значения на выходах внутреннего сдвигового регистра, но только один передает значение из внутреннего сдвигового регистра на выходы микросхемы; 2) сигналы сдвига передаются только на один из расширителей, а перенос значений сигналов на выход происходит одновременно для всех модулей расширения.

Я больше склонен использовать вариант, когда во внутренних сдвиговых регистрах может находится всё, что угодно (вариант 1), а на выходе зафиксировано какое-то из предыдущих значений, и вот почему: при переносе значений из внутреннего сдвигового регистра на выход могут происходить неконтролируемые переходы из 0 в 1 и обратно, какой-то дребезг сигнала, даже если исходное значение во внутреннем регистре и на выходе одно и то же. И, на мой взгляд, операцию переноса состояния внутреннего регистра сдвига на выходы 74HC595 следует использовать как можно реже.

Программная поддержка


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

Сдвиговый регистр 74HC595 - ProGDron.com

Плата расширения L293D, ИК-датчик VS1838B, TFT LCD, Модем M590E GSM GPRS, "монитор TFT LCD, датчик движения HC-SR501, ИК-пульт дистанционного управления, Радиомодуль NRF24L01, SD Card Module, Звуковой модуль, 5-axis stepper motor driver, Шаговый двигатель, Модем M590E GSM GPRS, 5-axis stepper motor driver, Часы реального времени DS 3231/DS 1307, терморегулятор W1209 DC, Релейный модуль, датчик движения HC-SR501, Модуль Wi-Fi ESP8266-12E, датчик движения HC-SR501, Передатчик и приемник в диапазоне RF 433 Mhz, Блок питания, L293D, Микросхема контроллера коллекторного электродвигателя, ИК-пульт дистанционного управления, Датчики контроля температуры, Радиомодуль NRF24L01, OKI 120A2, Rotary Encoder, SD Card Module, Беспроводной пульт дистанционного управления, Микросхема контроллера коллекторного электродвигателя, Модуль Bluetooth HC-06,, Модем M590E GSM GPRS, Часы реального времени DS 3231/DS 1307, Mini 360 на схеме LM2596, MP3-TF-16P, L293D, Модуль LCD монитора, Инфракрасные датчики расстояния, Часы реального времени, USB Host Shield, HC-SR501, Cветочувствительный датчик сопротивления, блок питания Mini 360 на схеме LM2596, ЖК-дисплей TFT дисплей, Контроллер L298N, HC-SR501, Модуль MP3 Player WTV020, GSM GPRS, Сервоприводы, Модем M590E GSM GPRS, Часы реального времени DS 3231/DS 1307, Модуль Wi-Fi ESP8266-12E, Инфракрасные датчики расстояния, Card Module, Ультразвуковые дальномеры HC-SR04, Блок питания, Карта памяти SD, Mini 360, Ethernet shield, L293D, блок питания Mini 360 на схеме LM2596, Радиомодуль, датчик температуры DS18B20, ИК-пульт дистанционного управления, USB конвертер UART, ИК-пульт, Антена для модуля WiFi, Ethernet shield, Модуль блока питания XL6009, Микросхема контроллера коллекторного электродвигателя, Модуль качества воздуха MQ-135, Микросхема контроллера коллекторного электродвигателя, ИК-пульт дистанционного управления, SD Card Module, Радиомодуль NRF24L01, двигатель OKI, 5-axis stepper motor driver, L293D, TB6560, Драйвер шагового двигателя TB6600, Шаговый двигатель, Модуль камеры, Блок питания, L293D, блок питания Mini 360 на схеме LM2596, 5axis mach4 interface, Карта памяти SD, Ethernet shield, Контроллер L298N, датчик движения HC-SR501, Модуль Wi-Fi ESP8266-12E, Модуль LCD монитора LCD1602, Шаговый двигатель OKI 120A2, Шаговый двигатель, Шаговый двигатель.

 

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 | ArduinoKit

Не большой экскурс в мир Интегральных Схем. Интегральная Схема (ИС или «ICs — integrated circuit standard», сейчас можно услышать что микросхемы стали называть «чипами»), так вот «чип» или микросхема, это электронное устройство встроенное в небольшой, как правило, пластиковый корпус. Есть тысячи различных видов ИС, доступных для использования, из которых можно собрать наиполезнейшие вещи, для любых сфер деятельности.

Сдвиговый Регистр 74HC595 — Интегральная Схема состоящая (вообще-то она состоит из трех компонентов: 8-битный сдвиговый регистр, 8-битный регистр хранения, выходной буфер с тремя состояниями), но для первого знакомства, достаточно знать про первые два, — регистр сдвига и регистр хранения.

 

Внутренняя структура Регистра Сдвига 74HC595

Чтобы регистр сдвига начал принимать данные на своем 14-ом входе (DS) ему нужен специальный синхронизирующий сигнал ((он поступает на 11 вход (SH CP)), после того как сигнал получен, данные в виде нулей и единичек, последовательно, т. е. один за другим начинают его заполнять. Как только байт будет «считан» и все 8 бит распределены по своим местам, их можно передать в регистр хранения ((для того чтобы они потом появились на выходах (в выходном буфере)). Для этого есть еще один специальный вход 12 (ST CP), как только на этом входе появляется сигнал логический «0» (LOW), поступившие данные «защелкиваются» и если на 13 (OE) входе тоже присутствует единица (HIGH), появляются на выходах Q0 — Q7.
Чтобы очистить регистр от данных, нужно подать сигнал логического нуля на его 10 вход (MR), это осуществит сброс регистра, установив выходы в состояние логического нуля. Да и еще! Хорошим решением будет подать логическую единицу на 12 (ST CP) вход, т.к. после подачи питания на выходах может присутствовать не определенное значение и лучше его за ранее «определить».

Конечно это всё очень упрощенно, но по моему этого достаточно, для того чтобы начать эксперименты с этой Интегральной Схемой «Сдвиговый Регистр» 74HC595 и Arduino, в частности с Arduino и Shift Registr опыт №14 — СКОРО!

Выход регистра сдвига на реле

извините за длину.

Это продолжение моего недавнего вопроса . У меня 8-релейная плата с оптопарой, которую я пытаюсь подключить к своему микроконтроллеру. Я поместил сдвиговый регистр 74HC595, чтобы объединить входные порты. При этом, однако, доска демонстрирует странное поведение.

Если я не подключаю что-либо, или просто небольшую нагрузку на реле, все работает нормально, используя сдвиговый регистр. Они включаются и выключаются без проблем. Как только я подключаю на реле 1-амперный насос, можно услышать срабатывание реле, и оно быстро отключается. Индикатор IN1 (схема выше) также загорается на доли секунды. Хотя иногда (1 из 5) реле и насос фактически остаются включенными. Вот где это становится странным; если я снимаю сдвиговый регистр и напрямую подключаю контакты к микроконтроллеру, он прекрасно работает при включении насоса.

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

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

8-контактное реле ( информация ): в настоящее время он настроен на отдельную настенную бородавку 5 В для питания реле. Микроконтроллер обеспечивает 5 В для питания только оптопары.

Я ценю любую помощь, которую вы можете оказать мне.

Обновление 13 августа:

До сих пор не пошло, но я провёл ещё кучу тестов: сдвинул регистр переключения и Arduino на 3 фута от реле и сетевого питания. Оба были запитаны от 9В батареи. Единственное, что было подключено к релейной плате, - это шина 5 В от Arduino и 8 проводов от регистра сдвига до входов релейной платы. Те же результаты, свет 100 Вт работает отлично, насос вызывает его срабатывание. Если я уберу сдвиговый регистр и подключу выходные контакты непосредственно к Arduino, насос включится без проблем.

Просто чтобы убедиться, что ничего не происходит с выделенной настенной бородавкой на 5 В, которая питает реле, я отключил ее и заменил перемычку на JD-VCC и VCC и подключил заземление Arduino. Тот же самый результат, свет 100 Вт работает, насос заставляет его работать.

Это должен быть сдвиговый регистр.

Я также поместил развязывающий конденсатор емкостью 47 мкФ на силовые шины, а рядом со сдвиговым регистром - 104.

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

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

Обновление 14 августа:

Мне удалось запечатлеть это с помощью моего осциллографа. Rigol WFM файлы ниже. Первый канал подключен к выходному контакту на регистре сдвига. Второй канал прикреплен к шине 5V.

Файлы WFM

Я только что провел некоторое тестирование, и мне удалось воспроизвести шип 500 мВ-1 В (иногда это был спад) как на шине 5 В, так и на одном из выходных контактов из регистра сдвига. Это проблема правильно? Будет ли этот тип всплеска заставить регистр сдвига отключиться и вести себя странно?

15 августа:

Ниже приведен снимок, когда я вручную включаю \ выключаю насос. Не использовать сдвиговый регистр, чтобы сделать это. Синяя линия - это выходной контакт регистра сдвига 1, желтая линия - 5 В.

Я также сделал несколько снимков установки:

Полный размер

Полный размер

У меня также есть сообщение на форуме, к которому я также обновляю результаты: Arduino Forum

16 августа:

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

Я собираюсь забрать все рекомендованные компоненты в эти выходные и попробовать добавить их по одному.

18 августа:

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

Поэтому я пошел в крайнюю крайность и разорвал цепь сетевого фильтра APC Rack для защиты от перенапряжений и поставил ее перед насосом.

Теперь на любой из линий почти нет бликов. Ура!

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

Проблема решена: я решил купить линейный фильтр, чтобы посмотреть, смогу ли я отфильтровать шум насоса прямо у источника. Я купил это: Delta High Performance Filter . Теперь я даже не получаю ничего, кроме щелчка на осциллографе.

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

с использованием регистра сдвига 74hc595 с Raspberry PI

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

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

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

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

Чип регистра сдвига - это электронный элемент, способный получать последовательный поток данных от одного из своих PIN-кодов (PIN-код данных), сохранять эти данные и предоставлять их в своих 8 выходных PIN-кодах (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 установить rpi.gpio 

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

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

 wget https://peppe8o.com/download/python/shift_register.py 
Код

поясняется в следующем параграфе.

Импортируются необходимые пакеты:

 импортировать RPi.GPIO как GPIO
импорт sys 

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

 dataPIN = 16
latchPIN = 20
clockPIN = 21 

PIN-код настроен на вывод:

 GPIO.setmode (GPIO.BCM)
GPIO.настройка ((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 (часы, 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 

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

Регистр сдвига 74HC595 - Журнал DIYODE

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

Так что же такое 74HC595? Номерной знак автомобиля? Имя далекой звезды? Поиск в Google показывает, что 74595 - это район под названием Лангенбург в Германии. Что ж, мы могли бы иметь в виду любой из них, но для нас, производителей, это очень полезная интегральная схема, которая составляет основу наших 7-сегментных дисплейных модулей.

74HC595 - это 8-битный регистр сдвига с последовательным входом и параллельным выходом с 8-битным регистром хранения D-типа и возможностью высокого выходного тока. Фух, а что это? Проще говоря, это устройство, которое принимает 1 бит данных (0 или 1 ... звучит как что-то полезное для компьютера, не так ли?) За раз и внутренне перемещает (сдвигает) их по своему внутреннему хранилищу, чтобы сформировать 8-битный вывод.

8-битный регистр памяти D-типа сохраняет значения битов до тех пор, пока либо не будет отключено питание, либо вывод SRCLR (сброс регистра сдвига) не будет переведен в низкий уровень.Выходы могут обеспечивать ток, достаточный для управления светодиодом (или одним узлом многосегментного дисплея), например, через токоограничивающий резистор 220 Ом. Это действительно помогает уменьшить количество необходимых компонентов, и поскольку данные передаются через один вывод Arduino плюс пара контрольных выводов (подробнее об этом чуть позже), количество ресурсов, используемых на Arduino, сокращается. Сравните это с использованием восьми цифровых выводов Arduino, каждый из которых управляет транзистором, который затем включает / выключает один светодиод; это намного больше компонентов и много ценных выводов Arduino.

Хорошая новость в том, что их всего два; Итак, включая вывод данных, это всего три вывода от Arduino. Мы управляем этими выводами, используя digitalWrite (), чтобы установить для них высокий (логическая 1) или низкий (логический 0) уровень по мере необходимости.

Контакты, которые мы используем для управления 74HC595:

  • Контакт 11 74HC595, известный как SRCLK (Serial Register Clock)
  • Контакт 12 74HC595, известный как RCLK (защелка регистра).

Наряду с контактом 14 74HC595, который является контактом ввода данных, известным как SER (или последовательные данные), это все, что нам нужно.

74HC595 принимает бит (0 или 1, не имеет значения) в SER и сдвигает существующие биты (если есть), когда SRCLK переходит в высокий уровень; но только на переднем фронте вывода SRCLK на высокий уровень (т. е. в течение того ОЧЕНЬ короткого времени, когда уровень идет от низкого к высокому). Чтобы 74HC595 принимал данные только тогда, когда мы готовы, RCLK также должен быть понижен.

'595 - это устройство типа «заряжай и стреляй». Процедура заключается в загрузке серийных регистров с 8 битами, например. «10110110», выдавая тактовый импульс (ser) для каждого представленного бита.Когда загружено 8 бит (или более), выдача тактового импульса регистра передает последние 8 бит последовательных данных в параллельный регистр одновременно. Дополнительные биты будут передаваться через QH ', позволяя каскадировать несколько' 595 на 16, 24 и т. Д. Выходы.

OE (Разрешение выхода - контакт 13) активирует параллельные выходы при понижении уровня. Если OE остается на высоком уровне, выходы переходят в три состояния; фактически «не там». Последний вывод - SRCLR (сброс регистра сдвига - вывод 10).

Очищает содержимое при низком уровне.В наших модулях отображения для нашего проекта MEGA DIGITS в этом выпуске мы поддерживаем низкий уровень OE и высокий SRCLR.

Чем больше, тем лучше? Если что-то хорошо, лучше больше ...? С одним 74HC595 мы можем отображать 8 бит данных, будь то отдельные светодиоды или 7-сегментный светодиодный дисплей. Но что, если мы хотим большего? Дизайн 74HC595 позволяет это. Если в него сдвинуто более 8 бит, то обычно первый сдвинутый бит будет сдвинут и потерян. Однако вывод 9 - назовем его переполнением - имеет значение этого бита, и мы можем передать этот бит другому 74HC595.С двумя 74HC595 мы можем отображать 16 бит данных на светодиодах или 2 x 7-сегментных дисплея. Аккуратный! С шестью 74HC595 мы могли отображать десятичные значения до 999999, или мы могли отображать 23 59 59, за одну секунду до полуночи или в любое время между ними. С 847,341 74HC595 мы могли бы отображать ... ну, наверное, ничего, так как для этого потребуется слишком много энергии. Так что, если бы мы хотели управлять сверхъяркими светодиодами от 12 В? Что ж . ..

74HC595 будет работать с напряжением постоянного тока 2–6 В постоянного тока. Для большинства производителей это означает использование его с 5 В от Arduino.С дополнительной схемой он может управлять дисплеями с более высоким напряжением, но помните, что это часть 5 В, и подключение ее к 12 В или более может позволить дыму выйти (и будьте уверены, он никогда не вернется).

По сути, основным преимуществом здесь является перенос обязанностей по управлению дисплеем на другую интегральную схему. Действительно, можно управлять 7-сегментными дисплеями и т.п. непосредственно с платы Arduino, но у вас быстро заканчиваются порты ввода-вывода, и ваш код может стать неуправляемым. Если вы выводите только на один 7-сегментный дисплей, вы, вероятно, сможете управлять им напрямую.А как насчет двух дисплеев, четырех или десяти? Это быстро становится неуправляемым. Даже для отображения времени вам понадобится 28 операций ввода-вывода, чтобы иметь часы и минуты, или 42 ввода-вывода, чтобы включить секунды. Это начинает выходить за рамки даже MEGA-платы, а кодировать - ужасно.

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

Рассмотрите наш проект отображения времени большого размера как один из примеров отличного практического применения.

74HC595 Shift Register Tutorial | Ардуино с 7 сегментами

Эй, как дела, ребята! Акарш здесь из CETech.

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

В этом руководстве мы рассмотрим работу микросхемы регистра сдвига 74HC595 и ее распиновку, а в конце мы также поймем работу микросхемы с помощью небольшого проекта.

Итак, давайте сразу перейдем к делу.

Получите готовые печатные платы для ваших проектов

Проверьте PCBGOGO, если вам нужно произвести или собрать печатные платы.Они приветствуют ваш заказ прототипа печатной платы: количество заказа на изготовление печатной платы от 5ПК и количество заказа на сборку печатной платы от 1ПК.

PCBGOGO специализируется на производстве быстродействующих печатных плат и сборке печатных плат от прототипа до массового производства. У них есть три завода по производству ISO 9001: 2015, и все изготовленные и собранные печатные платы имеют высокое качество и сертифицированы UL, REACH и RoHS. К настоящему времени PCBGOGO имеет возможность выполнять более 3000 заказов на изготовление и сборку печатных плат в день, а общее количество клиентов достигло более 100000.

Вам посчастливилось прочитать эту статью проекта, так как в это время PCBGOGO отмечает свое 5-летие. Их покупатели получат отличную скидку (до 150 долларов) и памятные сувениры, если закажут изготовление и сборку печатных плат. Ждем чуда от PCBGOGO. Продолжительность кампании: 25 августа - 25 сентября 2020 г.

О 74HC595 Shift Register

Регистр сдвига 74HC595 представляет собой 16-контактную микросхему SIPO. SIPO расшифровывается как Serial In и Parallel Out, что означает, что он принимает ввод последовательно по одному биту за раз и обеспечивает вывод параллельно или одновременно на всех выходных контактах.Мы знаем, что регистры сдвига обычно используются для целей хранения, и здесь используется это свойство регистров. Данные проходят через вывод последовательного ввода и переходят к первому выводу вывода и остаются там до тех пор, пока другой ввод не войдет в ИС, как только будет получен другой ввод, ранее сохраненный ввод перейдет к следующему выводу и появятся вновь введенные данные. на первый штифт. Этот процесс продолжается до тех пор, пока память ИС не будет заполнена, то есть до получения 8 входов. Но когда хранилище IC заполняется, как только он получает 9-й вход, первый вход выходит через вывод QH ', если есть еще один сдвиговый регистр, последовательно подключенный к текущему регистру через вывод QH', тогда данные переходят на этот register, иначе он теряется, и входящие данные продолжают поступать, перемещая ранее сохраненные данные.Этот процесс известен как переполнение. Эта ИС использует только 3 контакта GPIO для подключения к микроконтроллеру, и, следовательно, потребляя только 3 контакта GPIO микроконтроллера, мы можем управлять бесконечным количеством устройств, последовательно соединяя несколько этих ИС друг с другом.

Реальным примером использования регистра сдвига является «Оригинальный контроллер Nintendo». Главный контроллер Nintendo Entertainment System должен был последовательно нажимать все кнопки, и для выполнения этой задачи он использовал регистр сдвига.

Работа микросхемы

74HC595 имеет два регистра, каждый из которых содержит всего 8 бит данных. Первый называется сдвиговым регистром. Регистр сдвига находится глубоко внутри микросхем ИС, спокойно принимая входные данные.

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

  • Биты в регистре сдвига перемещаются на один шаг влево. Например, бит 7 принимает значение, которое ранее было в бите 6, бит 6 получает значение бита 5 и т. Д.
  • Бит 0 в регистре сдвига принимает текущее значение на выводе DATA.На переднем фронте импульса, если на выводе данных высокий уровень, в сдвиговый регистр помещается 1. В противном случае это 0.

При включении контакта защелки содержимое регистра сдвига копируется во второй регистр, называемый регистром хранения / защелки. Каждый бит регистра хранения подключен к одному из выходных контактов QA – QH IC, поэтому, как правило, при изменении значения в регистре хранения изменяются и выходы.

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

Схема выводов 74HC595

Хотя эта микросхема доступна в нескольких вариантах и ​​моделях, мы будем обсуждать здесь распиновку микросхемы Texas Instruments SN74HC595N. Для получения более подробной информации об этой ИС вы можете обратиться к ее техническому описанию здесь.

ИС сдвигового регистра имеет следующие контакты: -

1) GND - Этот контакт подключен к контакту заземления микроконтроллера или источника питания

2) Vcc - Этот контакт подключен к Vcc микроконтроллера или источника питания, поскольку это ИС логического уровня 5 В.Для него предпочтительнее питание 5В.

3) SER- Это данные последовательного ввода, вводимые последовательно через этот вывод, т.е. вводятся по одному биту за раз.

4) SRCLK- Это вывод синхронизации регистра сдвига. Этот вывод действует как часы для регистра сдвига, поскольку через этот вывод подается тактовый сигнал. Поскольку IC запускается по положительному фронту, поэтому для сдвига битов в регистр сдвига этот тактовый сигнал должен быть ВЫСОКИМ.

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

6) SRCLR- Это вывод очистки регистра сдвига. Он используется всякий раз, когда нам нужно очистить память сдвигового регистра. Он сразу устанавливает для элементов, хранящихся в регистре, значение 0. Это вывод с отрицательной логикой, поэтому всякий раз, когда нам нужно очистить регистр, нам нужно подать сигнал LOW на этот вывод, в противном случае он должен оставаться на HIGH.

7) OE- Это контакт включения выхода. Это вывод с отрицательной логикой, и всякий раз, когда этот вывод установлен на ВЫСОКИЙ, регистр устанавливается в состояние высокого импеданса, и выходы не передаются. Чтобы получить выходы, нам нужно установить этот вывод на низкий уровень.

8) QA-QH - Это выводы вывода, которые необходимо подключить к какому-либо выводу, например, к светодиодам, семисегментному дисплею и т. Д.

9) QH '- Этот вывод находится там, чтобы мы могли Если мы подключим этот QH 'к выводу SER другой ИС и дадим обеим ИС один и тот же тактовый сигнал, они будут вести себя как одна ИС с 16 выходами.Конечно, этот метод не ограничивается двумя микросхемами - вы можете последовательно подключить столько, сколько захотите, если у вас достаточно энергии для всех из них.

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

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

Что мы будем делать, так это то, что мы будем управлять 8 светодиодами вместе с различными состояниями ВКЛ-ВЫКЛ через эту ИС, а также предоставим входы для просмотра механизма сдвига регистра.

Шаги для подключения схемы следующие: -

1) Подключите контакты Vcc и GND (контакт № 8 и контакт № 16) IC к Vcc и GND источника питания.

2) Подключите контакт SRCLR (контакт № 10) к источнику питания 5 В, а контакт OE (контакт № 13) к контакту GND.

3) Подключите светодиоды к выходным контактам QA-QH (QA = контакт № 15 и QB-QH = контакт № 1 к контакту № 7). Убедитесь, что светодиоды подключены в том порядке, в котором первый светодиод подключен к выводу QA, а последний - к выводу QH.

4) Теперь нам нужно подключить три кнопки к контактам SRCLK, RCLK и SER на ИС, которые являются контактами № 11, 12 и 14 соответственно. Подключения следует выполнять в соответствии с приведенной выше принципиальной схемой. Они используются для отправки импульсов HIGH Clock и логического уровня один на входе.

Когда схема будет завершена, мы увидим, что светодиоды загорятся в порядке, ранее сохраненном в регистре, это может быть любая случайная последовательность, а также могут быть все нули. В моем случае это 01111000, где ноль означает ВЫКЛ, а ЕДИНИЦА - ВКЛ.

Теперь, чтобы сначала отправить логический уровень НУЛЬ, нам нужно нажать кнопку, подключенную к входу SRCLK, это отправит НУЛЬ в регистр, поскольку вывод SER уже находится на уровне НУЛЯ, но это не будет отображать какой-либо Выход, потому что для получения Выход: нам нужно отправить ЕДИНИЦУ на вывод RCLK или на вход защелки, как только мы нажмем кнопку, подключенную к этому выводу, мы увидим, что шаблон изменится на 00111100, т.е. НУЛЬ входит слева, а НУЛЬ выходит справа.

Аналогичным образом, если мы хотим отправить ОДИН в качестве входа, нам просто нужно нажать кнопку, подключенную к контакту SER, и, удерживая ее нажатой, нам нужно нажать кнопку, подключенную к контакту SRCLK, и после этого мы можем оставить обе кнопки так как один был отправлен, и чтобы увидеть, что на выходе нам нужно нажать кнопку RCLK, которая будет нажимать ЕДИНИЦУ с левой стороны и выскакивает 0 с правой стороны, создавая последовательность 10011110.

Некоторые приложения 74HC595 с Arduino

Одним из приложений этой ИС является управление семисегментным дисплеем, отсюда вы можете перейти на страницу проекта.

Еще несколько приложений перечислены ниже: -

1) Удержание Данные за длительный период

2) Последовательное преобразование данных в параллельное

3) Логика общего назначения

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

Теперь вам хорошо

Итак, поскольку теперь у вас есть информация об этой ИС и ее работе, вы можете использовать эту ИС для решения проблемы нехватки контактов GPIO.Эта ИС - отличный инструмент, когда вам нужно управлять большим количеством светодиодов и семисегментных дисплеев. Хотя он обычно используется с микроконтроллерами, вы можете использовать его и без них, но в последнем варианте вы можете увидеть ошибку, известную как debouncing, которая возникает, когда для регистрации отправляется более одного такта, а не отправляется только один. Это отправит более одной ЕДИНИЦЫ или НОЛЯ и, следовательно, может привести к непредвиденному шаблону, но это не повод для беспокойства, поскольку этого не происходит при использовании его с микроконтроллерами.

Надеюсь, вам понравился урок.

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

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

В этом эксперименте мы будем использовать регистр сдвига для управления восемью светодиодами, но мы будем использовать только три контакта от 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 КК НИЗКИЙ
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 Ом резистор
  • 8x светодиодный цвет на ваш выбор!
  • 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 МГц - намного быстрее, чем могут заметить наши глаза! Чтобы действительно увидеть эффект, мы замедляем его, добавляя задержку.

Адам Мейер | Ардуино + 74hc595

Хорошо, допустим, у вас есть эта безумно крутая идея, в которой вам нужно контролировать тонну светодиодов (я знаю, я знаю ... светодиоды). Вы просмотрели статью о мультиплексоре, и это было здорово, но эта идея настолько крутая, что вам нужно индивидуальное управление каждым светодиодом, и включать их по одному просто не годится.Что ж, мы здесь, чтобы помочь, а теперь пришло время познакомить вас со сдвиговым регистром. Не просто сдвиговый регистр, а супер дешевый, невероятно крутой 8-битный сдвиговый регистр 74HC595!

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

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

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

Вы можете представить сдвиговый регистр в виде ряда стульев. В данном конкретном случае с 74HC595 у нас есть ряд из 8 стульев. Каждый стул либо пуст (0), либо на нем кто-то сидит (1).

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

Теперь вернем эту идею к 74HC595: этот регистр сдвига состоит из 8 выходных контактов, которые являются либо высокими (1), либо низкими (0). Когда вы поднимаете штырь SRCLK (Serial Clock) на высокий уровень (аналогично звонку в звонок), каждый штифт перемещается на один вправо. Последний вывод выпадает, и состояние нового вывода определяется выводом SER (последовательный), и вы можете установить для него значение 1 (HIGH) или 0 (LOW).

Как это позволяет мне снова управлять светодиодами? Допустим, у вас есть 8 светодиодов, подключенных к выходам регистров сдвига, и мы хотим включить 1-й, 3-й и 8-й светодиод. Итак ... что мы можем сделать, так это очистить регистр, чтобы все светодиоды погасли. Затем мы вставляем одну высоту, перемещаем ее вправо на 4 точки, добавляем одну высоту, перемещаем ее на 1, затем добавляем еще одну высоту. Посмотрите на изображение справа, оно будет более понятным.

Самое замечательное в том, что у сдвигового регистра есть этот вывод, который называется RCLK или синхронизация регистра. Вы можете удерживать этот контакт в НИЗКОМ состоянии, пока вы все настроите, и ничего на контактах дисплея не изменится.Затем, когда вы закончите и все будет так, как вы хотите, вы потянете RCLK HIGH, и 74HC595 отобразит новые настройки. Таким образом, несмотря на то, что мы меняем значения в регистре за 8 шагов, похоже, что это был всего один шаг.

Подключение

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

  • Vcc
    До 6 В (напряжение должно быть таким же, как у вашего микроконтроллера) - обычно 3,3 / 5 В
  • QA to QH
    Выходы регистра сдвига.
  • SER :
    (Последовательный) Вход для следующего смещенного пина.
  • SRCLK
    (последовательные часы) Когда на этом выводе высокий уровень, он сдвигает регистр.
  • RCLK
    (синхронизация регистров) Требуется установить высокий уровень, чтобы установить выход на новые значения регистра сдвига. Его необходимо установить в высокий уровень сразу после того, как SRCLK снова перейдет в низкий уровень.
  • SRCLR
    (Serial Clear) Очистит весь сдвиговый регистр, если вытащить НИЗКИЙ уровень, для включения необходимо установить высокий уровень.
  • OE
    (Output Enable) Этот вывод включает выход, когда он привязан к GND, и отключается, когда HIGH.

Как мы заставляем это работать

Каждый раз, когда сигнал на выводе SERCLK становится высоким, все значения сдвигаются вправо, и новое значение сдвигается (независимо от того, какой SER установлен на). После того, как вы переместили новое значение, чтобы увидеть внесенные изменения, вы также должны установить контакт RCLK в HIGH, чтобы обновить выходные контакты новыми данными.Мы хотели, чтобы ваш компьютер работал как можно быстрее, поэтому мы собрали код для микроконтроллеров Arduino и AVR: примеры кода см. Ниже.

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

 setRegisterPin (2, ВЫСОКИЙ);
setRegisterPin (3, ВЫСОКИЙ);
setRegisterPin (4, НИЗКИЙ);
setRegisterPin (5, ВЫСОКИЙ);
setRegisterPin (7, ВЫСОКИЙ);

// После того, как вы установили желаемые изменения в
// регистрируем контакты, вам нужно будет вызвать writeRegisters
// перед отображением.Только делай это в конце,
// а не после каждого вызова setRegisterPin, потому что это
// функции требуется некоторое время, чтобы записать значения.
// writeRegisters занимает около 1 мс на 10 из
// регистры сдвига, которые вы связали (80 контактов)
writeRegisters (); 

Регистр каскадного сдвига - также известный как объединение их в цепочку

Как я сказал выше, вы можете соединить 20 из них вместе, если вам нужно. В регистры сдвига встроена довольно умная опция, которая позволяет объединять их в цепочку или каскадно.Вы знаете, как последний регистр просто сбрасывает свое значение при смещении? Вывод Qh (вывод 9) - это то место, где 74HC595 сбрасывает это значение. Поэтому мы просто берем его и используем как вход SER во втором (или следующем) регистре сдвига, и бац! они связаны вместе. Вам также нужно будет затем соединить контакты SERCLK и RCLK вместе, но тогда вы будете золотыми. Посмотрите схемы сбоку и ниже, чтобы увидеть, как это связано.

Код

Код Arduino для индивидуального управления каждым выводом - Поддержка более 40 регистров сдвига
 int SER_Pin = 8; // вывод 14 на 75HC595
интервал RCLK_Pin = 9; // вывод 12 на 75HC595
интервал SRCLK_Pin = 10; // вывод 11 на 75HC595

// Сколько регистров сдвига - меняем это
#define number_of_74hc595s 1

// не трогать
#define numOfRegisterPins number_of_74hc595s * 8

логические регистры [numOfRegisterPins];

void setup () {
  pinMode (SER_Pin, ВЫХОД);
  pinMode (RCLK_Pin, ВЫХОД);
  pinMode (SRCLK_Pin, ВЫХОД);


  // сбрасываем все выводы регистра
  clearRegisters ();
  writeRegisters ();
}


// устанавливаем все выводы регистра в LOW
void clearRegisters () {
  for (int i = numOfRegisterPins - 1; i> = 0; i -) {
     регистры [i] = LOW;
  }
}


// Устанавливаем и отображаем регистры
// Вызов только ПОСЛЕ того, как все значения будут установлены так, как вы хотите (иначе медленно)
void writeRegisters () {

  digitalWrite (RCLK_Pin, LOW);

  for (int i = numOfRegisterPins - 1; i> = 0; i -) {
    digitalWrite (SRCLK_Pin, LOW);

    int val = регистры [я];

    digitalWrite (SER_Pin, val);
    digitalWrite (SRCLK_Pin, HIGH);

  }
  digitalWrite (RCLK_Pin, HIGH);

}

// установить отдельный вывод HIGH или LOW
void setRegisterPin (int index, int value) {
  регистры [индекс] = значение;
}


void loop () {

  setRegisterPin (2, ВЫСОКИЙ);
  setRegisterPin (3, ВЫСОКИЙ);
  setRegisterPin (4, НИЗКИЙ);
  setRegisterPin (5, ВЫСОКИЙ);
  setRegisterPin (7, ВЫСОКИЙ);


  writeRegisters (); // ДОЛЖЕН БЫТЬ ВЫЗВАН ДЛЯ ОТОБРАЖЕНИЯ ИЗМЕНЕНИЙ
  // Вызывается только один раз после того, как значения установлены так, как вам нужно.} 

Этот пример кода просто включает светодиоды по определенной схеме и сохраняет ее здесь. (Этот код поддерживает до 4 регистров сдвига. Поскольку он принимает двоичное число, он ограничен 32 символами.)

Вот код для AVR

 #include 
#include 


#define number_of_74hc595s 1 // Сколько регистров сдвига связано цепочкой?


int main () {
DDRB = 0xFF;
PORTB = 0x00;
счетчик символов = 0;

в то время как (1) {
счетчик ++; // Счетчик, используемый для отображения числа в двоичном формате через регистр сдвига
сдвиг (PB1, PB2, PB3, счетчик); // PB1 = SERCLK PB2 = RCLK PB3 = SER
_delay_ms (500);
сдвиг (PB1, PB2, PB3, 0x00); // Отключить все контакты
_delay_ms (500);
}
возврат 0;
}


void shift (int SRCLK_Pin, int RCLK_Pin, int SER_Pin, беззнаковые длинные данные) {
ПОРТБ & = ~ (1 RCLK_Pin); // Устанавливаем вывод регистрового сигнала в низкий уровень

for (int i = 0; i (8 * number_of_74hc595s); i ++) {// Теперь мы входим в цикл для сдвига 8+ бит

ПОРТБ & = ~ (1 SRCLK_Pin); // Устанавливаем вывод последовательных часов в низкий уровень

ПОРТБ | = (((данные & (0x01i)) >> i) SER_Pin); // Просматриваем каждый бит данных и выводим его

PORTB | = (1 SRCLK_Pin); // Устанавливаем высокий вывод последовательного тактового сигнала

ПОРТБ & = ~ (((данные & (0x01i)) >> i) SER_Pin); // Снова устанавливаем низкий уровень данных
}

PORTB | = (1 RCLK_Pin); // Устанавливаем вывод регистра-такта в высокий уровень, чтобы обновить вывод сдвигового регистра
} 

Заключение

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

Практическое руководство по регистрам сдвига

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

Вьетнамки

Сдвиговый регистр - это, по сути, набор триггерных схем, каждый триггер имеет 1 бит памяти.В нашем 75HC595 их 8, так что у него 8 бит или 1 байт памяти. Память хранит последнее введенное вами состояние, поэтому вам не нужно постоянно обновлять сдвиговый регистр, он сохранит последнее известное состояние (1 или 0), которое вы ввели. Однако это не является постоянным, поэтому сброс питания сотрет состояние. Память точно соответствует вашим выходным контактам. Итак, 01100101 будет отображаться следующим образом (мы начинаем отсчет с Q0)

Последовательный параллельный выход

74HC595 также является регистром сдвига с последовательным параллельным выходом.Это означает, что вы отправляете данные последовательно, то есть короткими импульсами на свой чип. Вы отправляете свои входные импульсы на вывод DS (или в некоторых таблицах данных SER ).

С защелкой

Импульсы, которые мы посылаем нашему чипу, сдвигаются на 1 позицию каждый раз, когда вы подаете импульс на вывод тактовой частоты регистра сдвига (обозначенный SH_CP или иногда SRCLK ). Это означает, что если мы дадим ему 1 в качестве нашего первого входного импульса, а затем произведем 7 импульсов по нашим часам с 0 в качестве входных данных, мы получим 00000001.

 10000000
01000000
00100000
00010000
00001000
00000100
00000010
00000001 

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

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

Q7S и объединение регистров сдвига

Вывод Q7S сдвигового регистра - это специальный выходной вывод, который выводит переполненные данные. Это позволяет объединить несколько регистров сдвига в цепочку, что позволяет подключить до 64 регистров с использованием 3 портов. Например, если вы введете 00000000 00000001 в 2 связанных регистра сдвига, ввод будет следующим:

 10000000 00000000
01000000 00000000
00100000 00000000
00010000 00000000
00001000 00000000
00000100 00000000
00000010 00000000
00000001 00000000
// ПЕРЕПОЛНЕНИЕ ПИН Q7S 1 ДЛЯ СЛЕДУЮЩЕГО СМЕЩЕНИЯ РЕГИСТРА
00000000 10000000
00000000 01000000
00000000 00100000
00000000 00010000
00000000 00001000
00000000 00000100
00000000 00000010
00000000 00000001
 

Для этого мы соединяем SH_CP и ST_CP второго регистра сдвига вместе с первым, таким образом, оба регистра сдвига имеют синхронизированные часы.Остальная часть находится в коде.

Подключение сдвигового регистра

Нам нужно всего 3 цифровых контакта на нашем Arduino для управления нашим регистром сдвига. Мы подключаем наши пины arduino 8 к SH_CP (зеленый провод), 9 к ST_CP (оранжевый провод) и 10 к DS (фиолетовый провод). Мы также подключаем наши OE и GND к нашему arduino GND (черный провод) и подключаем наше питание VCC к arduino 5V (красный провод).

Теперь вы можете использовать клеммы Q0 - Q7 в качестве выходных контактов и подключить к нему, например, семисегментный дисплей (прочтите наше руководство по семисегментному дисплею здесь)

Подключение нескольких регистров сдвига

Если мы хотим увеличить количество выходов, мы просто подключаем выходной порт Q70 к следующим регистрам сдвига входной терминал DS , мы также подключаем ST_CP и SH_CP и меняем наш код (см. Ниже) на отправить нашу защелку HIGH после отправки 16 бит вместо 8 бит.

Код Ардуино

У нас есть 1 основная функция под названием shiftOut , которая принимает 3 входа, ваш DS или вывод данных, ваш SH_CP или вывод синхронизации и байт данных , который содержит 8 бит для этого регистра сдвига. Чтобы включить несколько регистров сдвига, мы просто оборачиваем нашу основную функцию вокруг цикла for и запускаем наш ST_CP или фиксирующий контакт low / high соответственно, сдвигая байт из нашего dataBuffer в наш data byte

Автор Тийс Бернолет

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 избавит вас от догадок при подготовке следующего замечательного устройства и направит ваши идеи на путь успеха. Зарегистрируйтесь сегодня бесплатно.

.

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

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