I have not tested this since I don't have a 12F675, but something like this should work. You might need to tweak the internal CVref settings.
Hook your sensor output to GPIO.1 Vin-. When your sensor outputs 1V (or anything > CVref) it should wake-up from sleep.
If you don't have PBP3 just get rid of the config line, and use what you have.
Code:
#CONFIG
__config _INTRC_OSC_NOCLKOUT & _BODEN_OFF & _MCLRE_OFF & _WDT_OFF & _CP_OFF
#ENDCONFIG
DEFINE OSCCAL_1K 1 ' load internal osc calibration value
LED VAR GPIO.2 ' LED output
CmpFlag VAR PIR1.3 ' alias comparator interrupt flag bit
CoutBit VAR CMCON.6 ' CMCON.6 is set while voltage on Vin- > CVref
ANSEL = 0 ' disable A/D
GPIO = 0 ' LED off on POR
TRISIO = %00000010 ' GPIO.1 = input for Vin- comparator, rest outputs
VRCON = %10100111 ' internal CVref enabled, low range.
' CVref = (VR3:VR0 / 24) * VDD.
' with (VR3:VR0) = 7 we have (7/24) * 3.3V
' so internal CVref = 0.9625V
' a voltage > 0.962V on Vin- (GPIO.1) will set COUT,
' set the comparator interrupt flag, and wake us up.
CMCON = %00010100 ' Comparator w/o Output and with Internal Reference
PIR1 = 0 ' clear flags before enabling comparator int
PIE1 = %00001000 ' comparator interrupt enabled.
INTCON = %01000000 ' enable peripheral interrupts for comparator
' global interrupts disabled, so there's no jump to
' an interrupt vector. We're just waking-up from sleep.
TEST:
WHILE CoutBit ' wait for COUT to clear. This clears when the voltage on
WEND ' Vin- falls below the internal CVref
CmpFlag = 0 ' clear comparator interrupt flag bit before entering sleep
@ SLEEP ' should sleep until comparator trips
HIGH LED
PAUSE 500
LOW LED
GOTO TEST
end
Bookmarks