Arduino сдвиговый регистр кнопки

Сдвиговый регистр 74hc165 ардуино. Входы ардуино

Сегодня рассмотрим пример подключения 20 кнопок к 4 контактам Ардуино используя сдвиговый регистр 74HC165. В следующем видео я объединю оба, а на выходе включать реле, светодиоды или сегментные индикаторы так же в любом количестве, используя всего 7 контактов Ардуино.

После выхода первой части меня стали спрашивать, а зачем нам столько входов, кстати никто не спросил зачем столько выходов. Отвечаю.
Ну во-первых самый напрашиваемый пример — это клавиатура на любое количество кнопок. И это не резистивная клавиатура, которая работает мягко говоря не очень.
Второе это цифровые датчики. Что такое цифровой датчик если не кнопка. Где на выходе или есть сигнал или его нет.
Третье – можно собрать музыкальный инструмент, например пианино. Хотя это тоже относится к первому примеру.
Ну и четвёртый – я давно обещал знакомым сделать лазерный тир, где в качестве входов будут фоторезисторы, а в качестве выходов светодиоды загорающиеся в месте попадания луча и семисегментного индикатора, для подсчёта очков.
Примеров можно приводить ещё очень много. Включите фантазию.

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

Для Увеличения потребуется 4 входа на Ардуино. Одна такая микросхема способна добавить 8 входов, 2 уже 16, 3- 24 и так далее. А задействовано будет всего 4 вывода, независимо от количества входов.

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

Рассмотрим пример работы.
По умолчанию все кнопки подключены к плюсу питания, и резистором на 10 ком подтянуты к земле, чтобы когда кнопка не нажата на ней был не случайный, а нулевой уровень. Это можно узнать, по синему квадрату на кнопке. Если уровень не определён квадрат будет серый, а если уровень высокий, то красный.

Посмотрим на примере.
Сейчас у меня зафиксирована кнопка номер 18. На неё поступает высокий уровень, и он так же поступает на регистр который соединён с этой кнопкой. Это видно по красному квадрату. Отключаем кнопку и сигнал пропадает, становится низким и синим.
Тоже проделаем с 20 кнопкой. Нажимаем и отпускаем. Сигнал передаётся. Так что схема у нас получилась рабочая. Немного потестим и приступим к разбору как это получилось и что для этого надо.

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

1— это защёлка. При подаче сигнала LOW данные считываются во внутренний регистр, а при HIGH подача прекращается, защёлка закрываем.
15— это тактирование. Когда на нём 0, то продвигает полученные данные на одну ячейку вперёд.

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

Теперь их надо подключить к Ардуино.
Я в скетче прописал, что они будут подключены ко входам 4, 5, 6 и 7. Как и в предыдущем примере мы не будем тянуть линии связи через весь экран, а воспользуемся для этого контактами, а в свойствах пропишем в качестве названия пины к которым их надо подключить.

Теперь тоже самое проделаем и с микроконтроллером. Для подключения будем использовать порт D. Просто к нему ближе всего по схеме и там есть свободное место. Создаём 4 контакта и в свойствах прописываем с чем они будут связаны.

Идём дальше. В предыдущем видео я кнопки подключил к земле, но немного подумав решил, что лучше подключить их к плюсу питания. Поэтому удалил все земли.
Подключаем один вывод кнопки к питанию. В качестве питания выбираем источник VCC.
Теперь включим симуляцию и проверим как работают кнопки. На выводе который подключен к плюсу питания должен быть красный квадрат – это символ того что с этой стороны на кнопке +5 вольт, а на другой стороне серый квадрат. Как я уже говорил – это символ того, что на контакте неопределённый или по другому подвешенный контакт. И на нём может быть и плюс и земля, всё зависит от наводок. Это неправильно и потом мы это исправим. Нажав на кнопку на этом выводе появляется красный квадрат – высокий уровень + 5 вольт. Если у вас так же , то можете переходить дальше, а если нет, то проверьте, возможно у вас на схеме нет соединения.
На другой вывод кнопки повесим контакт а в свойствах дадим ему имя такое же как и кнопка которой он принадлежит. Потом мы эти контакты соединим со входами микросхемы сдвигового регистра.

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

Что бы в не нажатом состоянии кнопка имела определённое значение, её надо или прижать к + питания или стянуть к земле. К плюсу прижимать нам нет смысла, так как кнопка при нажатии и так будет иметь высокий уровень, то есть + 5 вольт и тогда она никогда не изменит своего значения. Остаётся стянуть её к земле.
Тогда в выключенном состоянии кнопка будет иметь стабильный низкий уровень, то есть 0, а при включении изменит своё состояние на Высокий уровень, +5 вольт.
Для этого используем внешний резистор на 10 ком. Одним концом подключим его к выводу кнопки, а другим к земле. У резистора довольно большое сопротивление, и оно не будет влиять в тот момент когда кнопка нажата и на ней будет + 5 вольт, и вполне достаточное для того что бы в выключенном состоянии на вывод поступал низкий уровень питания, или попросту земля.

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

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

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

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

Источник

RoboCraft

Теперь попробуем считать состояние нескольких кнопок через другой сдвиговый регистр, предназначенный для ввода — 74HC165, модель SN74HC165N от Texas Instruments. Этот регистр, в отличие от рассмотренного ранее 74HC595, работает наоборот — преобразует параллельный интерфейс в последовательный. Но порядок работы немного другой: сначала дёргается линия SS вниз-вверх — состояния входов «защёлкиваются» во внутренний регистр, а уже потом идёт тактирование по SCLK и передача данных по MISO.

