ON/OFF with Microcontrollers.

Here is a technique how to implement an ON/OFF button using microcontrollers. (11/22/2006)



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. Here is the schematic:




    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.


    I hope this information helps to improve your PIC projects.


     < Barack Obama WinsHomepage One Second Timebase.> 


    If any information, data, picture or design infringes a copyrighted material, please send me an e-mail asking to remove it along with the supporting data.
    Some features may not work with Google Chrome. © 2006-2010 Jose Pino - Powered by JPC Alpha