Once again I am at my wits end and need some help.
I'm trying to set up a PIC10F222 so that it will sleep and then wake up on a pin change at GPIO.3 or at GPIO.0. The datasheet says that wake-ups are possible using these two pins as well as GPIO.1. I have both GP3 and GP0 on pull-up resistors, and I bring the pins low to effect the wake-up. I can get the PIC to wake-up on with a change on GP3, but not on GP0. I have set these pins as input and I have the processor read them before going to sleep. I also have the WDT off and MCLR off (set in the INC file, not in the code). Here is the code I'm working with. Again, a low signal on GP3 (aliased as INT in the code below) wakes the PIC, but a low signal on GP0 (aliased as SDA) does nothing. Can anyone see what I have overlooked?
Code:
'Alias pins
INT VAR GPIO.3 'interupt (wake-up) pin (pin 6, input only)
SDA VAR GPIO.0 'I2C DATA PIN (pin 1),
SCL VAR GPIO.2 'I2C CLOCK PIN (pin 4)
LIGHT Var GPIO.1 'INPUT FROM LIGHT SENSOR (pin 3)
'SET UP VARIABLES
W0 VAR word 'GENERAL USE
B0 VAR BYTE 'GENERAL USE
B1 vAR BYTE 'GENERAL USE
CNT VAR BYTE 'USED FOR COUNTING minutes (4 bits plus one other bit)
'set initial CNT and W0
CNT = 0
w0 = 32768 '%1000000000000000 'SETS FLAG TO 1 AND REST ZERO
PAUSE 10000
logdata:
'Set up for sleep immediately
OPTION_REG = %10010000 'SET OPTION REGISTER FOR WAKE ON CHANGE
TRISIO = $00001001 'wake ups on GP3 and GP0
B0 = GPIO 'read pins to establish change state.
@SLEEP 'Zzzzzzzzzzzzzzzzz
'Pic will sleep until an interrupt from the clock or I2C bus
'Data interface signal from 2nd PIC will pull both SDA and SCL low
IF sDA = 0 tHEN 'if the data collector is plugged in then
iF SCL = 0 THEN
CNT = 0 'reset count
TRISIO = $00001111 'all inputs, relinquish I2C bus
REPEAT 'wait until data collection is done
PAUSE 100
uNTIL LIGHT = 1 'light signal restarts logging
cnT = 0 'reset count
GOTO logdata
eNDIF
eNDIF
Bookmarks