How to go to sleep


Closed Thread
Results 1 to 10 of 10
  1. #1
    Join Date
    Jun 2006
    Location
    Greece
    Posts
    302

    Default How to go to sleep

    I have this :
    Code:
    	DEFINE LCD_DREG	PORTB	
    	DEFINE LCD_DBIT 0	    
    	DEFINE LCD_RSREG PORTA
    	DEFINE LCD_RSBIT 2	    
    	DEFINE LCD_EREG	PORTA  
    	DEFINE LCD_EBIT 3	    
    	DEFINE LCD_BITS 4		
    	DEFINE LCD_LINES 2	  
    
    	DEFINE I2C_SCLOUT 1
    	
    	SCL var PORTA.1     
    	SDA	var	PORTA.0		
    
    	UP	    var	PORTB.6	
    	DOWN	var	PORTB.7		
    	CH_PAS	var	PORTB.5	 
    
    	Input	UP		     	
    	Input	DOWN
    	Input	CH_PAS
    
        b1	var Byte
        b2	var Byte
        b3	var Byte
        b5	var	Byte
    
        F1	var	Word
        F2	var	Word
        F3	var	Word
    
        ADDR1   VAR	Byte
        ADDR2	VAR	Byte
    	LOCK	VAR	Byte
    	TMP	    VAR	Word
    	TMP_LO	VAR	TMP.LowByte
    	TMP_HI	VAR	TMP.HighByte
    	PLLBASE	VAR	Word
    	PLL	    VAR	Word
    	LO	    VAR	PLL.LowByte
    	HI	    VAR	PLL.HighByte
    	PAS	    VAR	Byte
     loop:	
             Button UP,1,10,2,b1,1,MONTE	       
    		Button DOWN,1,10,2,b2,1,DESCEND	   
    		Button CH_PAS,1,255,0,b3,1,	CHOIX  		
    		PAUSE 100                          
      	    I2CREAD SDA,SCL,ADDR2,[LOCK]       
            GoSub AFFICHAGE		               
            GoTo loop

    and i want the pic to go to sleep if no button is pushed.And awake if i push any button.
    I have read the datasheet but i don't know how to make
    Pic is 16f84a
    Last edited by savnik; - 13th September 2006 at 14:33.

  2. #2
    blainecf's Avatar
    blainecf Guest


    Did you find this post helpful? Yes | No

    Default why?

    You don't mention why you want the MCU to sleep. I'm assuming power consumption based on battery drain.

    If so, then you need to state how crucial the power draw is to your design, and what response time you need.

    If power draw is not crucial, then why do you want the MCU to sleep? Or, do you just want it to pause.

    bcf

  3. #3
    Join Date
    Jun 2006
    Location
    Greece
    Posts
    302


    Did you find this post helpful? Yes | No

    Default

    I use the pic to control a TSA5511 (i2c) for a pll for UHF , but the counter of pic is modulate the rf (vco) , so i want to sleep until i push any button and after some time to go again to sleep.

  4. #4
    Join Date
    Jun 2006
    Location
    Greece
    Posts
    302


    Did you find this post helpful? Yes | No

    Default

    I change the code but i don't know if it is correct

    Code:
                 DEFINE LCD_DREG	PORTB	
    	DEFINE LCD_DBIT 0	    
    	DEFINE LCD_RSREG PORTA
    	DEFINE LCD_RSBIT 2	    
    	DEFINE LCD_EREG	PORTA  
    	DEFINE LCD_EBIT 3	    
    	DEFINE LCD_BITS 4		
    	DEFINE LCD_LINES 2	  
    
    	DEFINE I2C_SCLOUT 1
    	
    	SCL var PORTA.1     
    	SDA	var	PORTA.0		
    
    	UP	    var	PORTB.6	
    	DOWN	var	PORTB.7		
    	CH_PAS	var	PORTB.5	 
    
    	Input	UP		     	
    	Input	DOWN
    	Input	CH_PAS
    
        b1	var Byte
        b2	var Byte
        b3	var Byte
        b5	var	Byte
    
        F1	var	Word
        F2	var	Word
        F3	var	Word
    
        ADDR1   VAR	Byte
        ADDR2	VAR	Byte
    	LOCK	VAR	Byte
    	TMP	    VAR	Word
    	TMP_LO	VAR	TMP.LowByte
    	TMP_HI	VAR	TMP.HighByte
    	PLLBASE	VAR	Word
    	PLL	    VAR	Word
    	LO	    VAR	PLL.LowByte
    	HI	    VAR	PLL.HighByte
    	PAS	    VAR	Byte
    
                 ' Initialize interrupts
                 On Interrupt Goto  loop
                 INTCON = $88                   ' enable interrupts on RB4 through RB7	
    
    MAIN:	
    
    	PLL = PLLBASE + TMP
    	
    	I2CWRITE SDA,SCL,ADDR1,[HI,LO,$8E]	  'Sending of the data to the module
            
       	GoSub CALCUL		'calculate the frequency for posting
        GoSub AFFICHAGE     'post the frequency   	
       	PAUSE 200
        @SLEEP
    
     loop:	
             Button UP,1,10,2,b1,1,MONTE	       
    		Button DOWN,1,10,2,b2,1,DESCEND	   
    		Button CH_PAS,1,255,0,b3,1,	CHOIX  		
    		PAUSE 100                          
      	    I2CREAD SDA,SCL,ADDR2,[LOCK]       
             GoSub AFFICHAGE
            INTCON.1 = 0                        ' clear the interrupt flag
            Resume                              ' end of interrupt service routine
            Enable                              ' allow interrupts again		               
            GoTo loop 
    
    MONTE:      
            .....
            .....
            GoTo MAIN
    
    DESCEND:
            .....
            .....
            GoTo MAIN
    
    CHOIX:
            .....
            .....
            GoTo MAIN
    Last edited by savnik; - 16th September 2006 at 12:39.

  5. #5
    Join Date
    Jun 2006
    Location
    Greece
    Posts
    302


    Did you find this post helpful? Yes | No

    Default

    Code:
             Button UP,1,10,2,b1,1,MONTE	       
    		Button DOWN,1,10,2,b2,1,DESCEND	   
    		Button CH_PAS,1,255,0,b3,1,	CHOIX
    BUTTON Pin,Down,Delay,Rate,BVar,Action,Label
    Because the 'down' in my code is 1 the pic go to interrupt continues (loop)
    How to change the code (not the button);

  6. #6


    Did you find this post helpful? Yes | No

    Default

    I've used something like this in the past & it worked fine:

    START:
    IF PORTA.1 = 0 THEN WORK 'BUTTON PUSHED
    PAUSE 100
    LET X = X + 1
    IF X > 250 THEN RELAX 'SHUT DOWN AFTER 25 SEC
    GOTO START

    WORK:
    DO WHATEVER
    LET X = 0
    GOTO START

    RELAX:
    NAP 0
    IF PORTA.1 = 1 THEN RELAX
    LET X = 0
    GOTO START

  7. #7
    Join Date
    Jun 2006
    Location
    Greece
    Posts
    302


    Did you find this post helpful? Yes | No

    Default

    I don't know if the
    Code:
    INTCON = $88    ' enable interrupts on RB4 through RB7
    is right

  8. #8
    Join Date
    Jun 2006
    Location
    Greece
    Posts
    302


    Did you find this post helpful? Yes | No

    Default

    some one to help me;

  9. #9
    Join Date
    Jul 2005
    Posts
    78


    Did you find this post helpful? Yes | No

    Default

    INTCON=$88 looks good to me. You've got the interupts enabled, and Port B change enables also.

    Keeping in mind I've not done interupts in PBP (raw assembler yeah) I'd put the button handeling code inside the interupt handler. However, this would be a problem with the BUTTON command as that wants to be inside a loop, so maybe wake up for a while every time you see a keychange.

  10. #10
    Join Date
    Jun 2006
    Location
    Greece
    Posts
    302


    Did you find this post helpful? Yes | No

    Default

    Quote Originally Posted by ErnieM
    However, this would be a problem with the BUTTON command as that wants to be inside a loop.
    Maybe this is the my problem and i don't know how to solve.

Similar Threads

  1. Won't go back to SLEEP after 1st Interrupt
    By jellis00 in forum mel PIC BASIC Pro
    Replies: 32
    Last Post: - 29th June 2009, 10:00
  2. Battery powered applications
    By NavMicroSystems in forum Off Topic
    Replies: 7
    Last Post: - 22nd June 2009, 08:12
  3. 16F628A current high during sleep
    By Rubicon in forum mel PIC BASIC Pro
    Replies: 5
    Last Post: - 9th October 2006, 11:21
  4. Wierd sleep issue
    By orca in forum mel PIC BASIC Pro
    Replies: 3
    Last Post: - 14th March 2006, 23:06
  5. SLEEP Command and Interupts 16F648A
    By ghoot in forum mel PIC BASIC Pro
    Replies: 8
    Last Post: - 28th May 2004, 19:35

Members who have read this thread : 1

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