Страница 5 из 6
Re: Подключить много кнопок на малоДумаю, выводов.
Добавлено: Чт июл 09, 2026 16:11:58
akl
Думаю, у стартера предполагается работа по фронту сигнала. Выходить из прерывания можно по RET. Сам предпочитаю работать по спаду сигнала или по низкому уровню.
Re: Подключить много кнопок на мало выводов.
Добавлено: Чт июл 09, 2026 16:15:21
BOB51
А с какой кнопки нулик то придет?
См. описание подключения - там единичка от "бегущей 1" с позиционных линий на линии возврата и с линий возврата на линию прерывания (я так прочитал...

)...

At90s2313 по фронту прерывания для выхода из сна не воспринимает. Это "старые простейшие" из АВРок. С Аттинькой 2313 не сравнивать!

Это из даташита
Спойлер
"...
Sleep Modes To enter the sleep modes, the SE bit in MCUCR must be set (one) and a SLEEP instruc-
tion must be executed. If an enabled interrupt occurs while the MCU is in a sleep mode,
the MCU awakes, executes the interrupt routine, and resumes execution from the
instruction following SLEEP. The contents of the Register File, SRAM and I/O memory
are unaltered. If a Reset occurs during sleep mode, the MCU wakes up and executes
from the Reset Vector.
Idle Mode When the SM bit is cleared (zero), the SLEEP instruction forces the MCU into the Idle
mode, stopping the CPU but allowing Timer/Counters, Watchdog and the interrupt sys-
tem to continue operating. This enables the MCU to wake up from external triggered
interrupts as well as internal ones like Timer Overflow interrupt and Watchdog Reset. If
wake-up from the Analog Comparator Interrupt is not required, the Analog Comparator
can be powered down by setting the ACD-bit in the Analog Comparator Control and Sta-
tus Register (ACSR). This will reduce power consumption in Idle mode. When the MCU
wakes up from Idle mode, the CPU starts program execution immediately.
..."
млин... даже такой мелкий даташит не прицепить - приходится "выкусь" делать...
А это выкусь из вышеприведенной книжи:
Спойлер
"...
4.3.1. Режим Idle
В этом режиме прекращает работу ЦПУ микроконтроллера, а все осс
тальные периферийные устройства (SPI, UART, таймеры/счетчики, аналоо
говый компаратор, АЦП, сторожевой таймер), а также подсистема прерыы
ваний продолжают функционировать. За счет этого выход из режима Idle
возможен как по внешнему прерыванию, так и по внутреннему, например
при переполнении таймера. Для еще большего уменьшения энергопотребб
ления в режиме Idle рекомендуется отключать встроенный аналоговый комм
паратор, если не требуется выход из «спящего» режима по прерыванию от
компаратора. Аналоговый компаратор отключается установкой в «1» флага
ACD регистра ACSR. Подробно этот регистр будет рассмотрен в главе 7.
Основным преимуществом режима Idle является быстрая реакция на
события, приводящие к «пробуждению» микроконтроллера. Другими слоо
вами, выполнение программы начинается сразу же после перехода из рее
жима Idle в рабочий режим.
4.3.2. Режим Power Down
В режиме Power Down функционирование всех систем микроконтролл
лера, включая тактовый генератор, прекращается. Единственными узлаа
ми, продолжающими работать в этом режиме, являются сторожевой тайй
мер (если он включен) и подсистема обработки внешних прерываний. Соо
ответственно выход из режима Power Down возможен только при возникк
новении одного из трех событий:
• внешний (аппаратный) сброс;
• сброс от сторожевого таймера (при наступлении тайммаута сторожее
вого таймера);
• возникновение внешнего прерывания (для AT90S90C8534 — по
фронту, для остальных моделей — по уровню).
Следует заметить, что при нахождении микроконтроллера в режиме
Power Down прерывание может быть сгенерировано только в результате ус丐
тановки НИЗKОГО уровня на входах внешних прерываний либо в результаа
те изменения уровня на этих входах (для AT90S/LS2333 и AT90S/LS4433).
Сказанное справедливо для всех моделей микроконтроллеров за исключении
ем модели AT90C8534. В этой модели генерация внешних прерываний всее
гда происходит только по фронту сигнала на входе внешнего прерывания.
Для выхода микроконтроллера из режима Power Down по внешнему
прерыванию длительность активного сигнала должна удовлетворять слее
дующим условиям:
• AT90S1200, AT90S2313, AT90S/LS4434, AT90S/LS8535, AT90S4414 и
AT90S8515: длительность импульса НИЗKОГО уровня на входе
внешнего прерывания должна превышать величину задержки сброса
tTOUT (см. раздел 4.4);
• остальные модели: длительность активного сигнала должна быть не
меньше двух периодов сигнала тактового генератора сторожевого
таймера (типовые значения: ≥ 2 мкс при VCC = 5 В и ≥ 5.4 мкс при
VCC = 3 В). Для получения более полной информации по сторожее
вому таймеру обратитесь к главе 6.
Между наступлением события, приводящего к выходу микроконтролл
лера из режима Power Down, и началом работы микроконтроллера прохоо
дит некоторое время, в течение которого тактовый генератор микроконтт
роллера выходит на рабочий режим. По длительности эта задержка равна
задержке сброса tTOUT (см. раздел 4.4).
И, наконец, последнее замечание по поводу прерываний. Если сигнал,
вызвавший «пробуждение» микроконтроллера, исчезнет раньше, чем мии
кроконтроллер перейдет в рабочий режим, обработчик соответствующего
прерывания вызван не будет.
..."

