Cần trợ giúp để hiểu Wakeup Power Low trên PIC16F887


7

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 B11000000       ;Enable peripheral
                        ;interrupt
MOVWF   INTCON          ;
SLEEP                   ;Wait for interrupt
NOP                     ;


nhập mô tả hình ảnh ở đây

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

Những tụ điện giá trị nào bạn có pin gắn vào?
Oli Glaser

@Oli Glaser Tôi đã thử 100uF, 10uF và một nơi nào đó trong phạm vi pF.
Michael

Bạn đã đăng mã mẫu, nhưng nó có thể hữu ích nếu bạn đăng mã thực tế bạn đang sử dụng. Có thể có điều gì đó sai ở đó.
apalopohapa

Bạn có thể đang xóa, thay vì đặt bit TRISA ít quan trọng nhất. Nó phải là " BSF TRISA, 0 " thay vì "BCF TRISA, 0"
gmagno

@gmagno Điều đó không thể đúng. Khi pin được kết nối thủ công với mặt đất, bộ xử lý sẽ thức dậy và ngắt được tạo ra. Điều đó cho thấy tính năng ULWU đang hoạt động và PORTA được đặt cho đầu vào.
Michael

Câu trả lời:


2

Bạn có chắc là bạn đã đợi thời gian thích hợp để tụ điện xả? Sử dụng phương trình 2 trong ghi chú ứng dụng:

phương trình 2

và các giá trị tụ điện của bạn mà bạn đã cung cấp trong nhận xét của mình (x pF, 10uF, 100uF), thời gian xả sẽ là:

(5V - 0,6V) * 10pF / 140nA = 314 us giây

(5V - 0,6V) * 10uF / 140nA = 314 giây ~ = 5 phút

(5V - 0,6V) * 100uF / 140nA = 3,143 giây ~ = 52,3 phút

Có lẽ bạn không đợi đủ lâu trên các tụ điện uF của mình và pF quá nhỏ và khiến micro bị mắc kẹt trong thói quen làm gián đoạn của bạn (hoặc một cái gì đó, mà không cung cấp mã CỦA BẠN, không thể đoán được bất kỳ lỗi mã hóa nào) .

Một giá trị tốt để thử có thể nằm trong phạm vi 100 nF, sẽ thức dậy sau mỗi 3 giây, điều này có thể dễ dàng nhìn thấy bằng mắt thường cho dù nó có hoạt động hay không.

LƯU Ý: Tôi đã lấy các giá trị tôi đã sử dụng trong Công thức 2 từ các giá trị mẫu trong ghi chú Ứng dụng.


Gợi ý tốt. Tuy nhiên tôi có thể xác minh với một phạm vi mà nắp đang sạc. Và tôi không tin rằng câu trả lời cho câu hỏi tại sao pin được đặt ở mức cao với 5v sau khi nó được đặt làm đầu vào.
Michael

@Michael Bạn nên đăng mã của mình để được trợ giúp thêm. Chỉ đăng mã ví dụ không giúp chúng tôi hỗ trợ bạn rất nhiều.
justing

Có bạn là chính xác và tôi xin lỗi. Chức năng này là một phần của chương trình lớn hơn. Tôi thực sự nên đã cố gắng để hệ thống con này tự hoạt động trước khi kết hợp vào một chương trình lớn hơn. Tôi cần tạm dừng câu hỏi này một chút để tôi có thể thực hiện thêm một số công việc
Michael

Tôi đã thêm chương trình của mình vào câu hỏi theo yêu cầu.
Michael

0

Có thể có một pull-up bên trong trên pin này được kích hoạt.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.