Подключить много кнопок на мало выводов.

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить
Поставщик валерьянки для Кота
Сообщения: 1921
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария

Сообщение veso74 »

MAX7370 - незначительное потребление, автоматический переход в спящий режим, макс 64-кн. клавиатура, подавление дребезга, статическая работа (без шума при сканировании), INT, по I2C. Подключаем, отслеживаем INT и считываем нажатые кнопки. Все в одном.
---
Бы собрал драйвер с использованием внешнего др. микроконтроллера: скажем, недорогого CH32V.
Последний раз редактировалось veso74 Ср июл 01, 2026 09:42:46, всего редактировалось 1 раз.
Контактная информация:
Реклама
Друг Кота
Сообщения: 5395
Зарегистрирован: Вт фев 21, 2012 13:51:55
Откуда: Начинающий

Сообщение petrenko »

linux_rulezz писал(а): Ср июл 01, 2026 09:19:54 А в чем проблема контроля нажатия хоть всех кнопок одновременно?
Скажем, ряды клавиш подключаем к ногам МК напрямую, а по столбцам пускаем "сканирующую единицу" хоть сдвиговым регистром… За несколько микросекунд можно всю матрицу таким образом просканировать.
AT90S2313-704621361.gif
(7.23 КБ) 7 скачиваний
Taм выводов маловато, вот почему он и вопрошает, что делать.
Изображение
veso74 писал(а): Ср июл 01, 2026 09:28:40 MAX7370 - незначительное потребление, автоматический переход в спящий режим, макс 64-кн. клавиатура, подавление дребезга, статическая работа (без шума при сканировании), INT, по I2C. Подключаем, отслеживаем INT и считываем нажатые кнопки. Все в одном.
Xopoший вариант.
< виртуальная "кнопочка" >--( WWW ) <- Убедительная просьба интересующимся старыми компьютерами типа РК86 - не пишите в теме в барахолке, пишите Ваши вопросы в ( лс ) пожалуйста
Контактная информация:
Реклама
Друг Кота
Аватара пользователя
Сообщения: 15657
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Я всего лишь принцип решения показал.
Кстати... Что одиночное, что групповое нажатие в таком случае регистрируется - разница только в программной обработке.
8)
Да и по количеству выводов и подобию их функционала
АТ90S2313 ~ATtiny2313~AT89C(S)2051/4051
Хотя эти МК и из разных семейств, но решения в обвязке могут быть аналогичны.
Друг Кота
Сообщения: 5395
Зарегистрирован: Вт фев 21, 2012 13:51:55
Откуда: Начинающий

Сообщение petrenko »

BOB51 писал(а): Ср июл 01, 2026 10:11:55 принцип решения показал ..
С сем принципом полностью согласен - это работает . :beer:

Просто я тут надысь перечитал "дайджест патентов" п.р.Шевкопляса ..
Была там мысль как раз до 12 кнопок определять задействованием ацп(~aka~adc) и всего трёх выводов
,и сие возможно слегка доработать и для 2313 ,раз уж там есть компаратор.
Но коллега изъ Българии уже подсказал вполне хорошее рашение.
< виртуальная "кнопочка" >--( WWW ) <- Убедительная просьба интересующимся старыми компьютерами типа РК86 - не пишите в теме в барахолке, пишите Ваши вопросы в ( лс ) пожалуйста
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Друг Кота
Аватара пользователя
Сообщения: 15657
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Исходная железяка и ее задачи/схемная обвязка нам неизвестна - так что остается только общие положения предлагать.
Может там компаратор еще для чего используется - это неведомо...
:dont_know:
Я бы предложил Призрачному Суслику для коллекции на книжну полку три книжи Рюмика С.М. "1000 и одна микроконтроллерная схема", да сундука кота пока нет в доступе, а где еще их скачать... сейчас сложно сказать...
:(
Реклама
Потрогал лапой паяльник
Сообщения: 398
Зарегистрирован: Чт май 07, 2026 00:30:38

Сообщение Zapolyarny »

BOB51 писал(а): Ср июл 01, 2026 16:27:44 три книжи Рюмика С.М. "1000 и одна микроконтроллерная схема"
Совет хороший, но поправлю: 4 тома.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 15657
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Уже 4??
надо поискать тот 4й... У меня только 3 в коллекции...
:(
Мудрый кот
Сообщения: 1758
Зарегистрирован: Вт авг 15, 2017 10:51:13

Сообщение jcxz »

Призрачный Суслик писал(а): Пн июн 29, 2026 23:51:07Надо дополнительно подключить к нему 12 условных "кнопок". Все кнопки на замыкание. Может быть одновременно нажато любое количество "кнопок".
Без схемы разговор будет пустой.
Мучитель микросхем
Сообщения: 414
Зарегистрирован: Ср фев 04, 2026 21:29:19
Откуда: Из норки где-то в России

Сообщение Призрачный Суслик »

ejsanyo писал(а): Вт июн 30, 2026 09:24:54 Чего там "дюжить"? В интернетах навалом готовых вариантов, спросите у нейросети "i2c bitbang avr example". :))) Даже в Codevision издревле готовая, стабильно работающая библиотека есть.
Были бы ещё "интернеты" эти а то включают на несколько часов раз в неделю. Но это не особо относится к теме. Просто программист такой, "студент". Других нет, а этому надо всё на пальцах разжевывать, а я сам в I2C пока плаваю.
ejsanyo писал(а): Вт июн 30, 2026 09:24:54 Как вы так поняли? I2C ноги придётся самостоятельно подтянуть к плюсу. Ногу выхода прерывания нужно также самому подтянуть к плюсу. А ноги "вводавывода" как раз сами всё тянут, все 8 штук. Принцип у них такой же, как был, например, в портах 8051-ых контроллеров. Зафигачиваете за напись 0xFF, все ноги подтягиваются, дальше читаете порт - ноги, которые вашими кнопками сели на землю, прочитаются нулями, а остальные по прежнему единицами.
Не очень понятно. Если порт работает на выход, то замыкание его на землю может сжечь выходной транзистор. Или вы имеете ввиду, что бы "общий" провод кнопок соединялся с отдельный выводом на вход и через резистор на "землю" ?
Мучитель микросхем
Сообщения: 414
Зарегистрирован: Ср фев 04, 2026 21:29:19
Откуда: Из норки где-то в России