Re: Подключить много кнопок на мало выводов.
Добавлено: Чт июл 09, 2026 19:56:06
Rapra
Да уж, пичалька, когда микроконтроллер весьма древний, а компания-разработчик "едет на подсосе", и даже вместо программиста - всего лишь студент
Re: Подключить много кнопок на мало выводов.
Добавлено: Чт июл 09, 2026 20:53:27
Zapolyarny
Rapra писал(а): Чт июл 09, 2026 19:56:06
и даже вместо программиста - всего лишь студент
И опять возражу Вам, уважаемый
Rapra: печаль не это, а то, что даже нормального ТЗ нет и некому его составить.
Программист у них есть, а вот толкового инженера, который сможет поставить задачу - нет.
Re: Подключить много кнопок на мало выводов.
Добавлено: Чт июл 09, 2026 22:14:18
Starichok51
вот матрица 4х4.
тут у меня нарисован АТмега8, но это не принципиально.
перед уходом в сон:
на колонках ставим 1 - входы с подтяжкой,
на строках ставим 0 - выходы с нулями,
на входе прерывания ставим 1 - вход с подтяжкой.
прерывание настраиваем по спаду уровня и разрешаем его.
когда нажмем любую кнопку, ноль со строки через диод на колонке попадет на вход прерывания - МК проснется.
в обработчике прерывания запрещаем это прерывание.
затем делаем другую настройку портов:
на строках ставим 1 - входы с подтяжкой,
на колонках по очереди ставим 0 - выход с нулем.
далее проверяем на какой строке появился ноль с выбранной колонки, или на каких строках, если в колонке нажато несколько кнопок.
и так повторяем проверки на каждой строке для всех колонок.
и никаких резисторов и прочих наворотов не нужно.
Re: Подключить много кнопок на мало выводов.
Добавлено: Чт июл 09, 2026 23:19:25
Zapolyarny
Starichok51 писал(а): Чт июл 09, 2026 22:14:18
и никаких резисторов и прочих наворотов не нужно.
Если порты работают только на матрицу контактов. А если ещё и на дисплей, то придётся использовать немного резисторов.
Re: Подключить много кнопок на мало выводов.
Добавлено: Пт июл 10, 2026 01:47:29
jcxz
Starichok51 писал(а): Чт июл 09, 2026 22:14:18
вот матрица 4х4.
тут у меня нарисован АТмега8, но это не принципиально.
2026-07-09_21-49-26.png
...
и никаких резисторов и прочих наворотов не нужно.
Разве так можно делать?

