Страница 2 из 6
Re: Подключить многог кнопок на мало выводов.
Добавлено: Ср июл 01, 2026 09:28:40
veso74
MAX7370 - незначительное потребление, автоматический переход в спящий режим, макс 64-кн. клавиатура, подавление дребезга, статическая работа (без шума при сканировании), INT, по I2C. Подключаем, отслеживаем INT и считываем нажатые кнопки. Все в одном.
---
Бы собрал драйвер с использованием внешнего др. микроконтроллера: скажем, недорогого CH32V.
Re: Подключить многог кнопок на мало выводов.
Добавлено: Ср июл 01, 2026 09:31:18
petrenko
linux_rulezz писал(а): Ср июл 01, 2026 09:19:54
А в чем проблема контроля нажатия хоть всех кнопок одновременно?
Скажем, ряды клавиш подключаем к ногам МК напрямую, а по столбцам пускаем "сканирующую единицу" хоть сдвиговым регистром… За несколько микросекунд можно всю матрицу таким образом просканировать.
Taм выводов маловато, вот почему он и вопрошает, что делать.
veso74 писал(а): Ср июл 01, 2026 09:28:40
MAX7370 - незначительное потребление, автоматический переход в спящий режим, макс 64-кн. клавиатура, подавление дребезга, статическая работа (без шума при сканировании), INT, по I2C. Подключаем, отслеживаем INT и считываем нажатые кнопки. Все в одном.
Xopoший вариант.
Re: Подключить многог кнопок на мало выводов.
Добавлено: Ср июл 01, 2026 10:11:55
BOB51
Я всего лишь принцип решения показал.
Кстати... Что одиночное, что групповое нажатие в таком случае регистрируется - разница только в программной обработке.

Да и по количеству выводов и подобию их функционала
АТ90S2313 ~ATtiny2313~AT89C(S)2051/4051
Хотя эти МК и из разных семейств, но решения в обвязке могут быть аналогичны.
Подключить многогого кнопок на малололо выводов.
Добавлено: Ср июл 01, 2026 15:45:48
petrenko
BOB51 писал(а): Ср июл 01, 2026 10:11:55
принцип решения показал ..
С сем принципом полностью согласен - это работает .
Просто я тут надысь перечитал "дайджест патентов" п.р.Шевкопляса ..
Была там мысль как раз до 12 кнопок определять задействованием ацп(~aka~adc) и всего трёх выводов
,и сие возможно слегка доработать и для 2313 ,раз уж там есть компаратор.
Но коллега изъ Българии уже подсказал вполне хорошее рашение.
Re: Подключить многог кнопок на мало выводов.
Добавлено: Ср июл 01, 2026 16:27:44
BOB51
Исходная железяка и ее задачи/схемная обвязка нам неизвестна - так что остается только общие положения предлагать.
Может там компаратор еще для чего используется - это неведомо...
Я бы предложил
Призрачному Суслику для коллекции на книжну полку три книжи Рюмика С.М. "1000 и одна микроконтроллерная схема", да сундука кота пока нет в доступе, а где еще их скачать... сейчас сложно сказать...

Re: Подключить многог кнопок на мало выводов.
Добавлено: Ср июл 01, 2026 18:36:45
Zapolyarny
BOB51 писал(а): Ср июл 01, 2026 16:27:44
три книжи Рюмика С.М. "1000 и одна микроконтроллерная схема"
Совет хороший, но поправлю: 4 тома.
Re: Подключить многог кнопок на мало выводов.
Добавлено: Ср июл 01, 2026 18:47:21
BOB51
Уже 4??
надо поискать тот 4й... У меня только 3 в коллекции...

Re: Подключить многог кнопок на мало выводов.
Добавлено: Пт июл 03, 2026 10:55:54
jcxz
Призрачный Суслик писал(а): Пн июн 29, 2026 23:51:07Надо дополнительно подключить к нему 12 условных "кнопок". Все кнопки на замыкание. Может быть одновременно нажато любое количество "кнопок".
Без схемы разговор будет пустой.
Re: Подключить многог кнопок на мало выводов.
Добавлено: Пт июл 03, 2026 12:16:48
Призрачный Суслик
ejsanyo писал(а): Вт июн 30, 2026 09:24:54
Чего там "дюжить"? В интернетах навалом готовых вариантов, спросите у нейросети "i2c bitbang avr example".