Чтобы понять, как работает регистр, взглянем на его схему:

Вход SH/L͞D (сдвиг/загрузка) управляет занесением состояний входов в триггеры — так называемой параллельной загрузкой: стоит прижать его к «земле», как состояние входов регистра будет подано на S-входы триггеров. Чтобы отключить триггеры от входов регистра и иметь возможность читать из регистра, нужно установить SH/L͞D в 1. Тактирование происходит при переходе CLK из 0 в 1 при условии, что SH/L͞D = 1 (параллельная загрузка отключена), а CLK INH = 0 (тактирование включено). При каждом «тике» CLK каждый триггер проталкивает бит в следующий триггер, захватывая бит со своего 1D-входа. Так как к 1D-входу первого триггера подключен вход SER, то подаваемые на него биты проталкиваются в регистр, позволяя соединять регистры в цепочки. В конечном итоге проталкиваемые биты достигают выхода последнего регистра, где подаются сразу на два вывода — на QH и, через инвертор, на Q͞H.

А вот и сам регистр в DIP-корпусе:

  • Vcc — питание
  • GND — земля
  • SH/L͞D — защёлка, SS (SPI)
  • CLK — тактовый вход, SCLK (SPI)
  • A-H — входы, состояние которых считывается в регистр
  • QH — последовательный вывод, MISO (SPI)
  • Q͞H — инверсный вывод, на нём идут биты с QH, но инвертированные
  • SER — последовательный ввод; к нему можно подсоединить вывод QH второго регистра, получив каскадное подключение
  • CLK INH — Clock Inhibit, или инвертированный Clock Enable; когда на нём 1, тактирование выключено

Попробуем считать состояние 8 кнопок, подключенных к выводам A-H регистра. Для этого подключим выводы следующим образом:

Кнопки сажаем на выводы A-H, подтягивая к питанию резисторами на 10 кОм, и на землю:

Получилась такая каша из проводов, что мои mad skillz в делах рисовальных не помогли, так что постарайтесь как-нибудь догадаться, что куда идёт (:

Лепить на макетку ещё и светодиоды было бы слишком, поэтому состояния кнопок будем слать по UART и смотреть через Serial Monitor. Поехали:

С каскадным подключением история такая же, как и с 74HC595, только здесь вывод QH второго регистра подключается к выводу SER первого и т.п. Или, как вариант, использовать выводы Q͞H вместо QH, если нужно считать много кнопок, подтянутых к питанию.

Исходник примера доступен для скачивания напрямую и на GitHub в репозитории.

Картинки из статьи лежат в альбоме на Яндекс.Фотках.

  • Сдвиговый регистр 74HC165, модель SN74HC165N
  • Arduino-совместимая плата CraftDuino, удобные провода и макетка
  • Резисторы 510 Ом, кнопки

Источник

Arduino.ru

Можно ли подключить кнопки с помощью сдвигового регистра?

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

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

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

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

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

pcf8574 вам в помощь

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

Будут ли полезны сдвиговые регистры?

А чё? Гугл тоже заблокировали? Я думал только яндекс.

Вот как раз про кнопки на сдвиговом регистре — http://robocraft.ru/blog/arduino/520.html

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

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

Или Вы под сенсорками понимаете не емкостные кнопки?

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

А, да, виноват, был невнимателен.

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

Уважаемый avex формулируйте ваш запрос более конкретно, а то тут возникают разночтения в понимании того что вы хотели спросить. Итак, как я понял возможно 2 варианта:

1. Вам необходимо повесить очень много обычных тактовых кнопок, тогда вам в помощь регистры 74HC165, 74HC166, расширители портов ввода-вывода: TCA9XXX, PCA9XXX. Например 16-ти битный расширитель портов ввода-вывода PCA9555.

2. Вам нужно именно подключить большое количество сенсорных кнопок, ну тогда можно использовать специализированные микросхемы, типа AT42QT2160 или построить контроллер сенсорных кнопок например на ATTINY2313A, в принципе можно реализовать на нем контроллер на 8 кнопок (понятно 20 выводов минус 2 питания, минус 2 кварц, минус 1 резет, минус как минимум 2 для интерфейса связи, минус 3-4 для задания адреса (если данный контроллер будет не один)). Можно использовать другие контроллеры, с большим количеством выводов, например в ATMEGA328 — 23 пина PCINT, из них минус 1 на резет, минус 2 на кварц, минус 2 на интерфейс связи, минус 2 на задания адреса — итого контроллер на 16 сенсорных кнопок.

Источник

Всё о сдвиговом регистре

Ардуино: всё о сдвиговом регистре

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

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

В электронике регистром называют устройство, которое может хранить небольшой объем данных для быстрого доступа к ним. Они есть внутри каждого контроллера и микропроцессора, включая и микроконтроллер Atmega328 — сердце Ардуино Уно. Как правило регистры представляют собой сборку из D-триггеров — элементарных ячеек памяти, с которыми мы уже встречались в отдельном уроке. Записывать данные в регистр можно либо последовательно, либо параллельно. Регистры первого типа называются сдвиговыми, второго типа — параллельными.

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

Источник

Adblock
detector