0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Как подключить сдвиговый регистр 74HC595 к Arduino

Содержание

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

В какой-то момент времени вы неизбежно столкнетесь с проблемой отсутствия достаточного количества контактов на вашем ардуино для удовлетворения потребностей вашего проекта или прототипа. Решение этой проблемы? Сдвиговый регистр, а точнее 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, а все остальное уже втоматизировано.

Arduino.ru

Множим выходы с помощью сдвигового регистра 74HC595

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

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

Другими словами этот регистр позволяет контролировать 8 выходов, используя всего несколько выходов на самом контроллере. При этом несколько таких регистров можно объединять последовательно для каскадирования. Другие подходящие регистры можно поискать по комбинации «595» и «596» в серийном номере. Так, например, STP16C596 может управлять 16 светодиодами одновременно без использования дополнительных резисторов.

В данной схеме используется принцип синхронизированной последовательной передачи сигнаналов. Необходимые значения сигнала (биты HIGH или LOW) передаются в регистр один за другим, при этом регистр получает синхронизирующий сигнал, который заставляет его считать сигнал с входа. Когда байт (1 байт = 8 бит) считан, значения всех 8 бит распределены по выходам. То есть передаем в регистр сигналы последовательно, на выходах регистра имеем параллельно 8 сигналов.

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

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

Распиновка входов/выходов регистра
Пины 1-7, 15Q0 » Q7Параллельные выходы
Пин 8GNDЗемля
Пин 9Q7″Выход для последовательного соединения регистров
Пин 10MRСброс значений регистра. Сброс происходит при получение LOW
Пин 11SH_CPВход для тактовых импульсов
Пин 12ST_CPСинронизация («защелкивание») выходов
Пин 13OEВход для переключения состояния выходов из высокоомного в рабочее
Пин 14DSВход для последовательных данных
Пин 16VccПитание
Пример с одним регистром
  • GND (пин 8) на землю
  • Vcc (пин 16) к питанию 5В
  • OE (пин 13) на землю
  • MR (пин 10) к питанию 5В

Итак, мы запитали регистр и сделали все выходы активными. Это несколько упрощенный способ подключения, так как в момент подачи питания на схему на выходах будут случайные значения. Можно контролировать пин MR и OE непосредственно с Arduino, чтобы обнулить входы и/или подключить выходы в нужный момент. Для упрощения схемы и минимизации количества задействованных выходов Arduino мы будем использовать более простую схему, так как значения регистров и выводов будут перезаписаны, как только программы начнет работать.

Соединяем с Arduino:

  • DS (пин 14) с 11-ым цифровой выход Arduino (на схеме синий провод)
  • SH_CP (пин 11) с 12-ым цифровым выходом (желтый провод)
  • ST_CP (пин 12) c 8-ым (зеленый провод)

Далее эти выходы в тексте и коде именуются dataPin, clockPin и latchPin соответственно. Обратите внимание на конденсатор 0.1 микрофарада на latchPin, он минимизирует шум в схеме при подаче «защелкивающего» импульса.

Подключаем светодиоды к выходам регистра 74HC595, катод (короткая ножка) светодиода подключается к общей земле, а анод (длинная ножка) через ограничительный 220-ОМ резистор к выходам регистра. При использовании регистров отличных от 74HC595 следует свериться с документацией и проверить схему подключения. К некоторым регистрам светодиоды подключаются наоборот — катод к выходам.

Ниже приведен код трех программ. Первая, «Hello world», выводит значения байта от 0 до 255. Вторая по одному включает светодиоды. Третья циклически проходит по массиву.

Пониманию кода могут помочь «временная диаграмма сигналов» регистра и «таблица логики». Когда clockPin переглючается с LOW на HIGH, регистр считывает значения с DS пина. По мере считывания данные записываются во внутреннюю память. Когда latchPin переключается с LOW на HIGH, данные «защелкиваются», то есть передаются на выходы регистра, включая светодиоды.

Пример использования каскада сдвиговых регистров

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

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

