Входы и выходы на ардуино. Пример подключения сдвиговых регистров 74hc595 и 74hc165.

Входы и выходы на ардуино. Пример подключения сдвиговых регистров 74hc595 и 74hc165.

Сегодня рассмотрим пример подключения 24 реле к 3 контактам Ардуино используя сдвиговый регистр 74HC595. В следующем видео я покажу как подключить 24 кнопки используя ещё 4 контакта Ардуино. Итого используя всего 7 контактов можно добавить неограниченное количество входов и выходов.

При создании проектов на Ардуино, нам часто приходится подключать много датчиков, кнопок, реле и другое. И перед нами всегда встаёт вопрос. Как же всё это подключить, ведь на Ардуино так мало входов и выходов. Вот здесь к нам на помощь и приходят такие микросхемы как сдвиговые регистры.
Без преувеличения можно сказать, что с ними вы сможете подключить любое количество.

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

Для Увеличения входов потребуется 4 входа на Ардуино, и для выходов тоже 3. Так что за действуя всего 7 входов-выходов вы получите неограниченное количество.
Одна такая микросхема способна добавить 8 выходов, а 2 уже 16, 3- 24 и так далее. А задействовано будет всего 3 вывода, независимо от количество входов или выходов.
И не волнуйтесь, что можете потерять в  скорости, так как эта микросхема 74HC595 работает на частотах до 100мГц, а 74HC165   на частоте 48мГц,  а это значительно больше, чем может выдать микроконтроллер.

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

Вот пример работы.
Сначала все реле выключены, потому что все биты во всех портах стоят в нулевом состоянии. Это задано во встроенной в Ардуино функции ShifhtOUT. Направление чтение битов справа на лево. В скетче всё рассказано.
Вот пример скетча. Он совсем простой, и если выкинуть всё лишнее займёт всего 20 строчек кода.

  • Нижняя строчка управляет  1 микросхемой и реле с 1 по 8.
  • Средняя строчка управляет  2 микросхемой и реле с 9 по 16.
  • Верхняя строчка управляет  3 микросхемой и реле с 17 по 24.

Повторюсь, сейчас все биты в нулевом состоянии, значит все реле выключены. Изменяя значения битов мы можем изменять состояние реле, то есть включать и выключать их. Для этого всего лишь надо подать в функцию ShiftOUT определённое значение, ноль или единицу. Реле изменят своё состояние с выключенного на включенное. Это можно видеть по изменению положения контакта, а так же по красному квадрату около реле. Он означает, что на реле подан высокий уровень, то есть HIGH. Точно такой же квадрат будет  и на сдвиговом регистре. Если квадратик синий, то значит состояние низкое и реле не включено.

Если на микросхеме высокий уровень, а на нужном реле низкий, значит где-то обрыв и сигнал до него не доходит.
Будем делать пример с 20 кнопками и 20 реле, просто дальше мне было лень рисовать. Задействовав всего 7 выходов Ардуино, мы получили 24 входа и 24 выхода, то есть 48. А могли бы и больше.

Теперь приступаем к работе.
Открываем Протеус. Для начала нам надо создать новый проект. Для этого нажимаем NEW PROJECT и изменим имя, например на registr, так как мы будем работать с регистрами сдвига. Теперь укажем путь для сохранения проекта. В прошлом уроке мы создали папку Протеус на диске D, Вот туда и сохраним.
Дальше указываем, что будем работать с шаблоном default, так как мы уже в нём подготовили некоторые элементы, которые будем часто использовать. Печатную плату создавать не будем, поэтому оставляем без изменений. Дальше тоже со всем соглашаемся и жмём Финиш.
Перед нами открылся чистый проект с загруженными из шаблона компонентами с прошлого урока. Удаляем светодиоды, потому что они нам сегодня не пригодятся. Сначала я думал, что мне понадобится 1 светодиод, поэтому я его оставил, так же к нему я оставил и резистор, но потом передумал их использовать, так как решил подключить реле. Так что можно было удалить их все.
У нас остался, Контроллер Атмега 328, Конденсатор, Кварц на 16 мегагерц, светодиод и резистор.
Теперь добавим микросхемы сдвиговых регистров. Для начала найдём регистр входов 74HC165. Вводим в поиск и добавляем его в список двумя щелчками мыши.
Точно так же добавим регистр выходов 74HC595.
Теперь найдём реле. В этом примере я использую только самые просты и распространённые элементы, поэтому беру те, которые мне подставляет Протеус, но здесь есть десятки тысяч разных электронных компонентов. Поэтому можете добавить что-нибудь своё. Это реле очень похоже на реле от модулей которые мы часто используем в своих примерах. Реле с двумя контактами. Один нормально замкнутый, а второй разомкнутый, который замкнётся если на вход реле будет подано напряжение от микроконтроллера.

Закрываем окно библиотеки и начинаем рисовать схему подключения. Начнём с контроллера. Выбираем Атмега 328 и вставляем его в окно схемы.

