Sn74Hc165N схема включения: SPI и Arduino: плодим входы – RoboCraft

Входы и выходы на ардуино. Пример подключения сдвиговых регистров 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.
Переходим к реле. Так как мы копировали ряд, то вход реле у нас получил ссылку на неправильную кнопку и это надо исправить. Переименуем контакт в соответствии с названием реле, так как хоть мы и копировали ряд, но название реле получили в соответствии с порядковым номером на схеме. Надеюсь, понятно объяснил.

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

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

Как подключить к микроконтроллеру кнопки

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

                             рис1а                                                                            рис1б

 

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

   Когда кнопка отпущена – вывод мк через резистор соединен с “плюсом” питания (рис. 1а). Когда кнопка нажата – вывод мк соединен с землей. Подтягивающий резистор R1  ограничивает силу тока в цепи переключателя. Если бы его не было, то при нажатии кнопки мы бы просто закоротили наш источник питания.

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

   Что произойдет, если вывод микроконтроллера окажется в режиме выхода? Это будет зависеть от состояния этого вывода. Если на выводе “логический  ноль” – ничего страшного не случиться, потому что — в первом случае (рис1а) величина втекающего тока ограничена резистором R1, а во втором случае (рис1б)  никакой ток вообще не потечет. При нажатии кнопки тоже ничего не случиться, поскольку разность потенциалов между выводом и “землей” в этом случае будет равна нулю.

   Если же на выводе будет ”логическая единица” и кнопка окажется нажатой, то через вывод микроконтроллера на землю потечет ток величиной в несколько десятков миллиампер и вывод порта может “погореть”. Предельно допустимый ток для вывода микроконтролера AVR согласно документации равен 40 мА. Поэтому иногда нелишним бывает поставить между выводом мк и кнопкой резистор номиналом в несколько сотен ом, например 330 (рис 1с). Так, например, подключены кнопки на отладочной плате STK500. Это сделано для подстраховки, чтобы пользователь нечаянно не спалил микроконтроллер в ходе своих эксперементов.

   Для своих макетов впрочем можно обойтись и без этого резистора. 

 Рис 1с

Рис. 2а

Рис. 2б

     Используется когда кнопок больше двух, а выводы мк хочется сэкономить. Каждой кнопке в данном случае соответствует свой цифровой код, а  количество кнопок, которые можно таким способом повесить на N выводов мк =  2N  — 1. То есть на три вывода можно повесить 7 кнопок, на четыре – 15 и так далее… но я бы больше 7-ми вешать не стал. Увеличивается количество дополнительных внешних компонентов,  усложняется схема и программа мк. Кроме того, для большого количества кнопок есть и другие схемы включения. Подтягивающие резисторы на схеме не показаны, подразумевается, что используются внутренние.

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

                                                                             Рис. 3

 

   Данная схема актуальна не для всех микроконтроллеров AVR, потому что в некоторых моделях микроконтроллеров внешнее прерывание может возникать по любому изменению на любом выводе. (например в ATmega164P)

 