Далее DS вход (пин 14) подключается к Q7′ выходу (пин 9) первого регистра (синий провод). А SH_CP (пин 11) и ST_CP (pin 12) подключаются параллельно регистру к соответствующим входам первого регистра. Желтый и зеленый провод соответственно.

К выходам второго регистра подключаем зеленые светодиоды.

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

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

Читать еще:  Сверлильный станок своими руками – все достаточно просто

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

Для справки: сдвиговый регистр — это набор последовательно соединённых D-триггеров (которые поддерживают функцию сдвига вправо и влево).

Обратимся к техническим параметрам устройства:

  • напряжение: 2 — 6V;
  • выходной ток: 6 мА;
  • рабочие температуры: от -40°C до +85°C.

Распиновка выводов:

Теперь можно приступать к главному – подключим сдвиговый регистр 74HC595 к Arduino. Схема сборки будет выглядеть следующим образом:
В ней мы использовали следующие аппаратные детали: микроконтроллер Arduino Uno (Arduino Nano также подойдет), модуль регистра 74HC595, 8 светодиодов и столько же резисторов, соединительные провода (комплект), и обратите внимание – 2 макетных платы.

Если желаете использовать одну плату расширения, принципиальная схема подключения изменится и будет выглядеть так:
Ну а мы вернемся все же к первому варианту. Загружаем скетч для проверки работоспособности индикаторов:
Как видите, мы не использовали библиотеки, т.к. коды – простые.

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

Надеемся, собранный материал вам пригодится! Удачных проектов!

Урок 2 — Подключаем сдвиговый регистр 74НС595 к Arduino. «Бегущие» огни

В данном уроке мы с вами подключим сдвиговый регистр 74HC595 к Arduino. Но все по порядку. Сперва рассмотрим что такое сдвиговый регистр и как он устроен.

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

Vcc

Q0. Q7

DS или SER

(Data Serial) Вход для последовательных данных

OE

Вход для переключения состояния выходов из высоко много в рабочее(активация при получении LOW)

ST_CP или RCK

(STorage register Clock input, storage — хранилище) Синронизация(«защелкивание») выходов

SH_Cp или SCK

(SHift register Clock input, shift — сдвиг) Вход для тактовых импульсов

MR

Сброс значений регистра (активация при получении LOW)

Q7S

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

GND

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

Для примера работы сдвигового регистра 74HC595 подключим светодиоды.

Для Видео урока нам понадобится:

— Сдвигового регистра 74HC595

Схема подключения сдвигового регистра к плате Arduino UNO.

Принципиальная схема подключения сдвигового регистра к плате Arduino UNO.

В видео уроке показан пример работы сдвигового регистра. Скетч управления бегущими огнями в среде Arduino IDE будит вот таким:

Скетч из видео урока вот такой:

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

Придумать можно много интересных вариантов применения сдвигового регистра 74HC595 в проектах на Arduino.

Следующий урок: Два сдвиговых регистра 74HC595. Бегущие огни.

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

Понравилась статья? Поделитесь ею с друзьями:

Как подключить сдвиговый регистр 74HC595 к Arduino

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

Нам понадобится:

  • Ардуино UNO (или совместимая плата);
  • сдвиговый регистр 74HC595;
  • макетная плата;
  • соединительные провода (вот такие);
  • логический анализатор (не обязательно);
  • персональный компьютер со средой разработки Arduino IDE.

1 Описание и назначение сдвигового регистра 74HC595

Сдвиговый регистр 74HC595 и ему подобные используются в качестве устройств преобразования последовательных данных в параллельные, а также может использоваться как «защёлка» для данных, удерживая заданное состояние.

Схема выводов («распиновка») приведена на рисунке слева.

Назначение выводов сдвигового регистра 74HC595 и внешний вид в выводном корпусе DIP-16

Назначение выводов микросхемы 74HC595 такое.