Что бы микроконтроллер работал на частоте 16 мегагерц, а не 8, надо установить внешний кварц. И ещё пару конденсаторов. Я всё это подробно рассказывал в этом видео, если что не понятно то посмотрите его. В следующих уроках я больше не буду показывать этот момент, а буду сразу начинать с примера, а кварц уже будет установлен на схему. Это будет сделано что бы не повторяться, и не занимать ваше время.

Теперь установим на схему микросхемы сдвиговых регистров. Начнём с регистров входа. Хоть они нам и не пригодятся в этом уроке, зато в следующем нам не надо будет этим заниматься. Так как эта схема перекочует в следующее видео. Так как мы будем подключать 20 кнопок, то нам понадобится 3 микросхемы. Правда у нас останется ещё 4 свободных места, так что вы можете установить 24 кнопки.
То же самое проделаем с микросхемой сдвигового регистра для увеличения выходов. Напомню, что каждая такая микросхема даёт прирост выходов для 8 реле. Подключаются они каскадом, одна за другой.  Нам как и с кнопками понадобится 3 микросхемы. Подключаются они всего к 3 контактам Ардуино и работают намного быстрее возможностей микроконтроллера, так что тормозов не будет.

При создании схемы вам придётся часто передвигать компоненты для изменения их положения на рабочем экране. Тут есть один нюанс. Для того что бы передвинуть несколько элементов надо что бы они полностью вошли в выделенную область. Иначе вы можете перенести не весь элемент а только его часть. Надо за этим следить.
А ещё я забыл добавить кнопки. Поэтому снова идём в библиотеку компонентов и пишем BUTTON. Нам показывают несколько вариантов на выбор. Остановимся на первом. В отличии от обычной тактовой кнопки эта кнопка может быть и с фиксацией и без фиксации, смотря куда нажимать. Добавляем и закрываем окно.
Теперь вставляем кнопки на схему. Сначала установим одну кнопку, а потом скопируем её, это намного проще и быстрее. В кнопке нам ничего менять не надо, там практически нет никаких свойств которые мы бы могли изменить. Теперь вставим реле. Вот его свойства нам необходимо отредактировать. По умолчанию базовое реле установлено для работы от 12 вольт, а наша схема работает от 5 вольт. Меняем на 5 вольт. Вот так просто мы из 12 вольтового, сделали 5 вольтовое реле. Вот бы в жизни так.
Теперь перенесём название реле и его вольтаж вот сюда. Так оно будет более компактно. Если вам не нужны какие-нибудь обозначения, то вы можете их легко удалить и ваша схема будет более свободна.

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

Если вы хотите написать что-то на схеме, то можете воспользоваться для этого выводом текста. Просто нажимаете и вводите любой текст. Я что бы не забыть указал, что питание микросхем должно подаваться на выводы 8 и 16.
Теперь надо соединить некоторые выводы микросхем друг с другом. Так как они работают одинаково то выводы 11 – это вывод тактовых импульсов и вывод 12 – это синхронизация у них должны быть соединены вместе.
9 выход отвечает за последовательное соединения нескольких регистров. Его надо подключить к выводу 14 другого регистра.
Теперь надо выходы микросхемы сдвигового регистра - 11, 12, и 14, соединить с микроконтроллером, со входами отвечающими за цифровые входы D10, D11, и D12.

  • 11  Вывод – это Вход тактовых импульсов. А при подаче 5 В происходит сдвиг битов влево, освобождая место для нового значения которые поступают на вход 14 вывода регистра.
  • 12 вывод это Синхронизация, но все называют её защёлка. И она нужна для выгрузки данных из временной памяти. При приёме данных защёлка должна находиться в Низком состоянии. А для вывода значений должна быть переключена в Высокий уровень. То есть 0 и 1. Этим мы даём указание регистру установить  цифровые выходы регистра в нужное состояние.
  • 14 вывод это вход последовательных данных (DATA).  принимает значение для выбранного бита. При получении высокого уровня, записывает в память единицу, а при получении низкого уровня сигнала, записывается 0.

Пока мы ещё много не нагородили, надо проверить, работает ли это всё вообще. Для этого заходим в редактирование микроконтроллера и делаем необходимые настройки на работу с внешним кварцем. И нам надо указать ссылку на адрес где находится HEX файл нашего скетча.
Открываем скетч. Сейчас все выходы установлены в ноль. То есть на всех выходах сдвигового регистра будет значение низкого уровня, то есть 0. Проверяем.
Включаем анимацию и видим, что напротив каждого выхода регистра горит синий квадратик означающий что на выходах сигнала нет.
Снова открываем скетч и изменим значения. Компилируем, и обновляем HEX файл. Теперь видим, что на некоторых выходах микросхемы появился высокий уровень. Он показан красным квадратиком. Сравним эти значения со скетчем.