Сообщение Призрачный Суслик »

Zapolyarny писал(а): Вт июн 30, 2026 11:58:11 В любом случае, подобные манипуляции надо описывать сразу, а не в процессе. Без чёткого озвучивания ТЗ ничего путного не выйдет, а советовать что-то - зря тратить время.
Ну так не советуйте. :dont_know:
Мучитель микросхем
Сообщения: 414
Зарегистрирован: Ср фев 04, 2026 21:29:19
Откуда: Из норки где-то в России

Сообщение Призрачный Суслик »

Zapolyarny писал(а): Вт июн 30, 2026 16:29:31 Есть чуть скромнее: https://bitcode.com.cn/en/bc6301/ - на 30 кнопок, корпус SO-14.
Смотрел. Но, судя по всему, в РФ не поставляется. 7-8 недель у Чип и Дип , это примерно: "У нас нет, но если закажите пару тысяч штук, то мы может попробуем привезти".
Мучитель микросхем
Сообщения: 414
Зарегистрирован: Ср фев 04, 2026 21:29:19
Откуда: Из норки где-то в России

Сообщение Призрачный Суслик »

veso74 писал(а): Вт июн 30, 2026 12:04:56 Если есть программист, скажите ему: "Нужно еще 12 кнопок". Он (вероятно) найдет способ.
Увы, не найдёт.
veso74 писал(а): Вт июн 30, 2026 12:04:56 Лично бы перенес старое устройство на новый MK (с большим количеством пинов (32, 48, 64) и бесконечно большими возможностями).
Это готовые устройства, в количестве, которые надо доработать "минимальной кровью".
Мучитель микросхем
Сообщения: 414
Зарегистрирован: Ср фев 04, 2026 21:29:19
Откуда: Из норки где-то в России

Сообщение Призрачный Суслик »

linux_rulezz писал(а): Ср июл 01, 2026 09:19:54 А в чем проблема контроля нажатия хоть всех кнопок одновременно?
Скажем, ряды клавиш подключаем к ногам МК напрямую, а по столбцам пускаем "сканирующую единицу" хоть сдвиговым регистром… За несколько микросекунд можно всю матрицу таким образом просканировать.
Надо еще формировать сигнал прерывания при нажатии любой "кнопки". Хотя это не очень "кнопки", а дополнительные контактные группы у реле/пускателей.
Мучитель микросхем
Сообщения: 414
Зарегистрирован: Ср фев 04, 2026 21:29:19
Откуда: Из норки где-то в России

Сообщение Призрачный Суслик »

jcxz писал(а): Пт июл 03, 2026 10:55:54
Призрачный Суслик писал(а): Пн июн 29, 2026 23:51:07Надо дополнительно подключить к нему 12 условных "кнопок". Все кнопки на замыкание. Может быть одновременно нажато любое количество "кнопок".
Без схемы разговор будет пустой.
Пока возможности загрузить картинки не имею. Появится "нормальный интернет" - всё будет.
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 165
Зарегистрирован: Чт апр 28, 2016 22:33:47
Откуда: ARPA Internet

Сообщение ejsanyo »