Где последовательные с кнопками диоды?
Эта схема превратится в тыкву, как только пользователь нажмёт некоторые комбинации кнопок. А ТС в 1-м сообщении ещё указал, что могут быть произвольные комбинации нажатий кнопок.
Starichok51 писал(а): Чт июл 09, 2026 22:14:18
перед уходом в сон:
на колонках ставим 1 - входы с подтяжкой,
на строках ставим 0 - выходы с нулями,
на входе прерывания ставим 1 - вход с подтяжкой.
прерывание настраиваем по спаду уровня и разрешаем его.
когда нажмем любую кнопку, ноль со строки через диод на колонке попадет на вход прерывания - МК проснется.
...и пока кнопка нажата - всё время будет идти потребление.
Re: Подключить много кнопок на мало выводов.
Добавлено: Пт июл 10, 2026 03:38:33
akl
BOB51 писал(а): Чт июл 09, 2026 16:15:21...At90s2313 по фронту прерывания для выхода из сна не воспринимает. Это "старые простейшие" из АВРок...
Но даже в них норвеги заложили возможность отклика на прерывания по низкому уровню, спаду и фронту внешнего сигнала в режиме SLEEP IDLE. В режиме SLEEP PWD остается только срабатывание по низкому уровню. См. описание регистра MCUCR.

Re: Подключить много кнопок на мало выводов.
Добавлено: Пт июл 10, 2026 09:27:14
Starichok51
jcxz писал(а): Пт июл 10, 2026 01:47:29Разве так можно делать? Где последовательные с кнопками диоды?
Эта схема превратится в тыкву, как только пользователь нажмёт некоторые комбинации кнопок. А ТС в 1-м сообщении ещё указал, что могут быть произвольные комбинации нажатий кнопок.
не только можно, но и нужно так делать. и не нужны диоды к каждой кнопке.
диодное ИЛИ у меня только со столбцов на вход прерывания.
эта схема у меня прекрасно работает в моем макете пульта инфракрасного дистанционного управления. сам пульт я так и не стал изготавливать.
там у меня матрица 4х8 - 4 столбца и 8 строк, 32 кнопки.
и я подробно расписал, как определять любые комбинации кнопок.
jcxz писал(а): Пт июл 10, 2026 01:47:29и пока кнопка нажата - всё время будет идти потребление.
и пока кнопка нажата будет повторятся функция нажатой кнопки.
а когда кнопка (или все нажатые кнопки) будет отпущена, то после выполнения функции (функций) МК опять уйдет в сон.
еще раз повторю - моя схема прекрасно работает.
а какая схема подключений будет у ТС, мы так и не знаем. из его словесного описания я лично так ничего и не понял.
Re: Подключить много кнопок на мало выводов.
Добавлено: Пт июл 10, 2026 15:01:24
jcxz
Starichok51 писал(а): Пт июл 10, 2026 09:27:14не только можно, но и нужно так делать. и не нужны диоды к каждой кнопке.
диодное ИЛИ у меня только со столбцов на вход прерывания.
эта схема у меня прекрасно работает в моем макете пульта инфракрасного дистанционного управления. сам пульт я так и не стал изготавливать.
А теперь подумайте - что будет если нажаты одновременно например: 1-я и 2-я сверху кнопки 1-го (левого столбца) и 1-я или 2-я сверху кнопки 2-го слева столбца? Предположим что сканирующие импульсы подаются через PB4...PB7, а читаются - через PB0...PB3.
Вот тут и случится тыква.
Starichok51 писал(а): Пт июл 10, 2026 09:27:14и я подробно расписал, как определять любые комбинации кнопок.
В вашей схеме это невозможно. Без последовательных диодов кнопки будут определяться неверно.
Starichok51 писал(а): Пт июл 10, 2026 09:27:14
jcxz писал(а): Пт июл 10, 2026 01:47:29и пока кнопка нажата - всё время будет идти потребление.
и пока кнопка нажата будет повторятся функция нажатой кнопки.
Я не о функции тут писал, а о том, что при вашем алгоритме всё время будет потребляться ток.
Нажатой кнопкой из подтяжки.
Если уж завели речь о снижении потреблении, то это не комильфо. Если нужно малое потребление, то нужен такой алгоритм опроса, чтобы при нажатой кнопке ток не потреблялся непрерывно. Это возможно. Надо просто при уходе в сон подтяжки включать согласно текущим состояниям кнопок.
Re: Подключить много кнопок на мало выводов.
Добавлено: Пт июл 10, 2026 21:39:58
Starichok51
jcxz писал(а): Пт июл 10, 2026 15:01:24что будет если нажаты одновременно например: 1-я и 2-я сверху кнопки 1-го (левого столбца) и 1-я или 2-я сверху кнопки 2-го слева столбца? Предположим что сканирующие импульсы подаются через PB4...PB7, а читаются - через PB0...PB3
ты всё перепутал.
в моей схеме сканирующие импульсы подаются через PB0...PB3, а читающие - через PB4...PB7.
я же ясно написал, что сканирование столбцов идет по очереди, то есть, по одному.
сначала подаем ноль на первый (самый левый, РВ0) столбец. и находим, что ноль пришел на РВ7 и на РВ6. на остальных столбцах (РВ1-РВ3) стоят единицы, и нажатые кнопки во втором столбце ни на что не влияют.
затем подаем ноль на второй (РВ1) столбец, и находим, что ноль пришел опять РВ7 и на РВ6. а поскольку на РВ0 уже стоит единица, то нажатые кнопки в первом столбце ни на что не влияют.
но единицы на столбцах должны быть выполнены подтяжкой. если единицу подать выходом, то через нажатые кнопки в одной строке между нулем в столбце и единицами на других столбцах будет кз.
включи голову и сам подумай - никакой тыквы не будет.
jcxz писал(а): Пт июл 10, 2026 15:01:24всё время будет потребляться ток. Нажатой кнопкой из подтяжки.
а ты представляешь, какой ток будет потребляться из подтяжки?
там в подтяжке сопротивление примерно 50 кОм. если у ТС питание 3 Вольта, то ток будет всего 60 мкА. ты считаешь, что это "смертельно"?
и нам также неизвестно, как часто будут замыкания кнопок и как долго будет длится это замыкание, и как долго будет выполнять функционал кнопок до ухода в сон.
а может, у ТС кнопки (контакты) уже "мертво" сидят на минусе питания, и тогда моя схема вообще не годится.
Re: Подключить много кнопок на мало выводов.
Добавлено: Сб июл 11, 2026 05:20:17
jcxz
Starichok51 писал(а): Пт июл 10, 2026 21:39:58
ты всё перепутал.
в моей схеме сканирующие импульсы подаются через PB0...PB3, а читающие - через PB4...PB7.
И какая разница? Сканировать хоть строками хоть столбцами - схема не будет работать ни в каком случае.
Без диодов.
Starichok51 писал(а): Пт июл 10, 2026 21:39:58включи голову и сам подумай - никакой тыквы не будет.
Советую вам последовать своему же совету и наконец-то включить голову. И подумать - что будет, если нажаты отмеченные кнопки?