Как можно увидеть, всё верно. Так что можно идти дальше и подключать реле.
Один контакт у всех реле подключаем к земле. Здесь схемное решение Протеуса немного отличается от Ардуиновского. В Протеусе, использовано голое реле без опторазвязки и другие радиоэлементов, поэтому для того чтобы реле сработало надо подать питание на обмотку магнита, а в модулях Ардуино питание подаётся на модуль, а сигнал управления подаётся на вход. Если проще, то вход реле надо подключить к выходу сдвигового регистра.
Теперь все выходы регистра надо соединить с реле. У каждой микросхемы 8 выходов. Они обозначаются как Q0-Q7. Если смотреть по выводам микросхемы, то первый выход – это 15 вывод микросхемы, а дальше они идут по порядку с 1 по 7.

Соединять выходы можно и так как я сейчас показываю, но это допустимо только на очень простых схемах и с малым количеством радиоэлементов. Провод можно тянуть не задумываясь как он будет проложен, Протеус сам позаботится о том чтобы проложить связь и нигде ничего не нарушить. Но повторюсь в больших схемах, и даже в этой так делать нельзя. Дальше я покажу правильный способ как надо делать.
Запускаем анимацию, так как HEX файл мы уже загрузили ранее. Вы можете остановить видео и пройтись по линии от регистра до реле и увидеть, что если на регистре красный квадрат то значит на нём высокий уровень и он включит реле. У работающих реле контакт замкнул другой вывод и если бы там была нагрузка, то она бы включилась.

Теперь рассмотрим более правильный способ разработки сложных схем. Когда у вас очень много линий связи, то не обязательно тянуть сотни линий делая из схемы непролазный лес. Можно использовать для этого контакты из вкладки терминалы. Если честно я не знаю как это называется. Кто знает, напишите.
Заходим в Терминалы и выбираем пункт DEFAULT. Это вот такой контакт. Его принцип работы такой. Если на схеме есть один или несколько контактов и между ними есть связь, то это равносильно проведённой между ними линии соединения. Допустим я хочу подключить реле к земле, то мне надо установить такой контакт, зайти в редактирование и выбрать из выпадающего списка пункт назначения. Связь есть, а проводов не видно и схема более наглядная так как около кружочка напечатано с чем этот контакт соединяется. Соединим этим способом все реле с землёй.
Теперь тоже самое сделаем с кнопками. Эта земля нам больше не нужна., удаляем её.
Так же поступим с выходами микросхемы сдвигового регистра. Но здесь, так как мы никуда не ссылаемся, то нам надо дать этим контактам имя. Я дам имя по конечному пункту, то есть с чем этот контакт должен будет соединяться, с каким реле.
И тоже самое делаем с реле. Но так как нам уже есть на что ссылаться, то при редактировании уже можно выбирать из списка, а не писать свои имена. Если это первое реле, то ищем в списке реле 1 и выбираем его. Это действие свяжет реле с нужным контактом регистра.  Так как у нас пока нарисовано 12 реле, то и на микросхеме я вывел всего 12 контактов. Потом добавлю недостающее.
Включаем анимацию и смотрим. Как и прежде всё работает. А теперь давайте сравним первый и второй способ. Второй гораздо симпатичнее и лучше читается. Так же его проще редактировать. И ещё десятки плюсов. Так что будем пользоваться этим способом.

По условию, мне надо было сделать 20 кнопок и 20 реле, а у меня всего по 12. Надо исправить. Уплотним схему. По центру у нас было пустое место вот его и используем. Перенесём все кнопки сюда. Мне кажется что собрав их в одном месте так будет удобнее ими пользоваться, да и выглядеть стало посимпатичнее.
Теперь, после того как мы перенесли кнопки у нас образовалось пустое место между рядами. Подожмём реле, тем самым освободим место для ещё двух рядов реле.
Скопируем нижний ряд и вставим его ниже по схеме. Так мы получили ещё 8 штук.
Тоже самое проделаем с кнопками, но здесь сразу скопируем четыре ряда и вставим их снизу на схему. Нам не надо волноваться за название кнопок, так как мы их не вводили.
На выходах сдвиговых регистров добавим недостающие 8 контактов. Так как нам пока некуда ссылаться, то надо создать для них названия с RELAY 13 до RELAY 20.
Переходим к реле. Так как мы копировали ряд, то вход реле у нас получил ссылку на неправильную кнопку и это надо исправить. Переименуем контакт в соответствии с названием реле, так как хоть мы и копировали ряд, но название реле получили в соответствии с порядковым номером на схеме. Надеюсь, понятно объяснил.

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

Спасибо что досмотрели это видео до конца. Оставайтесь на канале скоро выйдут новые видео уроки на разные темы. Я уверен, что здесь вы сможете найти для себя что-нибудь интересное и полезное.
До встречи.

Дополнительные материалы и примеры
arduino и proteus Симуляция ардуино без подключения
Proteus arduino. установка дополнительных библиотек ARDUINO ESP8266 NodeMCU.
Сдвиговый регистр 74hc165 ардуино. Входы ардуино
Входы и выходы на ардуино. Пример подключения сдвиговых регистров 74hc595 и 74hc165
Простые измерения в Proteus. Амперметр и Вольтметр
Учимся Создавать и Тестировать Электронику в Proteus: Полное Руководство

Скетчи