Размышляя на тему как максимально экономить батарейку в проектах где основная задача выполняется по нажатию кнопок (как в пультах ДУ) в голову пришла очень простая и эффективная схема. Ее достоинство состоит в том, чтобы на кнопку возложить не только задачу вызывать ту или иную функцию, но и подавать питание на микроконтроллер. Таким образом потребление схемы в режиме ожидание падает до нуля (!), так как батарейка оказывается полностью отключенной от схемы.
Такой алгоритм просто реализуется на кнопках с несколькими парами контактных групп, чаще же в проектах используется обычная тактовая кнопка, которая умеет замыкать только два контакта между собой. Поэтому пошевелив извилинами накидал вот такую схему:
Как видно, при нажатии на любую кнопку, происходит запитывание микроконтроллера и одновременно с этим на соответствующей ножке выставляется высокий уровень. Диоды в схеме нужны чтобы отсечь попадание высокого уровня на остальные входы.
для проверки схемы собрал ее на макетке:
код обработки нажатия самый элементарный:
$regfile = "m16def.dat" $crystal = 8000000
Config Portb = Output Config Portc = Input
Do
If Pinc.0 = 1 Then Portb.0 = 1 End If
If Pinc.1 = 1 Then Portb.1 = 1 End If
If Pinc.2 = 1 Then Portb.2 = 1 End If
Loop
End
|