ON/OFF button using Microcontrollers

Not rated 10,575

Circuit Image

Using a switch to power up your microcontroller projects may not be a good idea if you need to "wake" the PIC during some events. For example: A metal detector sends a pulse indicating a car is ready to enter into a garage, so the user needs to type a password to open the garage door or just slide the access card. You may leave the Microcontroller ON always, 24/7 and it, someday, will fail or just freeze because a glitch in the code or just a failure caused by a voltage variation. The solution that I have is just creating a routine to turn ON or OFF the PIC by itself. Just like the handheld calculators that have the ON/OFF button and turn OFF by itself after some minutes without activity.

How I do that? Simple: I turn off the PIC with the SLEEP instruction. While the PIC is "sleeping" it is "ON" but the clock will stop, so the program will not continue. The current consumption is only a few micro-amperes. (You need to set the I/O ports to low and disable comparators to ensure the PIC will not draw any voltage through any port). Once the PIC is on POWER DOWN MODE (or SLEEP Mode) basically it will be OFF until: A Hardware reset occurs. A brown-out/power loss occurs. Watchdog was enabled and it generated a timeout. An external interrupt was generated (for example, a Peripheral interrupt). When I need a "power on/off" button, I do use the RESET pin as "on/off" button. An example of this technique is my Air Display. As you can see; when you press the RESET button, you are turning ON the PIC. When the process is done, it turns off by itself with the SLEEP instruction. Now, if you want to turn ON/OFF the PIC then you have to use a little trick: as soon as the Microcontroller starts, determine the value of a specific variable is equal to 075h (75 Hex). If the value IS NOT 075h, then set the variable to 075h and continue with the normal process. If the value IS EQUAL to 075h, then set the variable to 00h and execute the SLEEP process (put the Microcontroller to sleep). Why those conditions? Just to determine if the user pressed the reset button to turn the PIC off or on. When the PIC receives a HARDWARE reset, it doesn’t clear the RAM so the variables still the same. The conditions are needed to determine if the PIC is going to be turned OFF (Sleep) or ON every time the microcontroller receives a hardware reset. If you power up the PIC, it will not go to sleep at the first try because all the variables are cleared at power up, so, is no way to get a variable to have the value 075h at power up UNLESS some random data is on the PIC's memory. It may sound a little complicated but it is really simple. At the beginning of the program just check the status of ANY variable every time when the reset is pressed. That will work as ON/OFF process.

The described system utilizes a microcontroller, specifically a PIC, to manage power effectively in applications requiring intermittent operation. The main concept revolves around the use of the SLEEP instruction to minimize power consumption when the device is inactive. The microcontroller retains the ability to wake up through various triggers, including hardware resets, external interrupts, and watchdog timers.

To implement this functionality, the microcontroller's firmware is designed to monitor a specific variable upon startup and during reset events. The variable serves as a flag to determine the operational state of the device. Initially, the variable is compared against a predefined value (075h). If the variable does not match this value, it is set to 075h, indicating that the device is in an active state. Conversely, if the variable equals 075h, it is reset to 00h, prompting the microcontroller to enter sleep mode.

This method effectively creates a toggle mechanism for the PIC, where the state is preserved across resets due to the nature of RAM retention. In practical applications, such as the Air Display example, the RESET pin is repurposed as an on/off control, allowing users to initiate the power state change without additional hardware components.

Additionally, to ensure the microcontroller consumes minimal power during sleep, it is crucial to configure the I/O ports to low and disable any comparators that may inadvertently draw current. This setup results in a current draw in the microamp range, making it suitable for battery-powered applications where longevity is a concern.

Overall, this approach provides a robust solution for managing power in microcontroller-based projects, allowing for efficient wake and sleep cycles while maintaining responsiveness to user inputs.Using a switch to power up your microcontroller projects may not be a good idea if you need to "wake" the PIC during some events. For example: A metal detector sends a pulse indicating a car is ready to enter into a garaje, so the user needs to type a password to open the garage door or just slide the access card.

You may leave the Microcontroller ON always, 24/7 and it, someday, will fail or just freeze because a glitch in the code or just a failure caused by a voltage variation. The solution that I have is just creating a routine to turn ON or OFF the PIC by itself. Just like the handheld calculators that have the ON/OFF button and turn OFF by itself after some minutes without activity.

How I do that? Simple: I turn off the PIC with the SLEEP instruction. While the PIC is "sleeping" it is "ON" but the clock will stop, so the program will not continue. The current consumption is only a few micro-amperes. (You need to set the I/O ports to low and disable comparators to ensure the PIC will not draw any voltage thru any port).

Once the PIC is on POWER DOWN MODE (or SLEEP Mode) basically it will be OFF until: A Hardware resets occurs. A brown-out/power loss occurs. Watchdog was enabled and it generated a timeout. An extenal interrupt was generated (for example, a Peripheral interrupt) When I need a "power on/off" button, I do use the RESET pin as "on/off" button.

An example of this technique is my Air Display. As you can see; when you press the RESET button, you are turning ON the PIC. When the process is done, it turns off by itself with the SLEEP instruction. Now, If you want to turn ON/OFF the PIC then you have to use a little trick: As soon the Microcontroller starts, determine the value of an specific variable is equal to 075h (75 Hex). If the value IS NOT 075h, then set the variable to 075h and continue with the normal process. If the value IS EQUAL to 075h, then set the variable to 00h and execute the SLEEP process (put the Microcontroller to sleep).

Why those conditions? Just to determine if the user pressed the reset button to turn the PIC off or on. When the PIC receives a HARDWARE reset, it doesn't clear the RAM so the variables still the same. The conditions are needed to determine if the PIC is going to be turned OFF (Sleep) or ON every time the microcontroller receives a hardware reset.

If you power up the PIC, it will not go to sleep at the first try because all the variables are cleared at power up, so, is no way to get a variable to have the value 075h at power up UNLESS some random data is on the PIC's memory. It may sound a little complicated but it is really simple. At the beginning of the program just check the status of ANY variable every time when the reset is pressed.

That will work as ON/OFF process.

🔗 External reference




Warning: include(partials/cookie-banner.php): Failed to open stream: Permission denied in /var/www/html/nextgr/view-circuit.php on line 713

Warning: include(): Failed opening 'partials/cookie-banner.php' for inclusion (include_path='.:/usr/share/php') in /var/www/html/nextgr/view-circuit.php on line 713