Обозначение выводаНазначение
Q0…Q7выходы параллельных данных;
GNDземля (0 В);
Q7′выход последовательных данных;
MRсброс ведущего устройства (активный низкий);
SHCPвход тактовых импульсов сдвигового регистра;
STCPвход тактовых импульсов «защёлки»;
OEразрешение вывода (активный низкий);
DSвход последовательных данных;
VCCпитание +5 В.

Конструктивно микросхема выполняется в нескольких типах корпусов; я буду использовать микросхему в выводном корпусе DIP-16, т.к. его проще использовать с макетной платой (бредбордом).

2 Краткое описание интерфейса SPI

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

Среда разработки для Arduino имеет встроенную библиотеку работы по интерфейсу SPI. При её применении используются цифровые выводы с 10 по 13 на платах Arduino Uno и Arduino Nano; также они продублированы и выведены на отдельный разъём ICSP:

Выводы Arduino, отведённые под SPI

Обозначение выводаНазначение
SCLKвывод тактовых импульсов SPI;
MOSIданные от ведущего – к ведомому;
MISOданные от ведомого к ведущему;
SSвыбор ведомого.

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

Давайте соберём схему, которая показана на рисунке.

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

Вот таблица подключений:

Вывод свдигового регистра 74HC595Вывод Arduino
VCC5V
GNDGND
DS11 (MOSI)
STCP10 (CS)
SHCP13 (SCK)
Q7′12 (MISO)
OE#GND
MR#5V

Вывод OE# подключим к земле, чтобы разрешение на вывод данных было всегда активно. А вывод MR# подключим к питанию, таким образом заблокируем случайный сброс устройства.

На монтажной плате 8-штырьковый разъём типа PLS – это выход, с которого будем снимать параллельные данные сдвигового регистра.

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

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

4 Тестовый скетч для изучения работы регистра сдвига

Напишем вот такой скетч и загрузим в память Arduino. Здесь мы по циклу будем записывать два числа – 210 и 0 – в сдвиговый регистр с небольшими временными интервалами между ними. Да, только и всего.

Скетч записи данных в сдвиговый регистр (разворачивается)

PIN_SPI_SS – это внутренняя стандартная константа, которая соответствует выводу «10» Ардуино в режиме SPI. Данная константа определена в файле pins_arduino.h, который находится по пути %programfiles%arduino-(версия)hardwarearduinoavrvariants Также там определены константы PIN_SPI_MOSI (пин 11), PIN_SPI_MISO (пин 12), PIN_SPI_SCK (пин 13). В ранних версиях Arduino IDE (например, 1.6.хх) этих констант не было.

В принципе, мы могли бы с таким же успехом использовать любой другой цифровой вывод Arduino; тогда пришлось бы в программе объявить его и не забыть задать режим работы – OUTPUT.

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

5 Временная диаграмма работы микросхемы 74HC595

Общий вид временной диаграммы – на рисунке. Голубой пунктирной линией показаны 4 линии SPI, красной пунктирной – 8 каналов параллельных данных регистра сдвига. Точка A на шкале времени – это момент передачи в регистр сдвига числа «210», B – момент записи числа «0», C – завершение текущей итерации цикла и начало новой.

Временная диаграмма работы микросхемы 74HC595

Как видно, от А до B – 10,03 миллисекунд, а от B до С – 90,12 миллисекунд, почти как мы и задали в скетче. Небольшая добавка в 0,03 и 0,12 мс – время передачи последовательных данных от Arduino, поэтому мы тут имеем не ровно 10 и 90 мс.

Рассмотрим подробнее участок A.

Обратите внимание на временной масштаб. Теперь это микросекунды, а на предыдущем были миллисекунды. То есть это сильно укрупнённый по сравнению с первой диаграммой участок.

Диаграмма передачи числа «11010010» по SPI

В первом канале сверху – длинный импульс с нулевым уровнем, которым Arduino инициализирует передачу по линии SPI — ENABLE – выбор ведомого. В это время начинают генерироваться тактовые импульсы SPI — CLOCK (см. второй сверху канал). Для передачи одного байта генерируется 8 тактовых импульсов.

