Microchip Technology ARD00385 Data Sheet

Page of 570
PIC18F87K90 FAMILY
DS39957D-page 66
 2009-2011 Microchip Technology Inc.
4.7
Ultra Low-Power Wake-up
The Ultra Low-Power Wake-up (ULPWU) on pin, RA0,
allows a slow falling voltage to generate an interrupt
without excess current consumption. 
To use this feature:
1.
Charge the capacitor on RA0 by configuring the
RA0 pin to an output and setting it to ‘1’.
2.
Stop charging the capacitor by configuring RA0
as an input.
3.
Discharge the capacitor by setting the ULPEN
and ULPSINK bits in the WDTCON register.
4.
Configure Sleep mode.
5.
Enter Sleep mode.
When the voltage on RA0 drops below V
IL
, the device
wakes up and executes the next instruction.
This feature provides a low-power technique for
periodically waking up the device from Sleep mode.
The time-out is dependent on the discharge time of the
RC circuit on RA0.
When the ULPWU module wakes the device from
Sleep mode, the ULPLVL bit (WDTCON<5>) is set.
Software can check this bit upon wake-up to determine
the wake-up source.
Se
 for initializing the ULPWU module.
EXAMPLE 4-1:
ULTRA LOW-POWER 
WAKE-UP INITIALIZATION
A series resistor, between RA0 and the external capac-
itor, provides overcurrent protection for the RA0/AN0/
ULPWU pin and enables software calibration of the
time-out (see 
).
FIGURE 4-9:
ULTRA LOW-POWER 
WAKE-UP INITIALIZATION
A timer can be used to measure the charge time and
discharge time of the capacitor. The charge time can
then be adjusted to provide the desired delay in Sleep.
This technique compensates for the affects of
temperature, voltage and component accuracy. The
peripheral can also be configured as a simple
programmable Low-Voltage Detect (LVD) or
temperature sensor.
//***************************
//Charge the capacitor on RA0
//***************************
TRISAbits.TRISA0 = 0;
PORTAbits.RA0 = 1;
for(i = 0; i < 10000; i++) Nop();
//*****************************
//Stop Charging the capacitor
//on RA0
//*****************************
TRISAbits.TRISA0 = 1;
//*****************************
//Enable the Ultra Low Power
//Wakeup module and allow
//capacitor discharge
//*****************************
WDTCONbits.ULPEN = 1;
WDTCONbits.ULPSINK = 1;
//For Sleep
OSCCONbits.IDLEN = 0;
//Enter Sleep Mode
//
Sleep();
//for sleep, execution will
//resume here
Note:
For more information, see AN 879, “Using
the Microchip Ultra Low-Power Wake-up
Module”
 (DS00879).
RA0/AN0/ULPWU