Рис. 4

 

   Такой вариант подключения обычно используется для блоков из нескольких кнопок, которые объединены конструктивно и соединены электрически по матричной схеме. Но никто не запрещает использовать эту схему и для включения  обычных кнопок, однако реальную экономию она дает при количестве кнопок ? 9.

   Выводы PС0, PС1, PС2, PC3  – это строки матрицы, выводы PB0, PB1, PB2 – это столбцы матрицы. Кнопки можно опрашивать либо по строкам, либо по столбцам. Допустим, мы опрашиваем их по столбцам. Процедура опроса будет выглядеть следующим образом. Начальное состояние всех выводов – вход с включенным подтягивающим резистором. Устанавливаем вывод PB0 в режим выхода и выставляем ноль. Теперь нажатие кнопок S1, S2, S3, S4 будет замыкать выводы PС0, PС1, PС2, PC3 на 0 питания. Опрашиваем эти выводы и определям нажата ли какая-нибудь кнопка в данный момент. Устанавливаем вывод PB0 в режим выхода и включаем подтягивающий резистор. Устанавливаем вывод PB1 в режим выхода и выставляем ноль. Снова опрашиваем выводы PС0, PС1, PС2, PC3. Теперь нажатие кнопок S5, S6, S7, S8 будет замыкать выводы PС0, PС1, PС2, PC3. Последний столбец кнопок опрашиваем аналогично. 
 

   Строки матрицы можно завести через диоды на вывод внещнего прерывания. Тогда логику программы можно было бы построить так. Если клавиатура не используется в течении нескольких минут, микроконтроллер переходит в режим пониженного энергопотребления. При этом выводы PB0, PB1, PB2 – конфигурируются как выходы с нулевым логическим уровнем.  Когда одна из кнопок нажимается, вывод прерывания через диод замыкается на ноль. Это вызывает внешнее прерывание, микроконтроллер просыпается и запускает таймер по сигналам которого происходит сканирование клавиатуры. Параллельно запускается счетчик времени, который сбрасывается при нажатии любой из кнопок. Как только он переполняется, микроконтроллер опять переходит в режим пониженного энергопотребления. 

   Это, пожалуй, пограничный случай экономии выводов при подключении кнопок, поскольку задействован только один вывод микроконтроллера – вывод АЦП. Суть способа понятна из рисунка. У нас есть резистивный делитель  с известными уровнями напряжений на резисторах, с помощью кнопок эти напряжения мы коммутируем на вход АЦП. Контроллер оцифровывает напряжение на этом выводе  и, исходя из того, в какой диапазон попадает считанное напряжение, определяет номер нажатой кнопки.

  Когда ни одна кнопка не нажата, вход АЦП притянут к земле резистором R2. Оставлять вход АЦП плавающим нельзя, а то он будет ловить помехи. При замыкании кнопок резистор R2 оказывается включенным параллельно с резисторами делителя. Чтобы он не влиял на уровень напряжения на входе АЦП, его значение выбирают довольно большим. Резистор R1 предназначен для ограничения величины входного тока в случае если вывод контроллера окажется в режиме цифрового входа и будет нажата кнопка S5.

Рис. 5

  Есть еще один вариант подобной схемы приведен на рис. 6. Здесь с помощью кнопок определенные резисторы делителя напряжения коммутируются на землю.

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

Рис. 6

Продолжение следует…

 

keybrd/tutorial_4b_split_keyboard_with_shift_registers.md на мастере · wolfv6/keybrd · GitHub

Когда вы закончите это руководство, вы сможете изменить скетч с разделенной клавиатурой с 10-24 клавишами в сдвиговых регистрах.

Обзор раздельной клавиатуры со сдвиговыми регистрами

Макетная плата на следующем рисунке моделирует разделенную клавиатуру.
Зеленый прямоугольник слева — это микроконтроллер Teensy LC.
Черные прямоугольники в середине — это два последовательно соединенных регистра сдвига SN74HC165N.
Микроконтроллер и сдвиговые регистры соединены 5 перемычками.

Показана только правая матрица. Левая матрица не нужна для этой демонстрации и была опущена, чтобы уменьшить беспорядок.

Правоматричная компоновка имеет 2 строки и 7 столбцов.
В электронном виде имеется только один ряд клавиш.
Диоды не нужны, потому что там всего один ряд.

Создание разделенной макетной клавиатуры со сдвиговыми регистрами

Добавьте компоненты на макетную плату, как показано на рисунке.
Обратитесь к техническому описанию SN74HC165N, чтобы найти его контакты.

На рисунке контакты 1 SN74HC165N расположены слева, по направлению к контроллеру.
Сдвиговые регистры соединены цветными проводами, которые ровно лежат на макетной плате.