Даже в Codevision издревле готовая, стабильно работающая библиотека есть.
Были бы ещё "интернеты" эти а то включают на несколько часов раз в неделю. Но это не особо относится к теме. Просто программист такой, "студент". Других нет, а этому надо всё на пальцах разжевывать, а я сам в I2C пока плаваю.
ejsanyo писал(а): Вт июн 30, 2026 09:24:54
Как вы так поняли? I2C ноги придётся самостоятельно подтянуть к плюсу. Ногу выхода прерывания нужно также самому подтянуть к плюсу. А ноги "вводавывода" как раз сами всё тянут, все 8 штук. Принцип у них такой же, как был, например, в портах 8051-ых контроллеров. Зафигачиваете за напись 0xFF, все ноги подтягиваются, дальше читаете порт - ноги, которые вашими кнопками сели на землю, прочитаются нулями, а остальные по прежнему единицами.
Не очень понятно. Если порт работает на выход, то замыкание его на землю может сжечь выходной транзистор. Или вы имеете ввиду, что бы "общий" провод кнопок соединялся с отдельный выводом на вход и через резистор на "землю" ?
Re: Подключить многог кнопок на мало выводов.
Добавлено: Пт июл 03, 2026 12:18:31
Призрачный Суслик
Zapolyarny писал(а): Вт июн 30, 2026 11:58:11
В любом случае, подобные манипуляции надо описывать сразу, а не в процессе. Без чёткого озвучивания ТЗ ничего путного не выйдет, а советовать что-то - зря тратить время.
Ну так не советуйте.

Re: Подключить многог кнопок на мало выводов.
Добавлено: Пт июл 03, 2026 12:21:41
Призрачный Суслик
Смотрел. Но, судя по всему, в РФ не поставляется. 7-8 недель у Чип и Дип , это примерно: "У нас нет, но если закажите пару тысяч штук, то мы может попробуем привезти".
Re: Подключить многог кнопок на мало выводов.
Добавлено: Пт июл 03, 2026 12:23:48
Призрачный Суслик
veso74 писал(а): Вт июн 30, 2026 12:04:56
Если есть программист, скажите ему: "Нужно еще 12 кнопок". Он (вероятно) найдет способ.
Увы, не найдёт.
veso74 писал(а): Вт июн 30, 2026 12:04:56
Лично бы перенес старое устройство на новый MK (с большим количеством пинов (32, 48, 64) и бесконечно большими возможностями).
Это готовые устройства, в количестве, которые надо доработать "минимальной кровью".
Re: Подключить многог кнопок на мало выводов.
Добавлено: Пт июл 03, 2026 12:27:01
Призрачный Суслик
linux_rulezz писал(а): Ср июл 01, 2026 09:19:54
А в чем проблема контроля нажатия хоть всех кнопок одновременно?
Скажем, ряды клавиш подключаем к ногам МК напрямую, а по столбцам пускаем "сканирующую единицу" хоть сдвиговым регистром… За несколько микросекунд можно всю матрицу таким образом просканировать.
Надо еще формировать сигнал прерывания при нажатии любой "кнопки". Хотя это не очень "кнопки", а дополнительные контактные группы у реле/пускателей.
Re: Подключить многог кнопок на мало выводов.
Добавлено: Пт июл 03, 2026 12:29:46
Призрачный Суслик
jcxz писал(а): Пт июл 03, 2026 10:55:54
Призрачный Суслик писал(а): Пн июн 29, 2026 23:51:07Надо дополнительно подключить к нему 12 условных "кнопок". Все кнопки на замыкание. Может быть одновременно нажато любое количество "кнопок".
Без схемы разговор будет пустой.
Пока возможности загрузить картинки не имею. Появится "нормальный интернет" - всё будет.
Re: Подключить многог кнопок на мало выводов.
Добавлено: Пт июл 03, 2026 12:40:33
ejsanyo
Призрачный Суслик писал(а): Пт июл 03, 2026 12:16:48
Не очень понятно. Если порт работает на выход, то замыкание его на землю может сжечь выходной транзистор.
Ну яж говорю, там выходы как у 8051-ых контроллеров, "квазидвунаправленные"! Ни разу такое не видели?

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

Re: Подключить многог кнопок на мало выводов.
Добавлено: Пт июл 03, 2026 13:14:20
jcxz
linux_rulezz писал(а): Пт июл 03, 2026 13:09:45Зачем? Нужна микросекундная точность что ли?
Работа по прерываниям нужна как правило для энергосбережения.
Re: Подключить многог кнопок на мало выводов.
Добавлено: Пт июл 03, 2026 13:21:29
BOB51
При "матрице кнопок", сканируемой разверткой динамической индикации дисплея, достаточно опрашивать линию возврата в середине времени активности каждого позиционного ключа строки развертки индикатора.
Получим байт данных соответствующий нажатым кнопкам. Время всей развертки даст интервал антидребезга для двух последовательных проходов сканирования кнопок. Исполнение при двух - трех непрерывно следующих совпадениях данных (по нажатию) или при разрушении совпадения/подтверждению статуса "все отпущены" (по отпусканию).

Re: Подключить многог кнопок на мало выводов.
Добавлено: Пт июл 03, 2026 13:26:42
Rapra
Есть еще клавиатура на резистивной матрице делителя напряжения. Такую клавиатуру раньше любили использовать в бытовой технике и во всяких автомафонах. Подаётся на вход АЦП, для каждой кнопки и комбинации кнопок свое уникальное значение напряжения.
Кондеры, компараторы, хитрые алгоритмы - нет, не нужны. Простой делитель напряжения.
