? about sleep/wake on pin change and WDT


Closed Thread
Results 1 to 13 of 13

Hybrid View

  1. #1
    Join Date
    Jan 2007
    Posts
    15


    Did you find this post helpful? Yes | No

    Default

    Thanks for your reply but.... Unfortunately I want to be able to just wave the magnet over the switch which will change the pin state and make the pic sleep or wake. I cannot leave the magnet in place on the magnetic switch.

    So I need the pic to stay sleeping after an "@ SLEEP" and not to wake at all until the pin changes when the magnet has been waved over the switch.

    This means the WDT has to be disabled which kills my "NAP" or "SLEEP" usage and forces me to use pause which will not be the low power usage desired.

    Anything else I could try at all?

  2. #2
    Join Date
    Jul 2003
    Posts
    2,405


    Did you find this post helpful? Yes | No

    Default

    Is the magnetic switch the "only" thing that will be used to wake it up?
    Regards,

    -Bruce
    tech at rentron.com
    http://www.rentron.com

  3. #3
    Join Date
    Jan 2007
    Posts
    15


    Did you find this post helpful? Yes | No

    Default

    Yes, the magnetic switch will be the ony thing to wake it and tell it to sleep in this application. It should not turn on/off (wake/sleep) until a user turns it or on with the switch..

  4. #4
    Join Date
    Jul 2003
    Posts
    2,405


    Did you find this post helpful? Yes | No

    Default

    Here's one scenario;

    The PIC wakes up at regular intervals using the WDT. If switch = 0, then go
    back to sleep. It's only awake for a few uS testing the switch.

    If switch = 1, then do whatever you need to do, then test the switch input
    before going back to sleep.

    A switch press can also wake the PIC up before a WDT timeout. Handle
    whatever you need to do, test the switch, and go back to sleep or stay
    awake (resetting WDT) as required, based on the switch input.

    It's still going to save a boat-load of power since it will be sleeping until your
    switch is active, or the WDT times out.

    If the switch isn't active, it's still alseep for the majority of time, and you'll
    be operating at low current until the switch input forces the wake up, or the
    WDT timeout.

    Wouldn't that work?
    Regards,

    -Bruce
    tech at rentron.com
    http://www.rentron.com

  5. #5
    Join Date
    Jan 2007
    Posts
    15


    Did you find this post helpful? Yes | No

    Default

    This could work.... I will try this as soon as I get the chance (prob after the weekend). Thanks for your suggestions, I've been working on multiple projects and they all run together which makes it hard to really focus on the issue at hand enough to get outside the box. Sometimes its just nice to get a fresh perspective on a project.

    Thanks again Bruce! I'll post my results when I get back to it next week.

  6. #6
    Join Date
    Nov 2005
    Location
    Bombay, India
    Posts
    967


    Did you find this post helpful? Yes | No

    Default

    Kessral

    If I understand you correctly, you want to do a pulsout (1) every time the PIC is woken by the magnetic switch. Waking on a magnetic switch can be done by a pin change interrupt, if available in the 10F(Havent used, so I cant comment on this). So, your ideal work loop will be something like

    while (1)
    PULSOUT pin, period
    @ SLEEP
    @ nop
    @ nop
    ' on waking from interrupt, go back to pulsout
    wend

    Of course, I haven't shown the part needed to configure the PIC for interrupt on change, etc

    Jerson

  7. #7
    Join Date
    Jan 2007
    Posts
    15


    Did you find this post helpful? Yes | No

    Default

    No Jerson, I'm trying to get it to pulsout as the main function every few seconds or so. I want it to sleep as if it were turned off. And then continue its normal function pulsing when awakened.

    I have tried your suggestion tho Bruce and come up with this code:

    __________________________________________________ ____________

    TRISIO=%11111111
    STATUS=%10010000
    OPTION_REG=%00001000
    check var bit
    Low GPIO.0

    loop:

    nap 4
    pulsout 0, 4000
    nap 5

    IF GPIO.1 = 1 then
    suspend:
    pause 2000
    check = GPIO
    sleep 65535
    IF GPIO.1 = 1 then
    goto loop
    else
    goto suspend
    endif
    endif

    goto loop
    __________________________________________________ _____________

    This seems to work. It wakes and sleeps on pin change just fine... however my problem now is that its drawing some 60uA instead of the 5-10uA listed in the datasheet. I'll keep looking through to see if there is something else I can do to lower the current drain, but for now this seems to be as close as I am going to get.

    I DID notice however that GPIO 3 is constantly high... this could have something to do with current drain being slightly higher so that is what I am currently looking into.

    Again thanks for the Input guys.

    P.S. This is on a PIC10F202 and I am using MPLAB IDE v7.11
    Last edited by kessral; - 15th January 2007 at 21:11.

Similar Threads

  1. saving RCREG to word
    By Macgman2000 in forum mel PIC BASIC Pro
    Replies: 7
    Last Post: - 15th September 2008, 13:51
  2. Changing 18F WDT postscaler on-the-fly
    By Bruce in forum Code Examples
    Replies: 4
    Last Post: - 1st August 2006, 21:09

Members who have read this thread : 0

You do not have permission to view the list of names.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts