Do PICs goto sleep?


Closed Thread
Results 1 to 18 of 18

Hybrid View

  1. #1
    Join Date
    Feb 2005
    Location
    Essex, UK
    Posts
    154

    Default Do PICs goto sleep?

    I have a small developmement which uses a PIC18F2550 (for later USB integration). At the moment, it takes 3 inputs from an RF module and depending on what button is pushed on the fob, jumps to a certain routine.

    The only problem is that it works for about a minute, then doesn't.

    If there is no activity, does the PIC goto sleep as such. I haven't come across this before if it does !!


    Here is my code:

    Code:
    Clear
    Define OSC 20          
    'Define LOADER_USED 1
    CMCON = 7 'disable comparators
    
    ' -----[ I/O Definition ]-----------------------------------------
    
    TRISA = %11111111	' Set PORTA to all input
    TRISB = %10000001   ' Set PORTB (0)INPUT (1-5)OUTPUTS
    TRISC = %11111111	' Set PORTC to all input
    PORTB = 0
    
    
    ' ----- System Outputs -----
    Red     VAR PORTB.1     ' All LEDs connected
                            ' between RC pins and
                            ' ground via resistor
                            
    ' ----- System Inputs -----
    SW1         Var PORTC.0
    SW2         Var PORTC.1
    SW3         Var PORTC.2
    
    
    ' -----[ Variable Definitions ]-----------------------------------
    Loop        Var Byte
    MaskSwitch  Var Byte
    
    Gosub Ready
    
    ' ************************************************************
    ' *                   Main Program Section                   *
    ' ************************************************************
    
    Main:
        MaskSwitch=PORTC & $07
            Select Case MaskSwitch
              Case 1 '%00000001 or SW1
                Gosub Procedure_SW1
    
              Case 2 '%00000010 or SW2
                Gosub Procedure_SW2
    
              Case 4 '%00000100 or SW3
                Gosub Procedure_SW3
        End Select
    Goto Main
    
    
    Ready:
        For Loop = 1 to 5
            Red = 1
            Pause 50
            Red = 0
            Pause 50
        Next Loop
    Return
    
    
    Procedure_SW1:
        Pause 10000 ' 20 second delay
        For Loop = 1 to 5
            Red = 1
            Pause 100
            Red = 0
            Pause 100
        Next Loop
    Return
    
    Procedure_SW2:
        red = 1
        pause 5000
        red = 0
    Return
    
    Procedure_SW3:
        for loop = 1 to 5
            red = 1
            pause 125
            red = 0
            pause 250
            red = 1
            pause 125
            red = 0
            pause 250
        next loop
    Return
    If you disconnect the power and then straight away reconnect, its still in a locked state. You have to remove power, wait about 8 seconds and then reconnect and all is fine, for a little while anyway! Most strange.

    Thank you

  2. #2
    Join Date
    Jul 2003
    Location
    Sweden
    Posts
    237


    Did you find this post helpful? Yes | No

    Default

    I've never heard of any PICs going to sleep without beeing told so(they're just like kids ... and me), however i've never used this particular one. My guess is that your RF module gives out combinations that won't get caught by your SELECT CASE statement(0,3,5,6,7). Easily checked by adding CASE ELSE

    /Ingvar

  3. #3
    Join Date
    Feb 2005
    Location
    Essex, UK
    Posts
    154


    Did you find this post helpful? Yes | No

    Default

    Its not the RF module as the program works fine for the first minute or so.

    Also, all the hybrid RF module does is output a HIGH or a LOW on three ports which are fed into the PIC. So all the PIC is reading is a 1 or a 0.

    Any other suggestions,

    Steve

  4. #4
    J_Brittian's Avatar
    J_Brittian Guest


    Did you find this post helpful? Yes | No

    Default

    Is MaskSwitch ending up outside your parameters? What happens if you add a case else statement?

  5. #5
    Join Date
    Feb 2005
    Location
    Essex, UK
    Posts
    154


    Did you find this post helpful? Yes | No

    Default

    Hmm, got me thinking now.

    If i only wanted to look at RC0 , RC1 & RC2, i have now changed the TRISC to read:

    Code:
    TRISC = %00000111	' Set PORTC (0-2 input) rest Outputs
    Is this correct?

    Also, would any change need to be done for this line? What does the $07 mean?

    Code:
    MaskSwitch=PORTC & $07
    What would you suggest i put in the CASE ELSE statement. A return back to Main? It may be worth puttin in this statement to capture any other event.

    Thank you.

  6. #6
    J_Brittian's Avatar
    J_Brittian Guest


    Did you find this post helpful? Yes | No

    Default

    Actually I was going to suggest an output of some kind, maybe an led. If MaskSwitch gets outside of your parameters in someway you could effectively end up in a main ... goto main loop.

Similar Threads

  1. Making a menu
    By chrisshortys in forum mel PIC BASIC Pro
    Replies: 36
    Last Post: - 12th November 2008, 19:54
  2. Replies: 14
    Last Post: - 26th September 2007, 05:41
  3. Problems with RC2 and RC3
    By Christopher4187 in forum General
    Replies: 11
    Last Post: - 29th May 2006, 17:19
  4. 3 HPWM channels
    By docwisdom in forum mel PIC BASIC Pro
    Replies: 9
    Last Post: - 4th April 2006, 02:43
  5. Output PIC module
    By freelancebee in forum mel PIC BASIC Pro
    Replies: 5
    Last Post: - 12th September 2005, 20:10

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