Estoy intentando implementar la función "Despertador de energía ultra baja" en un pequeño proyecto PIC. La idea es que el chip se vaya a dormir y luego se despierte en el futuro por la interrupción de ULPWU.
La idea detrás de ULPWU es que conecte un condensador a este pin, cárguelo y ponga el chip en reposo. Cuando esté configurado, el pin ULPWU descargará lentamente el capacitor. Una vez que el voltaje en la tapa cae a algún valor, el chip se despierta y posiblemente genera una interrupción.
Esta nota de aplicación (PDF) de Microchip explica cómo se programa e implementa el ULPWU. Vea el Ejemplo 2 y la Figura 2 (abajo).
Ejemplo 2:
BANKSEL PORTA ;
BSF PORTA, 0 ;Set RA0 data latch
BANKSEL ANSEL ;
BCF ANSEL, 0 ;RA0 to digital I/O
BANKSEL TRISA ;
BCF TRISA, 0 ;Output high to
CALL CapDelay ;charge capacitor
BANKSEL PIR2 ;
BCF PIR2, ULPWUIF ;Clear flag
BANKSEL PCON ;
BSF PCON, ULPWUE ;Enable ULP Wake-up
BSF TRISA, 0 ;RAO to input
BSF PIE2, ULPWUIE ;Enable interrupt
MOVLW B’11000000’ ;Enable peripheral
;interrupt
MOVWF INTCON ;
SLEEP ;Wait for interrupt
NOP ;
He llevado a cabo esto, pero tengo un problema extraño.
Cuando el chip entra en suspensión, el pin ULWU (RA0) suministra 5 V. Si conecto este pin a tierra, el chip se despierta y hace lo que se supone que debe hacer.
Mi pregunta es, ¿por qué hay 5V en este pin cuando se supone que es una entrada? Si tengo este pin conectado a un capacitor cargado, el capacitor nunca se descarga (el 5V en el pin lo mantiene cargado).
EDIT
Aquí está mi código de prueba. No estoy usando un condensador en este caso. Simplemente estoy cambiando el pin RA0 de alto a bajo. La pregunta sigue siendo, ¿por qué es RA0 alto cuando se supone que está descargando un condensador para activar la función de despertador?
INCLUDE registers.asm
__CONFIG 0x2EFF20E5
ORG 0x00
GOTO MAIN
;***********************************************
;Interrupt Service Routine
;turn on an led and return
;*********************************************
ORG 0X04
ISR
BANKSEL PORTD
BSF PORTD,7
RETFIE
MAIN
CALL SETUP
CALL SETUP_WU
SLEEP
TRAP
GOTO TRAP
SETUP
BANKSEL ANSELH
CLRF ANSELH ;CONFIGURE ALL PINS FOR DIGITAL IO
CLRF ANSEL
BANKSEL TRISD ;PORTD IS OUTPUT
CLRF TRISD
BANKSEL PORTD
CLRF PORTD
RETURN
SETUP_WU
BANKSEL PORTA
BSF PORTA,0
BANKSEL ANSEL
CLRF ANSEL
BANKSEL TRISA
BCF TRISA,0
BANKSEL PIR2
BCF PIR2,2
BANKSEL PCON
BSF PCON,5
BSF TRISA,0
BSF PIE2,2
MOVLW B'11000000'
MOVWF INTCON
RETURN
END