Вечер добрый.
Переделал схему, так должно быть понятней.
Выходы:VCC AVR и
GND AVR – к выводам питания МК.
INT0 – здесь формируется импульс для прерывания.
PC0 – делитель напряжения при нажатой кнопке.
PB0 – управление питание с МК.
Сразу скажу, спаял макетку – вроде бы, все работает.
Для чего делал? Хотелось: 1. Реализовать включение-выключение одной кнопкой.
2. Выводить МК из спящего режима любой кнопкой.
3. Использовать минимальное кол-во выводов для подключения кнопок.
4. Обойтись без P-канальных мосфетов.
Как работает:При нажатии на нижнюю по схеме кнопку, напряжение питания через диод подается на затвор транзистора
Q2. Транзистор
Q2 откроется и МК будет подключён к питанию через выводы
VCC AVR и
GND AVR. Далее для того чтобы транзистор не закрылся, необходимо подать низкий логический уровень на выход
PB0. Если подать на
PB0 высокий уровень, транзистор
Q2 закроется и МК будет обесточен.
Также, при нажатии на любую кнопку, открывается транзистор
Q1, формируя низкий уровень на выходе
INT0, нужный для использования прерываний в МК.
При нажатии кнопок, получается делитель напряжения, измерив напряжение на котором (выход
PC0) можно узнать какая именно кнопка, была нажата. По идее можно подключить достаточно много кнопок.
Нюансы:Сначала, хотел коммутировать нагрузку через исток, однако транзистор при этом недостаточно открывается.
Так как используется N-канальный транзистор, пришлось для отключения питания разрывать землю. Из-за этого, при закрытом транзисторе
Q2, на всех выходах МК присутствует небольшое положительное напряжение, и транзистор
Q2 до конца не закрывается. Поэтому для развязки вместо диода пришлось использовать p-n-p транзистор.
Так как при нажатии на кнопки открывается транзистор
Q1, думаю не трудно будет добавить аппаратный сброс при зависании МК при удерживании кнопки определенное время.