Третий канал сверху – SPI — MOSI – данные, которые мы передаём от Arduino к сдвиговому регистру. Это наше число «210» в двоичном виде – «1101 0010».

После завершения передачи линия SPI — ENABLE поднимается в высокое состояние, и мы видим, что сдвиговый регистр выставил на своих 8-ми ножках значение «1101 0010». Я выделил это голубой пунктирной линией и подписал значения для наглядности.

Теперь обратим внимание на участок B.

Диаграмма передачи числа «00000000» по SPI

Опять всё начинается с выбора ведомого и генерирования 8-ми тактовых импульсов (первый и второй каналы сверху). Данные на линии SPI — MOSI теперь – «0000 0000» (3-ий сверху канал). То есть мы записываем в этот момент в регистр число «0». Но пока передача не закончена, в регистре по прежнему хранится значение «1101 0010», которое мы выставили ранее. Оно выводится на параллельные выводы Q0..Q7 (8 нижних каналов на рисунке), а также, при наличии тактовых импульсов в линии SPI — CLOCK, выдаётся в линию SPI — MISO (см. 4-ый канал сверху) c последовательного выхода регистра Q7′, что мы тут и видим.

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

Если подключить несколько сдвиговых регистров таким образом, чтобы линии CLOCK (SCLK на рисунке ниже), MOSI и MISO у них были общие, а ENABLE ( SS на рисунке) каждой микросхемы подключались к разным цифровым выводам Arduino, то можно независимо обращаться к каждому из сдвиговых регистров, активизируя низким уровнем соответствующий из них, и записывать в регистры данные и считывать из них данные. Такое подключение называется независимым.

Независимый и каскадный типы подключений по интерфейсу SPI

Независимое подключение ведомых SPI устройств (например, регистров 74HC595) к ведущему (например, Arduino) изображено на левой части рисунка. Думаю, это уже достаточно просто для нас, так как оно почти ничем не отличается от подключения одного сдвигового регистра. Поэтому давайте рассмотрим другой тип подключения – каскадный.

7 Каскадное подключение регистров сдвига к Arduino

Давайте подключим три регистра сдвига 74HC595 к Arduino и попробуем управлять ими по SPI.

Соберём в соответствии с этим нашу схему. У меня получилось как-то так:

Каскадное подключение трёх сдвиговых регистров к Arduino – вид со стороны параллельных выходов 74HC595 Каскадное подключение трёх сдвиговых регистров к Arduino – вид со стороны пинов управления 74HC595

Теперь напишем скетч для «бегущей волны», но теперь она будет немного длиннее. В моём случае – из 19-ти светодиодов, каждый из которых будет представлять один из разрядов параллельных выходов (на все 24 не хватило места на монтажке).

Скетч «бегущей волны» со сдвиговым регистром (разворачивается)

Обратите внимание, мы обращались к параллельным выходам 3-х сдвиговых регистров как к большому 24-разрядному числу. Но что делать, если вы подключили к Arduino большее количество 74HC595? Такими большими числами Arduino, конечно же, оперировать не умеет. В таком случае придётся работать с байтами. То есть передавать в каждый регистр своё 8-разрядное значение.

А вот так это выглядит в действии:

Каскадное подключение трёх сдвиговых регистров к Arduino в действии

На видео в конце статьи результат наглядно показан в динамике. К каждому из трёх сдвиговых регистров подключены светодиоды своего цвета – красные, зелёные и синие, и видно, как наше число «перескакивает» с регистра в регистр.

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

Подключаем сдвиговый регистр 74hc595 Ардуино

Сдвиговый регистр 74hc595 Arduino используется для управления семисегментного индикатора и светодиодами. Назначение у сдвиговых регистров велик, один из самых популярных способов применения — умножение выходов Arduino (занимаем 3 пина, а получаем 8). Рассмотрим на примерах с программами и схемами, как использовать 74hc595 для подключения светодиодов и семисегментного индикатора 5161as.