Каждый сдвиговый регистр имеет 8 параллельных входных контактов, по 4 с каждой стороны.
14 входных контактов и их ключи подключены к подтягивающему резистору 10k, который заземлен (синяя шина).
2 входных контакта не используются, они заземлены (синяя шина).

Переключатели подключены к питанию (красная шина) и входным контактам сдвигового регистра (перемычки).

В этой таблице указано, что подключается к контактам 74HC165:

74HC165 левый (нижняя половина макетной платы)

ИМЯ PIN# ОПИСАНИЕ НА TEENSY LC PIN № ЦЕПЬ
Ш/Л 1 сдвиг или ввод нагрузки CS0 10 зеленый провод
ЦЛК 2 тактовый вход SCK0 13 желтый провод
Д4 3 параллельный ввод
Д5 4 параллельный ввод
Д6 5 параллельный ввод
Д7 6 параллельный ввод
/QH 7 ~последовательный вывод
Земля 8 земля земля синий автобус

74HC165 правая (верхняя половина макетной платы)

Синий провод

ИМЯ PIN# ОПИСАНИЕ НА TEENSY LC PIN № ЦЕПЬ
ВКЦ 16 контакт питания 3,3 В красный провод
КЛК ИНХ 15 блокировка часов синий автобус
Д3 14 параллельный ввод
Д2 13 параллельный ввод
Д1 12 параллельный ввод
Д0 11 параллельный ввод
СЕР 10 серийный ввод синий провод к следующему QH
QH 9 последовательный вывод МИСО0 12 к предыдущему SER

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

Прошу прощения, что не предоставил схему.

Эскиз для раздельной клавиатуры со сдвиговыми регистрами

keybrd_4b_split_keyboard_with_shift_registers.ino — простой скетч с двумя сдвиговыми регистрами.
Он будет работать на приведенной выше макетной клавиатуре.

Упражнения

  1. Угадайте, что произойдет, если неиспользуемый входной контакт не будет заземлен? Попробуй.

Учебное пособие по keybrd от Wolfram Volpi находится под лицензией Creative Commons Attribution 4.0 International License.
Разрешения, выходящие за рамки этой лицензии, могут быть доступны по адресу https://github.com/wolfv6/keybrd/issues/new.

кофе | Wire Jungle

18 сентября 2010 г. · 16:16

Это продолжение статьи о программировании Arduino с помощью Arduino. Я покажу пример процесса на основе таймера кофемашины. Просто напомню первоначальную настройку, при подключении к Arduino она выглядела примерно так:

Таймер кофемашины на основе Arduino

Схема

Вот обновленная схема для автономной установки:

Автономный таймер кофе на базе ATMega8

Файл . sch можно найти здесь.

Вы можете заметить, что новая схема почти идентична оригиналу. Единственными значительными изменениями являются назначение контактов ввода/вывода для упрощения подключения. ИС, управляющая схемой, представляет собой ATMega8. Я выбрал его, так как у меня завалялось несколько, но его можно заменить на ATMega168 или аналогичный. Обратите внимание, что посадочное место здесь использует аннотации выводов Arduino. Это упрощает идентификацию использования программного обеспечения. Вы можете получить часть отсюда.
Примечание : хотя это и не показано явно, сдвиговый регистр 74HC165N должен иметь контакт 8, подключенный к GND, а контакт 16 — к VCC.

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

Вот изображение собранной схемы на макетной плате:

Автономная схема. На одной макетной плате становится немного тесно.

Код

Скетч CoffeMan.pde был обновлен до последней версии Arduino, что делает патч LiquidCrystal излишним. Контакты ввода/вывода переназначены, чтобы соответствовать приведенной выше схеме.

Метод

Сначала настройте станцию ​​программирования, как описано здесь, и поместите автономный чип ATMega в программатор. Кроме того, вы можете подключить Arduino напрямую к автономному модулю, следуя назначению контактов ISP. Если вы используете новый чип, загрузите загрузчик, как описано в шаге №3. Затем выполните шаги № 4–7, чтобы настроить Arduio IDE для загрузки скетчей через программатор. Откройте скетч CoffeeMan.pde и нажмите upload button:

