Electronic – Smart ways to detect a button (less power consuming)

buttondetectionlow-powermicrocontroller

During a meeting for a particular project I was asked to think about the way to detect a push on a button with a MCU. The detection should consume as little power as possible. At the first glance, I thought the typical circuit with a pull-up or a pull-down :

schematic

simulate this circuit – Schematic created using CircuitLab

I don't account for some anti-bounce features here, as that is beyond this question's scope. In either case, when the button is pushed, the total current value that flows depends on the resistor value. To minimize it (the current), I could increase the resistor value but not so much since, if I am right, it also depends on the input pin leakage value. Plus, a large resistor would recover slowly.

My question is the following one : what are the smart ways to detect a button pressed that doesn't consume power (typically for a high power consuming application)? Are there any methods that are barely power-consuming when the button is pressed?

Best Answer

A low-current method I used once was to connected a switch between two microcontroller I/O pins.

One I/O was configured as an output (SWO). The second was configured as an input (SWI) with its programmable internal pull-up enabled.

The switch state was sampled infrequently (every 10 ms) by a software interrupt routine. The reading sequence was: drive SWO low, read SWI, drive SWO high.

This meant that a pressed switch only drew the SWI pull-down current through itself and SWO for less than 1 us during scanning, while an unpressed switch drew no current. This current draw for <1 us every 10 ms resulted in a tiny average average current consumption.