Ich versuche, die Funktion "Ultra Low Power Wake Up" in einem kleinen PIC-Projekt zu implementieren. Die Idee ist, dass der Chip in den Ruhezustand wechselt und in Zukunft vom ULPWU-Interrupt geweckt wird.
Die Idee hinter der ULPWU ist, dass Sie einen Kondensator an diesen Pin anschließen, ihn aufladen und den Chip in den Ruhezustand versetzen. Wenn konfiguriert, entlädt der ULPWU-Pin den Kondensator langsam. Sobald die Spannung an der Kappe auf einen bestimmten Wert abfällt, wacht der Chip auf und erzeugt möglicherweise einen Interrupt.
In diesem Anwendungshinweis (PDF) von Microchip wird erläutert, wie die ULPWU programmiert und implementiert wird. Siehe Beispiel 2 und Abbildung 2 (unten).
Beispiel 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 ;
Ich habe dies durchgeführt, stecke aber mit einem seltsamen Problem fest.
Wenn der Chip in den Ruhezustand wechselt, werden 5 V vom ULWU-Pin (RA0) geliefert. Wenn ich diesen Pin mit Masse verbinde, wacht der Chip auf und macht das, was er tun soll.
Meine Frage ist, warum gibt es 5V an diesem Pin, wenn es ein Eingang sein soll? Wenn ich diesen Pin an einen geladenen Kondensator angeschlossen habe, entlädt sich der Kondensator nie (die 5 V am Pin halten ihn geladen).
BEARBEITEN
Hier ist mein Testcode. In diesem Fall verwende ich keinen Kondensator. Ich schalte einfach den RA0-Pin von hoch auf niedrig. Es bleibt die Frage, warum RA0 High ist, wenn ein Kondensator entladen werden soll, um die Weckfunktion auszulösen.
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