Загрузка скетча с помощью Arduino IDE через программатор

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

Добавление последовательного доступа

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

FTDI USB-RS232, подключенный к Arduino в качестве базовой последовательной консоли

Заголовок FTDI USB-RS232 перекрестно соединен с микросхемой Arduino. Это означает, что FTDI TXO (контакт 4) подключен к Aruino RX (контакт 2). FTDI RXI (контакт 5) подключен к контакту Arduino TX (контакт 3).
Примечание : Контакт 3 FTDI может использоваться как контакт питания 5 В. Не подключать к входному напряжению .

При подключении кабеля/разветвителя FTDI к USB-порту будет зарегистрирован новый последовательный порт. Вы можете начать с эскизов со стандартными Serial.begin(…) и общайтесь в обычном режиме, как с Arduino.

Дополнительным бонусом является возможность загрузки скетчей в чип через загрузчик прямо из Arduino IDE. Для этого вам нужно выполнить несколько шагов:

  1. Записать загрузчик с помощью программатора, как показано выше
  2. Вернуть файл настроек Arduino IDE для использования загрузчика в качестве метода загрузки
  3. Подключите кнопочный переключатель между GND и контактом сброса Arduino (контакт № 1 на ATMega)
  4. Откройте среду разработки Arduino и найдите последовательный порт FTDI в разделе Инструменты Последовательный порт
  5. .

  6. Загрузите свой эскиз
  7. Удерживая кнопку сброса, нажмите «Загрузить».
  8. Отпустить кнопку сброса
  9. Надежда на лучшее…

Процедура ручного сброса может сильно раздражать. На странице продукта Sparkfun на разъеме FTDI можно использовать контакт DTR (контакт 6) на разъеме FTDI для автоматического сброса чипа для загрузки скетча. У меня это не совсем работает, но я опубликую обновление, если у меня все получится.

Заключение

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

2 октября 2009 г. · 20:00

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

Прототип построен на макетной плате. Вот картинка с обозначениями кнопок:

Usage

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

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

Установка часов

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

Установка будильника

Чтобы включить будильник, нажмите кнопку будильник .

Тревога включена

Плата


ЖК-дисплей 16×2 подключается напрямую к Arduino в 4-битном режиме. В коде используется стандартная ЖК-библиотека, входящая в состав Arduino IDE (с некоторыми изменениями, см. ниже в разделе кода).
Кнопки управления подключены через 8-битный сдвиговый регистр. Первоначальной целью было использовать регистр сдвига, чтобы иметь больше доступных выходов. В окончательном дизайне используется всего 5 кнопок, поэтому его можно легко исключить (правда, код нужно обновить).
Ниже приведена схема в формате изображения. Файл .sch для орла см. здесь.

Схемы Eagle для проекта кофе-таймера

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

Список деталей довольно короткий:

  • 1 ЖК-дисплей, совместимый с HD44780 (я использовал 2×16)
  • 1 Регистр сдвига 74HC165N
  • 5 Мгновенные сенсорные выключатели
  • 5 резисторов 10 кОм
  • 1 Резистор 1,8 кОм (для реле)
  • 1 Транзистор NPN 5 В
  • 1 Диод (обычный стеклянный)
  • 1 Реле 5VDC 10A (я использовал очень дешевое твердотельное реле, 6VDC тоже подойдет). 10A — это перебор для большинства применений, хороший расчет можно найти здесь
  • .

Код

Загрузите исходники (zip-архив) здесь.

Исходный код содержит две библиотеки помимо самого апплета. Первым делом я добавил в библиотеку LiquidCrystal две функции:

  • setCursorMode — Позволяет мигать символом. Используется при установке часов/минут.
  • setCustomChar — Контроллер HD44780 позволяет установить до 8 пользовательских символов. Они используются в символе будильника и для символов кофейной кружки
  • .

