Ðề tài: Capture Mode
View Single Post
Old 24-05-2007, 07:59 PM   #4
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trích:
Nguyên văn bởi nguyen.geo View Post
...
Con van de anh bao la 2 Delay:
Em xin duoc noi the nay anh nhe. Theo em doc trong Datasheet thi Sau moi lan do xung va khi hoan tat qua trinh thi co bao ket thuc la PIR1<2> tuc la CCP1IF se duoc set. Va no se khong bi xoa Neu khong co lenh xoa boi phan men. Va khi co CCP1IF =1 thi che do Capture Mode dung hoat dong va doi cho den khi CCP1IF duoc xoa. Trong thoi gian CCP1IF chua duoc xoa. thi em doc gia tri cua CCPR1H ra PortB va quan sat bang mat qua may con LED tre 1 khoang thoi gian du de nguoi quan sat thay duoc gia tri trong CCPR1H thi tiep tuc truyen gia tri CCPR1L ra PortB de quan sat. khi quan sat lan 2 nay xong dong thoi cung la luc ta bat dau vong lap chuong trinh tiep theo. Ta xoa Thanh ghi CCPR1x va PIR1<CCP1IF> = 0.
Chac le den day em da tra loi cau hoi Ve di lay cua anh roi dung khong. Va la no se khong anh huong den chuong ket qua chuong trinh.

Con cau hoi ? The nao moi la chay ?
Hien tai no chay rat linh tinh va so dem trong CCPR1x rat linh tinh khi thi chi 2.000 khi thi 40-50.000 trong khi do xung cua em phat la xung chuan 10Khz va sai so xung nay chi la 1 xung (neu co).
...
Bạn hiểu là như vậy, còn trong datasheet thì có đoạn sau (mục 8.1):
Trích:
The type of event is configured by control bits, CCP1M3:CCP1M0 (CCPxCON<3:0>). When a capture is made, the interrupt request flag bit, CCP1IF (PIR1<2>), is set. The interrupt flag must be cleared in software. If another capture occurs before the value in register CCPR1 is read, the old captured value is overwritten by the new value.
Như vậy datasheet không hề nói đến chuyện CCP1IF được set thì quá trình capture bị ngưng, mà họ chỉ nói rằng giá trị của CCPR1 sẽ bị ghi đè nếu có một capture khác xảy ra.

Kết quả chạy chương trình của bạn cũng xác nhận điều đó, vì số đếm bạn đọc ra được nhảy lung tung. Nghĩa là nó capture liên tục, và nếu bạn xóa CCP1RH và CCP1RL ở những mốc thời gian khác nhau thì bạn sẽ capture được những giá trị khác nhau.

Tôi gợi ý thế này, trước tiên bạn chỉ capture đúng một lần và hiển thị kết quả. Thử chạy nhiều lần chương trình đó xem kết quả thế nào. Sau đó bạn thử capture lần đầu, sau đó tắt Timer 1, hiển thị kết quả, và bật Timer 1 trở lại để bắt đầu capture lần thứ hai, so sánh kết quả. Tạm thời là như thế.

Thân,
__________________
Biển học mênh mông, sức người có hạn.

Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
http://www.picvietnam.com/forum/showthread.php?t=1263
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn