• slider image 442
  • slider image 483
  • slider image 484
  • slider image 485
  • slider image 486
  • slider image 487
  • slider image 488
  • slider image 491
:::


Browsing this Thread:   1 Anonymous Users




« 1 (2)


Re: 時鐘問題
#11
中級會員
中級會員


查看用戶資訊
謝謝大家的指導!

因我程式的時鐘是必須長年累月的計時而定時去驅動系統定時使用故精度要求較高因我crystal 是電子街買的故精度不知!如各位所言我將再行測試!

發表於: 2004/8/18 17:28
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 時鐘問題
#12
版主
版主


查看用戶資訊
就我所知,一般crystal的精度大約是50ppm。也就是說,程式寫得正確的話,一天誤差最多86400 * 50 /1000000 秒 ~ 4.32秒。

注意一點,就我的經驗,發現,crystal外殼要接地,否則,用手摸一下,頻率就跑掉了。

最近幾天,回問題時都快下班了,所以,偷懶了一些。希望順水推舟,讓提問題者自行找出解答。一定收穫、體認更大。

過兩天比較有空。

再提示:
仔細看一下timer 1的用法,也許要注意pre-scaller。

發表於: 2004/8/18 18:35
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 時鐘問題
#13
資深會員
資深會員


查看用戶資訊
;4MHZ TMR1預除1
;使用預除2/4/8 有可能產生 1/62500~2/62500的誤差 16~32PPM



INT_TMR1:
BCF PIR1,TMR1IF
MOVLW 0XDC
ADDWF TMR1L,F
MOVLW 0X0B
SKPNC
MOVLW 0X0C
ADDWF TMR1H,F
;62500CYCLE 中斷一次
;中斷16次即一秒

發表於: 2004/8/19 11:10
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 時鐘問題
#14
版主
版主


查看用戶資訊
/* 程式功能:使用HI-TECH C,4MHz crystal,連接中階PIC, 達到每0.05秒中斷一次。

因為Interrupt latency,在使用內部(同步)中斷源時,固定為3 Tcy,
所不管主程式正在做什麼事,time-out之後,都會在相同的時機跳到
中斷處理程式。

由於不論寫值到 TMR1L或TMR1H都會使prescaler清為零,
所以,不要寫值到TMR1L或TMR1H,或者不要用prescaler會比較簡單。

如果,所接的crystal頻率,可以造成不必使用prescaler,又可以只
寫值到TMR1H,就可以不用考慮到中斷產生後,到寫值進TMR1L時,TMR1L
已經又遞增,不為零的情況。如32768Hz便滿足這個條件:不要使用prescaler,
只要讓它free-run,就會很準地每2秒進位到0000產生中斷一次;或者,只要
每次中斷填0x80到TMR1H,不要去動TMR1L,就可以每一秒中斷一次 */

#include <pic.h>
#define TMR1H_VALUE 256-(unsigned char)((4000000/4 * 0.05)/256)-1 //0.05改為0.01就可變成0.01秒中斷一次
#define TMR1L_VALUE 256-(unsigned char)(4000000/4 * 0.05) % 256 //0.05改為0.01就可變成0.01秒中斷一次
void init(void)
{
TMR1L=TMR1L_VALUE;
TMR1H=TMR1H_VALUE;
T1CON=0B00000001;
TMR1IF = 0;
TMR1IE = 1;
GIE = 1;
PEIE = 1;
}
main()
{
init();
while (1) //迴圈中的內容只是用來切換BANK,以證明計時仍然準確。
{
TRISB = 0;
PORTB ++;
TRISB = 0XFF;
PORTB ++;
}
}
interrupt void
interrupt_isr( void)
{
if (TMR1IF == 1)
{
TMR1H=TMR1H_VALUE;
TMR1L=TMR1L + TMR1L_VALUE; //以此補償中斷發生,到寫值到TMR1L的時間差要
//要注意可能因此加法,造成必須進位到TMR1H的情況
TMR1IF = 0;
NOP(); //NOP只是用來測試已
NOP(); //NOP只是用來測試已
}
else
{
NOP(); //NOP只是用來測試已
}
}

以上程式,用軟體模擬測過,很準哦!


發表於: 2004/8/20 12:59
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 時鐘問題
#15
初級會員
初級會員


查看用戶資訊
版主的這個方法粉好,我用 PIC16F877A 的試了一次,用 SIM
TEST , 哇 ! 真準 GREAT!

發表於: 2005/12/8 23:57
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部







You can view topic.
不可以 發起新主題
You cannot reply to posts.
You cannot edit your posts.
You cannot delete your posts.
You cannot add new polls.
You cannot vote in polls.
You cannot attach files to posts.
You cannot post without approval.
You cannot use topic type.
You cannot use HTML syntax.
You cannot use signature.
You cannot create PDF files.
You cannot get print page.

[進階搜尋]


:::

Microchip連結

https://www.facebook.com/microchiptechnologytaiwan/
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=13
https://mu.microchip.com/page/tmu
http://elearning.microchip.com.tw/modules/tad_link/index.php?cate_sn=1
https://page.microchip.com/APAC-PrefCenters-TW.html
http://www.microchip.com/
http://www.microchip.com/treelink
http://www.microchipdirect.com/
http://www.microchip.com.cn/newcommunity/index.php?m=Video&a=index&id=103
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=2
http://www.microchip.com.tw/Data_CD/eLearning/index.html
http://www.microchip.com.tw/RTC/RTC_DVD/
https://www.microchip.com/development-tools/
https://www.youtube.com/user/MicrochipTechnology
[ more... ]

教育訓練中心

!開發工具購買
辦法說明 [業界客戶] [教育單位]
----------------------------------
!校園樣品申請
辦法說明 [教師資格] [學生資格]
----------------------------------