Подключить много кнопок на мало выводов.
Думаю, у стартера предполагается работа по фронту сигнала. Выходить из прерывания можно по RET. Сам предпочитаю работать по спаду сигнала или по низкому уровню.
- Реклама
А с какой кнопки нулик то придет?
См. описание подключения - там единичка от "бегущей 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).
И, наконец, последнее замечание по поводу прерываний. Если сигнал,
вызвавший «пробуждение» микроконтроллера, исчезнет раньше, чем мии
кроконтроллер перейдет в рабочий режим, обработчик соответствующего
прерывания вызван не будет.
..."

См. описание подключения - там единичка от "бегущей 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).
И, наконец, последнее замечание по поводу прерываний. Если сигнал,
вызвавший «пробуждение» микроконтроллера, исчезнет раньше, чем мии
кроконтроллер перейдет в рабочий режим, обработчик соответствующего
прерывания вызван не будет.
..."
- Сообщения: 620
- Зарегистрирован: Пн фев 16, 2026 17:30:02
Да уж, пичалька, когда микроконтроллер весьма древний, а компания-разработчик "едет на подсосе", и даже вместо программиста - всего лишь студент
- Сообщения: 398
- Зарегистрирован: Чт май 07, 2026 00:30:38
И опять возражу Вам, уважаемый Rapra: печаль не это, а то, что даже нормального ТЗ нет и некому его составить.
Программист у них есть, а вот толкового инженера, который сможет поставить задачу - нет.
вот матрица 4х4.
тут у меня нарисован АТмега8, но это не принципиально. перед уходом в сон:
на колонках ставим 1 - входы с подтяжкой,
на строках ставим 0 - выходы с нулями,
на входе прерывания ставим 1 - вход с подтяжкой.
прерывание настраиваем по спаду уровня и разрешаем его.
когда нажмем любую кнопку, ноль со строки через диод на колонке попадет на вход прерывания - МК проснется.
в обработчике прерывания запрещаем это прерывание.
затем делаем другую настройку портов:
на строках ставим 1 - входы с подтяжкой,
на колонках по очереди ставим 0 - выход с нулем.
далее проверяем на какой строке появился ноль с выбранной колонки, или на каких строках, если в колонке нажато несколько кнопок.
и так повторяем проверки на каждой строке для всех колонок.
и никаких резисторов и прочих наворотов не нужно.
тут у меня нарисован АТмега8, но это не принципиально. перед уходом в сон:
на колонках ставим 1 - входы с подтяжкой,
на строках ставим 0 - выходы с нулями,
на входе прерывания ставим 1 - вход с подтяжкой.
прерывание настраиваем по спаду уровня и разрешаем его.
когда нажмем любую кнопку, ноль со строки через диод на колонке попадет на вход прерывания - МК проснется.
в обработчике прерывания запрещаем это прерывание.
затем делаем другую настройку портов:
на строках ставим 1 - входы с подтяжкой,
на колонках по очереди ставим 0 - выход с нулем.
далее проверяем на какой строке появился ноль с выбранной колонки, или на каких строках, если в колонке нажато несколько кнопок.
и так повторяем проверки на каждой строке для всех колонок.
и никаких резисторов и прочих наворотов не нужно.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
- Реклама
- Сообщения: 398
- Зарегистрирован: Чт май 07, 2026 00:30:38
Если порты работают только на матрицу контактов. А если ещё и на дисплей, то придётся использовать немного резисторов.
- Сообщения: 1758
- Зарегистрирован: Вт авг 15, 2017 10:51:13
Разве так можно делать?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 - вход с подтяжкой.
прерывание настраиваем по спаду уровня и разрешаем его.
когда нажмем любую кнопку, ноль со строки через диод на колонке попадет на вход прерывания - МК проснется.
Но даже в них норвеги заложили возможность отклика на прерывания по низкому уровню, спаду и фронту внешнего сигнала в режиме SLEEP IDLE. В режиме SLEEP PWD остается только срабатывание по низкому уровню. См. описание регистра MCUCR.BOB51 писал(а): Чт июл 09, 2026 16:15:21...At90s2313 по фронту прерывания для выхода из сна не воспринимает. Это "старые простейшие" из АВРок...
- Вложения
-
- AT90S2313_Ext.jpg
- (19.34 КБ) 72 скачивания
не только можно, но и нужно так делать. и не нужны диоды к каждой кнопке.jcxz писал(а): Пт июл 10, 2026 01:47:29Разве так можно делать? Где последовательные с кнопками диоды?
Эта схема превратится в тыкву, как только пользователь нажмёт некоторые комбинации кнопок. А ТС в 1-м сообщении ещё указал, что могут быть произвольные комбинации нажатий кнопок.
диодное ИЛИ у меня только со столбцов на вход прерывания.
эта схема у меня прекрасно работает в моем макете пульта инфракрасного дистанционного управления. сам пульт я так и не стал изготавливать.
там у меня матрица 4х8 - 4 столбца и 8 строк, 32 кнопки.
и я подробно расписал, как определять любые комбинации кнопок.
и пока кнопка нажата будет повторятся функция нажатой кнопки.
а когда кнопка (или все нажатые кнопки) будет отпущена, то после выполнения функции (функций) МК опять уйдет в сон.
еще раз повторю - моя схема прекрасно работает.
а какая схема подключений будет у ТС, мы так и не знаем. из его словесного описания я лично так ничего и не понял.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
- Сообщения: 1758
- Зарегистрирован: Вт авг 15, 2017 10:51:13
А теперь подумайте - что будет если нажаты одновременно например: 1-я и 2-я сверху кнопки 1-го (левого столбца) и 1-я или 2-я сверху кнопки 2-го слева столбца? Предположим что сканирующие импульсы подаются через PB4...PB7, а читаются - через PB0...PB3.Starichok51 писал(а): Пт июл 10, 2026 09:27:14не только можно, но и нужно так делать. и не нужны диоды к каждой кнопке.
диодное ИЛИ у меня только со столбцов на вход прерывания.
эта схема у меня прекрасно работает в моем макете пульта инфракрасного дистанционного управления. сам пульт я так и не стал изготавливать.
Вот тут и случится тыква.
В вашей схеме это невозможно. Без последовательных диодов кнопки будут определяться неверно.Starichok51 писал(а): Пт июл 10, 2026 09:27:14и я подробно расписал, как определять любые комбинации кнопок.
Я не о функции тут писал, а о том, что при вашем алгоритме всё время будет потребляться ток. Нажатой кнопкой из подтяжки.Starichok51 писал(а): Пт июл 10, 2026 09:27:14и пока кнопка нажата будет повторятся функция нажатой кнопки.
Если уж завели речь о снижении потреблении, то это не комильфо. Если нужно малое потребление, то нужен такой алгоритм опроса, чтобы при нажатой кнопке ток не потреблялся непрерывно. Это возможно. Надо просто при уходе в сон подтяжки включать согласно текущим состояниям кнопок.
ты всё перепутал.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 мкА. ты считаешь, что это "смертельно"?
и нам также неизвестно, как часто будут замыкания кнопок и как долго будет длится это замыкание, и как долго будет выполнять функционал кнопок до ухода в сон.
а может, у ТС кнопки (контакты) уже "мертво" сидят на минусе питания, и тогда моя схема вообще не годится.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.


