Tôi đang cố gắng thực hiện tính năng "Ultra Low Power Wake Up" trên một dự án PIC nhỏ. Ý tưởng là con chip sẽ đi vào giấc ngủ, và sau đó sẽ bị đánh thức trong tương lai bởi sự gián đoạn của ULPWU.
Ý tưởng đằng sau ULPWU là bạn kết nối một tụ điện với pin này, sạc nó và đặt chip vào trạng thái ngủ. Khi được cấu hình, chân ULPWU sẽ xả từ từ tụ điện. Khi điện áp trên nắp giảm xuống một giá trị nào đó, chip sẽ thức dậy và có thể tạo ra một ngắt.
Ghi chú ứng dụng này (PDF) từ Microchip giải thích cách thức ULPWU được lập trình và thực hiện. Xem ví dụ 2 và hình 2 (bên dưới).
Ví dụ 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 ;
Tôi đã thực hiện điều này nhưng bị mắc kẹt với một vấn đề kỳ lạ.
Khi chip đi ngủ, có 5V được cung cấp bởi chân ULWU (RA0). Nếu tôi kết nối pin này với mặt đất, con chip sẽ thức dậy và làm những gì nó phải làm.
Câu hỏi của tôi là, tại sao có 5V trên pin này khi nó được coi là một đầu vào? Nếu tôi có chân này được kết nối với một tụ điện tích điện, tụ điện không bao giờ xả (5V trên chân đang giữ cho nó được sạc).
EDIT
Đây là mã kiểm tra của tôi. Tôi không sử dụng một tụ điện trong trường hợp này. Tôi chỉ đơn giản là chuyển đổi pin RA0 từ cao xuống thấp. Câu hỏi vẫn còn, tại sao RA0 High khi nó được cho là xả một tụ điện để kích hoạt tính năng đánh thức?
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