PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > dsPIC - Bộ điều khiển tín hiệu số 16-bit > Câu hỏi dsPIC thường gặp

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

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
Prev Previous Post   Next Post Next
Old 14-03-2007, 08:54 PM   #2
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
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.
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
 


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


Múi giờ GMT. Hiện tại là 04:35 AM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam