Подключить много кнопок на мало выводов.
Думаю, у стартера предполагается работа по фронту сигнала. Выходить из прерывания можно по 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).
И, наконец, последнее замечание по поводу прерываний. Если сигнал,
вызвавший «пробуждение» микроконтроллера, исчезнет раньше, чем мии
кроконтроллер перейдет в рабочий режим, обработчик соответствующего
прерывания вызван не будет.
..."
- Сообщения: 619
- Зарегистрирован: Пн фев 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
Если порты работают только на матрицу контактов. А если ещё и на дисплей, то придётся использовать немного резисторов.
- Сообщения: 1757
- Зарегистрирован: Вт авг 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 КБ) 39 скачиваний
не только можно, но и нужно так делать. и не нужны диоды к каждой кнопке.jcxz писал(а): Пт июл 10, 2026 01:47:29Разве так можно делать? Где последовательные с кнопками диоды?
Эта схема превратится в тыкву, как только пользователь нажмёт некоторые комбинации кнопок. А ТС в 1-м сообщении ещё указал, что могут быть произвольные комбинации нажатий кнопок.
диодное ИЛИ у меня только со столбцов на вход прерывания.
эта схема у меня прекрасно работает в моем макете пульта инфракрасного дистанционного управления. сам пульт я так и не стал изготавливать.
там у меня матрица 4х8 - 4 столбца и 8 строк, 32 кнопки.
и я подробно расписал, как определять любые комбинации кнопок.
и пока кнопка нажата будет повторятся функция нажатой кнопки.
а когда кнопка (или все нажатые кнопки) будет отпущена, то после выполнения функции (функций) МК опять уйдет в сон.
еще раз повторю - моя схема прекрасно работает.
а какая схема подключений будет у ТС, мы так и не знаем. из его словесного описания я лично так ничего и не понял.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.