Как работает сдвиговый регистр 74hc595

Чтобы понять принцип работы микросхемы 74hc595, следует рассмотреть распиновку сдвигового регистра 74hc595, которая изображена на картинке ниже. Контакты DS, ST_CP и SH_CP — служат для управления и подключаются к любым выходам платы Arduino. Контакты Q0Q7 — это выходы (разряды) сдвигового регистра. С помощью отправки байта с Ардуино можно менять состояние разряда (HIGH или LOW).

Схема. Описание и распиновка сдвигового регистра 74hc595 Ардуино

Контакты VCC и GND — это питание регистра;
Контакт MR — сброс (не активен);
Контакт OE подключается к GND;
Контакт Q7` предназначен для последовательного соединения регистров.

Как подключить 74hc595 к плате Arduino

Для этого занятия нам потребуется:

  • плата Arduino Uno / Arduino Nano / Arduino Mega;
  • 74HC595 / КР1564ИР52 сдвиговый регистр;
  • макетная плата;
  • светодиоды и резисторы;
  • семисегментный индикатор;
  • провода «папа-папа».

Скетч. Тестирование 74hc595 сдвигового регистра

Мы кратко рассмотрели 74hc595 описание на русском. Но чтобы полностью разобраться в назначении и принципе его работы — следует подключить регистр или его российский аналог КР1564ИР52 к Ардуино Уно, согласно схеме и загрузить следующий скетч. Программа позволяет попеременно включать/выключать восемь светодиодов, используя лишь 3 цифровых пина микроконтроллера Arduino.

Пояснения к коду:

  1. пока защелка регистра ST_CP (подключен к latchPin) находится в состоянии HIGH — регистр не принимает сигнал с микроконтроллера;
  2. данные отправляют в двоичном виде, где каждый из 8 битов отвечает за свой разряд. «1» — разряд переходит в состояние HIGH, «0» — в состояние LOW.

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

В следующем примере используем функцию bitWrite(x, n, b), которая позволяет изменять состояние указанного бита переменной. x — переменная, у которой необходимо изменить бит; n — это номер бита, состояние которого необходимо изменить (начинается с крайнего правого бита), b — новое значение бита (0 или 1). Схема со светодиодами остается прежней, меняется только программа.

Пояснения к коду:

  1. в цикле for Arduino меняется переменная bitPos от 0 до 8. С помощью функции bitWrite(byteToSend, bitPos, HIGH); изменяется байт в двоичном виде, который отправляется на регистр. При bitPos=0 получим B00000001, при bitPos=1 — B00000010, при bitPos=2 — B00000100 и т.д.;
  2. MSBFIRST и LSBFIRST меняет направление сигнала.

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

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

Пояснения к коду:

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

Заключение. Сегодня мы рассмотрели характеристики, назначение и описание сдвигового регистра 74hc595 Arduino. Привели несколько примеров со схемами, рабочими программами с подробными комментариями для управления с помощью регистра светодиодами и семисегментного индикатора 5161as. В своих следующих проектах на Ардуино мы обязательно будем применять эту микросхему.

Источники:

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

http://arduino.ru/Tutorial/registr_74HC595

http://arduino-ide.com/modules/69-sdvigovyj-registr-74hc595-i-arduino.html

http://portal-pk.ru/news/71-urok-2-%E2%80%94-podklyuchaem-sdvigovyi-registr-74ns595-k-arduino-.html

http://soltau.ru/index.php/arduino/item/458-kak-podklyuchit-sdvigovyj-registr-74hc595-k-arduino

http://xn--18-6kcdusowgbt1a4b.xn--p1ai/%D1%81%D0%B4%D0%B2%D0%B8%D0%B3%D0%BE%D0%B2%D1%8B%D0%B9-%D1%80%D0%B5%D0%B3%D0%B8%D1%81%D1%82%D1%80-74hc595/

Ссылка на основную публикацию
Статьи c упоминанием слов:
Adblock
detector