English
Language : 

PIC24F16KL402 Datasheet, PDF (107/260 Pages) Microchip Technology – Low-Power, Low-Cost, General Purpose 16-Bit Flash Microcontrollers with nanoWatt XLP Technology
PIC24F16KL402 FAMILY
10.3 Ultra Low-Power Wake-up
The Ultra Low-Power Wake-up (ULPWU) on pin, RB0,
allows a slow falling voltage to generate an interrupt
without excess current consumption. This feature
provides a low-power technique for periodically waking
up the device from Sleep mode.
To use this feature:
1. Charge the capacitor on RB0 by configuring the
RB0 pin to an output and setting it to ‘1’.
2. Stop charging the capacitor by configuring RB0
as an input.
3. Discharge the capacitor by setting the ULPEN
and ULPSINK bits in the ULPWCON register.
4. Configure Sleep mode.
5. Enter Sleep mode.
The time-out is dependent on the discharge time of the
RC circuit on RB0. When the voltage on RB0 drops
below VIL, the device wakes up and executes the next
instruction.
When the ULPWU module wakes the device from
Sleep mode, the ULPWUIF bit (IFS5<0>) is set. Soft-
ware can check this bit upon wake-up to determine the
wake-up source.
See Example 10-2 for initializing the ULPWU module.
A series resistor, between RB0 and the external
capacitor, provides overcurrent protection for the
RB0/AN0/ULPWU pin and enables software calibration
of the time-out (see Figure 10-1).
FIGURE 10-1:
RB0
SERIAL RESISTOR
R1
C1
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 temper-
ature, voltage and component accuracy. The peripheral
can also be configured as a simple, programmable
Low-Voltage Detect (LVD) or temperature sensor.
EXAMPLE 10-2: ULTRA LOW-POWER WAKE-UP INITIALIZATION
//******************************************************************************
// 1. Charge the capacitor on RB0
//******************************************************************************
TRISBbits.TRISB0 = 0;
LATBbits.LATB0 = 1;
for(i = 0; i < 10000; i++) Nop();
//******************************************************************************
//2. Stop Charging the capacitor on RB0
//******************************************************************************
TRISBbits.TRISB0 = 1;
//******************************************************************************
//3. Enable ULPWU Interrupt
//******************************************************************************
IFS5bits.ULPWUIF = 0;
IEC5bits.ULPWUIE = 1;
IPC20bits.ULPWUIP = 0x7;
//******************************************************************************
//4. Enable the Ultra Low Power Wakeup module and allow capacitor discharge
//******************************************************************************
ULPWCONbits.ULPEN = 1;
ULPWCONbits.ULPSINK = 1;
//******************************************************************************
//5. Enter Sleep Mode
//******************************************************************************
Sleep();
//for Sleep, execution will resume here
 2011 Microchip Technology Inc.
DS31037B-page 107