Или почитать буквари для начинающих. Или хотя-бы погуглить на тему "зачем нужны последовательные диоды в матрице кнопок?"
Вроде как это такая общеизвестная вещь, что странно не знать...
Starichok51 писал(а): Пт июл 10, 2026 21:39:58
там в подтяжке сопротивление примерно 50 кОм. если у ТС питание 3 Вольта, то ток будет всего 60 мкА. ты считаешь, что это "смертельно"?
Да, это овердофига! При 4 подтяжках будет уже 240 мкА.
У меня есть проект с батарейным питанием на STM8L151 с несколькими кнопками (2 кнопки + поворотный энкодер). Который потребляет всего около ~5 мкА.
Непрерывно следя за кнопками. 240мкА не лезет ни в какие ворота.
Re: Подключить много кнопок на мало выводов.
Добавлено: Сб июл 11, 2026 13:49:37
Starichok51
jcxz писал(а): Сб июл 11, 2026 05:20:17И подумать - что будет, если нажаты отмеченные кнопки?
допустим, что я не прав. или я тупой.
объясни мне
подробно что будет, если нажаты отмеченные кнопки.
Re: Подключить много кнопок на мало выводов.
Добавлено: Сб июл 11, 2026 14:13:46
BOB51
Зависит от алгоритма сканирования.
Re: Подключить много кнопок на мало выводов.
Добавлено: Сб июл 11, 2026 16:31:00
jcxz
Starichok51 писал(а): Сб июл 11, 2026 13:49:37объясни мне
подробно что будет, если нажаты отмеченные кнопки.
Это будет выглядеть как будто нажаты 4 кнопки:

