Electronic – Using a momentary push button as a latching on-off toggle switch


Please check the schematic here>

Here is the circuit that I have developed. I am not very sure about the design.

Here is what I want it to do. When the user presses the push button S2 the TPS_EN line should toggle.

I am using BSS84 P-ch mosfets.The resistor values are as in the schematic.

Here is an explanation of how the thing should work.The TPS_EN line is low at first. Since it is pulled down by a 10k pull down resistor(not shown in the schematic).When the user presses S2, the mosfet Q2 turns on because ground is applied to its gate. which enables the power regulator connected to the TPS_EN line . The regulator now starts up and starts powering the microcontroller. The microcontroller pulls the LATCH_OP1 and LATCH_OP2 low. The mosfet Q2 and Q6 now 'turns on' due to this.Q6 is turned on and now causes the 1st and 2nd terminals of the push button s2 to go high. And the LATCH_OP1 causes the Q2 to latch thus enabling a constant high signal (VBATT)on the enable line.

Now when the user presses the button Since Q6 was 'on' the VBATT gets applied to gate of Q2 and turns off Q2.The regulator turns off. turning off the microcontroller and the LATCH_OP2 and LATCH_OP1 return to VBATT.

BATT is around 3.7v.The Micrcontroller is running on a 3.3v supply

The circuit does not work as intended. I tried manually changing the latch lines to ground when turning on and it worked. But when i connect the lines to the microcontroller it does not work Please help me out!

Feel Free to point out mistakes if any. This is my First circuit design!(So please excuse my noobness! :p)

Best Answer

I haven't examined the circuit much yet, but one thing you'll have to be wary of is switch bounce. If you were to look at the voltage at the switch, instead of seeing a nice perfect square wave as you might imagine, what you'd actually will horrify you.

Switch bounce

This is a real effect and happens on almost all switches. Assuming your circuit works, switch bounce will totally mess things up, because it will cause TPS_EN to toggle multiple times with every press of the switch.

What you need to add is known as a debounce circuit:

Debounce circuit

Having said all that, I think there's a better way to solve your problem, using fewer components.

You already have a microcontroller, so let that do all the hard work.

MCU Power

When you press S1, it causes Q1 to switch on, which powers the MCU. Immediately, the MCU raises the MCU_Signal line, which keeps Q1 switched on, even if you let go of the button.

From now on, the MCU keeps a watch on the Switch_Detect line. It will go high when the switch is pressed again. The MCU waits for the button to be released, then waits a further 100ms. This is to make sure the switch has really finished bouncing. Then the MCU lowers the MCU_Signal line, causing it to power off.


There's also the LTC2955 Pushbutton On/Off Controller which does the same thing.