В архиве находятся файлы замены для LiquidCrystal.h и LiquidCrystal.cpp. Чтобы использовать его, найдите библиотеку LCD в Arduino IDE (обычно это arduino-0015/hardware/libraries/LiquidCrystal/). Замените файлы на прилагаемые или используйте патч.

Еще одна библиотека поставляется в архиве. Эта библиотека управляет сдвиговым регистром 64HC165N. Вероятно, он должен работать с любым 8-битным регистром сдвига в стиле 165. Для использования просто выгрузите файлы по пути библиотеки Arduino IDE (обычно arduino-0015/hardware/libraries/).

Наконец, исходный код, работающий на контроллере, называется CoffeeMan.pde. Откройте его с помощью Arduino IDE и загрузите в свой контроллер.

Код достаточно закомментирован. Надеюсь, читабельно. Если требуется дополнительная информация, оставьте комментарий.

Что дальше

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

Во-первых, пока есть пара проблем с дизайном. Используемый здесь дисплей слишком велик для практического использования. 2×12 будет достаточно. Хотя это не кажется массовым продуктом, его можно приобрести у нескольких поставщиков (здесь, здесь или в больших количествах). Даже 2×8 достаточно, чтобы показать время и некоторую графику, но это может быть слишком компактно.

Еще одна проблема связана с разъемом. Кажется логичным, что реле будет находиться в машине, а кабель будет подключен к контроллеру. Одним из возможных вариантов является использование монофонического разъема 3,5 мм (аналогичный тем, которые используются в микрофонах).

Наконец, плата должна быть переработана как самостоятельная, это было сделано раньше. Минимальный подход в этом случае слишком ограничителен, поскольку схеме потребуется внешний кристалл (если часы должны быть хоть сколько-нибудь точными).
Использование ATMega8 вместо Arduino 168 кажется очень логичным, поскольку используемое кодовое пространство весьма минимально (инструкции 4K).

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

10 июля 2009 г. · 12:00

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

Вот изображение кофемашины со снятой нижней панелью (крепится тремя Т-образными винтами):

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

Электрическая мощность всей машины составляет 800 Вт. Поскольку я собираюсь включить переключатель всего на секунду или две, стандартное реле 5 В постоянного тока подойдет.

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

Реле дешевое 5V SSR (твердотельное реле). Это стоило менее 2$ и

. Чтобы проверить реле, я выдернул +5V и GND из питания Arduino. Работает как шарм. Когда реле срабатывает, кнопка замыкает цепь и запускает процесс приготовления кофе.

Поскольку цифровой выходной контакт Arduino имеет очень низкое напряжение (~ 1,5 В), я подключу реле через транзистор. В Интернете есть несколько хороших ресурсов:

  • . Инструкции: подключение реле 12 В к Arduino 9.0258
  • Марка: подключение реле к Arduino
  • Гардуино

19 июня 2009 г. · 22:49

В прошлом месяце я получил свою плату Arduino Duemilanove. Пройдя несколько базовых уроков, я решил начать свой первый простой проект. Почему бы не автоматизировать мою верную кофеварку? Было бы приятно просыпаться со свежей чашкой.

Некоторые кофемашины можно запрограммировать на подачу в желаемое время. Моя модель простая, с выключателем. Это означает, что мне понадобится реле, чтобы «нажимать» кнопку, и некоторая логика хронометража, чтобы установить будильник на время.

Эскиз идеи:

Примечания

Для ЖК-дисплея я планирую использовать ЖК-дисплей, совместимый с HD44780, поскольку есть возможность использовать существующую библиотеку Arduino.

Будет 5 кнопок управления:

  • Включение/выключение будильника
  • Установка режима (ЧЧ/ММ)
  • Плюс
  • Минус
  • Установить будильник/установить время

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

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

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