PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   Câu hỏi dsPIC thường gặp (http://www.picvietnam.com/forum/forumdisplay.php?f=69)
-   -   Tính thời gian tràn cho Timer? (http://www.picvietnam.com/forum/showthread.php?t=1389)

Musea 11-08-2007 01:21 PM

Tính thời gian tràn cho Timer?
 
Em mới học cái này, thấy anh namnq có gửi lên máy bài tutorial, em thắc mắc một chút:
1. Thời gian tràn của timer tính như thế nào?
Trong ví dụ,
void Init_TMR1(void) {
TMR1 = 0; //Xoa so dem trong TMR1
PR1 = 0xF424; //Nguong tran la 0,5 giay tuong ung
//voi clock = 32 MHz
_T1IF = 0; //Xoa co ngat cua Timer 1
T1CON = 0x8020; //Dung fcy lam clock, prescale = 1:64
_T1IE = 1; //Cho phep ngat Timer 1
Cái số 0xF424 kia tính thế nào để ra được là tràn 0.5s. Có công thức tính ko?
2. Prescale là gì? Công dụng của nó ra sao?

Có mấy câu hỏi, ai biết chỉ dùm em với.

bien_van_khat 11-08-2007 02:07 PM

Prescaler là bộ chia trước. Trước khi xung nhịp được đưa vào cho bộ đếm, thì nó đã được chia, ở ví dụ trên là chia 64.

Với clock = 32MHz, tốc độ chip sẽ là 8MIPS (trừ dòng pic33, pic24), do đó chu kỳ lệnh (Tcy) là 125ns.

Vì timer tràn khi giá trị timer = với giá trị trong thanh ghi period, nên thời gian tràn của timer sẽ được tính:
T = Tcy * prescaler * period = (125e-9 * 64 * 62500) = 0.5s

namqn 11-08-2007 05:51 PM

Trích:

Nguyên văn bởi Musea (Post 10655)
Em mới học cái này, thấy anh namnq có gửi lên máy bài tutorial, em thắc mắc một chút:
1. Thời gian tràn của timer tính như thế nào?
Trong ví dụ,
void Init_TMR1(void) {
TMR1 = 0; //Xoa so dem trong TMR1
PR1 = 0xF424; //Nguong tran la 0,5 giay tuong ung
//voi clock = 32 MHz
_T1IF = 0; //Xoa co ngat cua Timer 1
T1CON = 0x8020; //Dung fcy lam clock, prescale = 1:64
_T1IE = 1; //Cho phep ngat Timer 1
Cái số 0xF424 kia tính thế nào để ra được là tràn 0.5s. Có công thức tính ko?
2. Prescale là gì? Công dụng của nó ra sao?

Có mấy câu hỏi, ai biết chỉ dùm em với.

Với câu hỏi 1, tôi đã trả lời ở luồng sau:

http://www.picvietnam.com/forum//showthread.php?t=974

Câu hỏi 2 thì bien_van_khat đã trả lời rồi.

Thân,

Musea 11-08-2007 06:58 PM

Cảm ơn các anh nhiều lắm.

Musea 11-08-2007 07:10 PM

còn 1 vấn đề nữa, nếu clock là 32MHz, làm sao suy ra được tốc độ chip là 8MIPS?

namqn 11-08-2007 08:15 PM

Trích:

Nguyên văn bởi Musea (Post 10660)
còn 1 vấn đề nữa, nếu clock là 32MHz, làm sao suy ra được tốc độ chip là 8MIPS?

dsPIC30F dùng 4 xung clock cho 1 lệnh, do đó số MIPS (triệu lệnh/giây) = tần số clock (tính bằng MHz)/4.

PIC24 và dsPIC33F dùng 2 xung clock cho 1 lệnh, như vậy số MIPS (triệu lệnh/giây) = tần số clock (tính bằng MHz)/2.

Câu hỏi của bạn cho thấy bạn chưa hiểu lắm về vi điều khiển, cũng như chưa biết cách diễn dịch những thông tin trong datasheet (ví dụ, trong datasheet của dsPIC30F4012 tại bảng 24-16, chú ý số 3 có nói 'there are 4 Q clocks per instruction cycle'). Đề nghị bạn xem lại những vấn đề cơ bản trước khi chuyển sang dùng dsPIC.

Thân,


Múi giờ GMT. Hiện tại là 06:15 PM.

Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam