|
Tài trợ cho PIC Vietnam |
Câu hỏi dsPIC thường gặp Những vấn đề liên quan tới dsPIC30 và dsPIC33 và PIC24 |
|
Ðiều Chỉnh | Xếp Bài |
|
14-03-2007, 07:13 PM | #1 |
Đệ tử 2 túi
Tham gia ngày: Mar 2006
Bài gửi: 44
: |
Xác định thời gian cho thanh ghi định thời
Chào bác namqn!
Em có tìm hiểu vidu2_x.c của bác nhưng em không hiểu làm sao bác xác định được thời gian cần ghi vào thanh ghi của bộ định thời. Như ở Vidu2_2.c bác bảo để trễ 1s thì nạp vào thanh ghi của bộ định thời 1 giá trị 0x7A12 (không biết em có nhớ chính xác không). Bác có thể nói rõ cách tính thời gian để ghi vào thanh ghi cho bộ định thời được không! Cảm ơn bác trước! |
14-03-2007, 08:54 PM | #2 |
Trưởng lão PIC bang
|
Một sự thực mà tôi đã không chú ý đến là các công thức tính toán cho các bộ định thời của dsPIC không được đề cập đến trong datasheet cũng như trong Family Reference Manual. Nhân câu hỏi của bạn vtt, tôi sẽ trình bày chi tiết luôn để các bạn khỏi phải hỏi lại nhiều lần.
Các timer trong dsPIC được chia thành 3 loại chính: loại A, B, và C. Ngoài chức năng như một timer bình thường 16-bit, mỗi loại còn có các chức năng đặc biệt khác. Chẳng hạn, loại A có thể dùng clock của bộ dao động công suất thấp 32 kHz trên chip (cho đồng hồ thời gian thực chẳng hạn), và có thể dùng clock ngoài. Một timer loại B có thể nối với một timer loại C để tạo thành timer 32-bit, ngoài ra một số timer loại C có thể dùng để kích hoạt sự chuyển đổi A/D. Nếu chỉ dùng như các timer bình thường 16-bit thì các công thức dưới đây áp dụng cho tất cả các loại timer nói trên (chúng ta chỉ quan tâm đến các khối Prescaler, TMRx, Comparator, và PRx trong sơ đồ khối của các timer). Tất nhiên tôi đang xét trường hợp dùng clock của chip đưa vào timer. Tdelay = (Prescaler)x(PRx)x(Tcy) = (Prescaler)x(PRx)/(fcy) Tdelay: thời gian cần làm trễ Prescaler: giá trị nạp vào bộ chia trước (= 1, 4, 64, hay 256) PRx: giá trị nạp vào thanh ghi PRx, x là số hiệu timer (x = 1 - 5) Tcy: thời gian của một chu kỳ máy (thực thi lệnh) fcy: tần số thực thi lệnh Như vậy, nếu biết/chọn trước thời gian làm trễ thì có thể tính giá trị cần nạp vào thanh ghi PRx như sau: PRx = (Tdelay)x(Fcy)/(Prescaler) Lấy ví dụ bằng số, trong tập tin nguồn Vidu2-2.c, tôi dùng fcy = 8 MIPS = 8000000, và Prescaler = 1:256, do đó để có thời gian làm trễ là 1 giây thì cần nạp giá trị sau vào PRx: PRx = (1)x(8000000)/(256) = 31250 = 0x7A12 Hy vọng các bạn đã rõ cách tính. 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 thay đổi nội dung bởi: namqn, 28-03-2007 lúc 01:02 AM. |
|
|