Призрачный Суслик писал(а): Пт июл 03, 2026 12:16:48 Не очень понятно. Если порт работает на выход, то замыкание его на землю может сжечь выходной транзистор.
Ну яж говорю, там выходы как у 8051-ых контроллеров, "квазидвунаправленные"! Ни разу такое не видели? :?
Изображение
Выход не "пушпульный", а тянет только на землю. И на его выход сразу прикручен порт ввода. Резюки подтяжки встроены в чип.
Хоронили кваку - порвали три Rocket Launcherа.©
Опытный кот
Аватара пользователя
Сообщения: 721
Зарегистрирован: Пн сен 15, 2025 08:43:23
Откуда: Маленький СССР посреди террористов

Сообщение linux_rulezz »

Призрачный Суслик писал(а): Пт июл 03, 2026 12:27:01Надо еще формировать сигнал прерывания при нажатии любой "кнопки".
Зачем? Нужна микросекундная точность что ли?
Windows must die!
Контактная информация:
Мудрый кот
Сообщения: 1758
Зарегистрирован: Вт авг 15, 2017 10:51:13

Сообщение jcxz »

Призрачный Суслик писал(а): Пт июл 03, 2026 12:27:01Надо еще формировать сигнал прерывания при нажатии любой "кнопки". Хотя это не очень "кнопки", а дополнительные контактные группы у реле/пускателей.
Глянул ваш МК - там есть компаратор. Тогда можно наверное сделать на нём. Понадобится только одна нога (компаратора). На ногу вешаем кондёр (второй электрод кондёра = GND). И подключаем к этой же ноге параллельно все кнопки (с последовательным резистором у каждой).
Алгоритм: На какое-то короткое время переключаем ногу на вывод и выводим на неё лог."1" - заряжаем кондёр (ток заряда ограничить последовательным резистором таким, чтобы не превысить макс. ток ноги). После заряда - ногу переключаем на ввод, активируем функцию компаратора. Если никаких кнопок не замкнуто - заряд будет держаться долго. При нажатии одной или нескольких кнопок - кондёр разряжается через резистор кнопки, и на каком-то уровне заряда срабатывает прерывание от компаратора: входим в ISR; фиксируем время; заряжаем кондёр. Так как кнопка остаётся нажатой - через некоторое время кондёр снова разрядится и снова произойдёт прерывание - вычисляем разницу времени, из которой вычисляем кнопку/кнопки.
Факт нажатия скорее всего нужно определять не по одному интервалу времени. Скорее всего нужно получить 2...4 примерно одинаковых интервала, чтобы достоверно определить сопротивление через которое идёт разряд. Это для исключения влияния переходных состояний при нажатиях/отжатиях.
Резисторы кнопок сделать разными и подобрать такими, чтобы можно было достоверно различать любую нужную комбинацию сопротивлений. Также постоянную времени RC-цепочек (минимальную и максимальную) подобрать такой, чтобы при минимальном допустимом времени удержания нажатой кнопки успело уложиться несколько интервалов опроса.
Конечно, если состояние нажатости может длиться долго, то такой алгоритм не очень хорош с точки зрения энергопотребления. Но если нажатия происходят относительно редко (как обычно бывает с настоящими кнопками), то вполне годный алгоритм.

Я никогда не работал с атмегами, не знаю - можно ли там переключать ногу на ввод/вывод и менять функцию: GPIO/периферийная функция? (на ARM-ах это возможно) Если нельзя, то для зарядки кондёра придётся использовать ещё одну ногу.
Призрачный Суслик писал(а): Пт июл 03, 2026 12:16:48Просто программист такой, "студент". Других нет
Тогда в этом наибольшая сложность. Алгоритм выше может оказаться слишком сложным для него. 8)
Последний раз редактировалось jcxz Пт июл 03, 2026 13:19:52, всего редактировалось 3 раза.
Мудрый кот
Сообщения: 1758
Зарегистрирован: Вт авг 15, 2017 10:51:13

Сообщение jcxz »

linux_rulezz писал(а): Пт июл 03, 2026 13:09:45Зачем? Нужна микросекундная точность что ли?
Работа по прерываниям нужна как правило для энергосбережения.
Друг Кота
Аватара пользователя
Сообщения: 15657
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

При "матрице кнопок", сканируемой разверткой динамической индикации дисплея, достаточно опрашивать линию возврата в середине времени активности каждого позиционного ключа строки развертки индикатора.
Получим байт данных соответствующий нажатым кнопкам. Время всей развертки даст интервал антидребезга для двух последовательных проходов сканирования кнопок. Исполнение при двух - трех непрерывно следующих совпадениях данных (по нажатию) или при разрушении совпадения/подтверждению статуса "все отпущены" (по отпусканию).
:tea:
Вымогатель припоя
Сообщения: 620
Зарегистрирован: Пн фев 16, 2026 17:30:02

Сообщение Rapra »

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

Кондеры, компараторы, хитрые алгоритмы - нет, не нужны. Простой делитель напряжения.
Изображение
Изображение
Ответить

Вернуться в «Разные вопросы по МК»