PDA

View Full Version : 12F629 Won't SLEEP



jderson
- 22nd August 2008, 02:18
I can't get this PIC to SLEEP with the following program:

CMCON = %00000111
TRISIO = %001100
OPTION_REG = %01000000
PIR1 = 0
GPIO = 0
@ DEVICE MCLR_OFF, INTRC_OSC, WDT_OFF, BOD_OFF, PWRT_OFF, PROTECT_OFF

'GPIO.0 =
'GPIO.1 = LED HIGH OUT
'GPIO.2 = SWITCH HIGH INPUT
'GPIO.3 = MCLR TIED HIGH
'GPIO.4 =
'GPIO.5 =

GPIO.1 = 1
PAUSE 100

INTCON = %00000000
FLAGS = 0
@SLEEP
GPIO.1 = 0

The LED goes on briefly, and then turns off. If it really does go to SLEEP, then something is waking it up. Help please!

jderson
- 22nd August 2008, 02:49
Nevermind! GPIO.2 was tied high due to a wiring error. Datasheet says this will interrupt SLEEP, regardless of INTCON settings. Works O.K. now.

jderson
- 22nd August 2008, 04:31
O.K., I give up. The name of this thread should be 12f629 wakes up unexpectedly. Here is the latest code:

CMCON = %00000111
TRISIO = %001100
OPTION_REG = %10000000
PIR1 = 0
GPIO = $000000
@ DEVICE MCLR_OFF, INTRC_OSC, WDT_OFF, BOD_OFF, PWRT_ON, PROTECT_OFF

'GPIO.0 =
'GPIO.1 = LED HIGH OUT
'GPIO.2 = SWITCH HIGH INPUT
'GPIO.3 = MCLR TIED HIGH
'GPIO.4 =
'GPIO.5 =

GPIO.1 = 1
PAUSE 100

INTCON = %00000000
FLAGS = 0
@SLEEP
NOP
GPIO.1 = 0

I have checked all pins with a scope, added decoupling capacitors on the +5 volt and MCLR pins, and the result is always the same. If the last line of the program is present, the LED goes out. So clearly something is causing the PIC to wakeup. What am I missing?

jderson
- 22nd August 2008, 17:04
Is my problem so stupid that no one will give me suggestions? I believe I have read everything, and tried many things. Please help. Thank you.

Bruce
- 22nd August 2008, 19:52
Put a space between @ and SLEEP.

Edit: I guess this bears a little more detail. What happens is by placing @SLEEP in
there it doesn't generate code for SLEEP, so you land on the next valid instruction
which would be your GPIO.1 = 0.

You don't have the @ symbol before your NOP either, so PBP creates a lable instead
of code for the NOP. @ NOP would be the correct way to insert an assembly NOP
instruction.

Archangel
- 22nd August 2008, 20:08
Is my problem so stupid that no one will give me suggestions? I believe I have read everything, and tried many things. Please help. Thank you.Might just be only BRUCE saw the problem.

jderson
- 22nd August 2008, 22:02
Thank you Bruce and Joe! The space solved the problem. Staring me in the face all along!

nomad
- 24th August 2008, 12:08
well, that explains why i couldn't get a pic to sleep either. lol