И никак невозможно отличить нажатие 3-х голубых кнопок, от нажатия 4-х отмеченных кнопок.
BOB51 писал(а): Сб июл 11, 2026 14:13:46Зависит от алгоритма сканирования.
Не зависит. Как ни сканируй, различить указанные варианты будет невозможно. Смотрите на схему.
Re: Подключить много кнопок на мало выводов.
Добавлено: Сб июл 11, 2026 17:10:43
akl
У меня матрица 8*2, правда без сборки на прерывание. Никаких проблем.
Re: Подключить много кнопок на мало выводов.
Добавлено: Сб июл 11, 2026 19:20:53
Starichok51
jcxz писал(а): Сб июл 11, 2026 16:31:00И никак невозможно отличить нажатие 3-х голубых кнопок, от нажатия 4-х отмеченных кнопок.
ты совершенно не прав.
вот смотри:
на первой вертикале (колонке) стоит 0 - выход.
на остальных колонках задан вход с подтяжкой.
на всех строках задан вход с подтяжкой.
это означает, что трех колонок фактически нет, и нажатые кнопки в любой из трех колонок ни на что не влияют.
то есть, ноль с первой колонки пройдет на две верхние строки, и проверка строк это покажет.
далее.
подаем 0 на вторую колонку. и опять на остальных колонках вход с подтяжкой.
теперь нажатые кнопки в первой колонке ни на что не влияют.
а проверка строк покажет, что ноль есть только на одной, самой верхней, строке.
Re: Подключить много кнопок на мало выводов.
Добавлено: Сб июл 11, 2026 19:22:08
jcxz
akl писал(а): Сб июл 11, 2026 17:10:43У меня матрица 8*2, правда без сборки на прерывание. Никаких проблем.
Т.е. - и вы не видите в вышеприведенной схеме никаких проблем???
Re: Подключить много кнопок на мало выводов.
Добавлено: Сб июл 11, 2026 19:38:57
jcxz
Starichok51 писал(а): Сб июл 11, 2026 19:20:53
ты совершенно не прав.
вот смотри:
на первой вертикале (колонке) стоит 0 - выход.
на остальных колонках задан вход с подтяжкой.
на всех строках задан вход с подтяжкой.
это означает, что трех колонок фактически нет, и нажатые кнопки в любой из трех колонок ни на что не влияют.
Какие подтяжки? причём тут какие-то подтяжки?
Посмотрите наконец-то на свою схему! Специально для вас выделил кусок, куда надо смотреть. Возьмите в руки карандаш и проведите линию цепи через все три голубые замкнутые кнопки. Неужели не видите ОЧЕВИДНОГО:
Цепь образованная нажатыми голубыми кнопками замыкает фиолетовую кнопку.
Если параллельная цепь замыкает кнопку, тот как не сканируйте, какие подтяжки не ставьте - определить нажата ли реально фиолетовая кнопка или нет - никак не сможете. Она будет выглядеть нажатой.
PS: Ну что за детский сад? Неужели элементарную схему из 4-х кнопок и 4-х проводов осилить не можете?
Сколько уже можно разжёвывать очевидное???
Re: Подключить много кнопок на мало выводов.
Добавлено: Сб июл 11, 2026 20:50:49
Starichok51
jcxz писал(а): Сб июл 11, 2026 19:38:57Какие подтяжки? причём тут какие-то подтяжки?
не нравятся входы с подтяжкой, тогда пусть будут просто входы без подтяжки.
jcxz писал(а): Сб июл 11, 2026 19:38:57Неужели не видите ОЧЕВИДНОГО:
я тебя просил
подробно описать это ОЧЕВИДНОЕ, а не просто отрицать, что работать не будет.
я вот подробно описал логику работы и показал, что РАБОТАТЬ
будет.