xin hỏi về cách tính chính xác trong timer0 của pic18F4550
Code:
#include <18F4550.h> Đoạn code trên dùng để đếm thời gian trong 1s,công thức tính overflow timer0 theo mình được biết (tính theo trường hợp trên ) 1.bộ chia timer0 mình sử dụng là 1:256 2.chu kỳ lệnh là 4/48 000 000 3.bộ đếm timer sử dụng 16 bit(2^16 = 65536 ) Set_timer0(a); công thức tính a để timer tràn sau 1 giây theo mình được biết là : 256 * (65536 - a) * 4 / 48 000 000 = 1 (s) ---> a = 18661 nhưng khi set_timer với giá trị 18661 khi test thử ở mạch thật thì chậm hơn hẳn 2/3 so với thời gian thực,sau đó chỉnh lại a = 34286 (như code ở trên) thì đếm đúng 1s,nhưng như vậy thì công thức tính overflow của timer bị sai so với lý thuyết Mong các bạn giúp mình công thức đúng để áp dụng các trừong hợp khác tốt hơn Xin chân thành cảm ơn |
Trích:
Thân, |
Trích:
|
Trích:
Thân, |
cảm ơn anh đã trả lời,em sẽ kiểm tra lại
|
sau khi kiểm tra lại thì trong help của CCS C có ghi rõ là CPUDIV2 : System Clock by 2.tức là vẫn chia 2.kiểm tra trên mạch thật thì cấu hình như trên thì 32Mhz chỉ đúng trong trường hợp tràn timer sau 1 giây.hix.Mong nhận được sự giúp đỡ của mọi người
|
Trích:
http://www.ccsinfo.com/forum/viewtop...ghlight=cpudiv Bạn xem thêm Register 25-1 (mục 25.1) trong datasheet của PIC18F4550, phần tương ứng với chế độ HSPLL. Theo tôi, CPUDIV2 tương ứng với <CPUDIV1:CPUDIV0> = '01' (96 MHz / 3), còn CPUDIV1 tương ứng với <CPUDIV1:CPUDIV0> = '00' (96 MHz / 2). Bạn cứ thử với CPUDIV1 và a = 18661 xem. Thân, |
cảm ơn anh đã giúp đỡ
|
Pic8f4550
Trích:
theo mình thì công thức tính như trên là đúng rồi. bạn nên đăt fuses bits như sau với thạch anh 20Mhz : #FUSES HSPLL,PLL5 ,CPUDIV1,...tùy chọn sẽ cho kết quả chính xác 1 giây. công thức tính thời gian ngắt tràn timer0 ở chế độ 16 bits. Overflow time = 4 x TOSC x Prescaler x(65535 - TMR0) . với tần số thạch anh ngoài là 20Mhz thì Tosc = 1/20000000 = 0.05 us. như vậy nếu dùng timer0 ở chế độ 16 bits thì : Overflow timer = 4*0.05 * 256 *( 65535-set_timer0(a) ) = ?? a= 46000 ==>> Overflow time= 51.2*(65535-46000) = 999936 us =1 sec. thân chào! |
Múi giờ GMT. Hiện tại là 04:24 AM. |
Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam