Re: timer0計數值不正確...
|
||||
---|---|---|---|---|
資深會員
|
我用的是 18F1320,內建震盪器出廠精度 2%,4320 出廠精度是 1%,2.6.3 節有說明 OSCTUNE 這個 SFR暫存器的用法,5.9.2. 節有說明 OSCTUNE 位址在 0xF9B,F4320 的 PDF 手冊上都有,你的 PDF 可能太舊啦
發表於: 2004/10/8 11:54
|
|||
|
Re: timer0計數值不正確...
|
||||
---|---|---|---|---|
資深會員
|
我有用INTIO1模式,量過OSC2/RA6的輸出頻率Fosc/4
還滿準的 不過我在規格書的2.6章找不到調整震盪器誤差的方法 請問一下18F4320的震盪器誤差要如何修正呢?
發表於: 2004/10/8 10:50
|
|||
|
Re: timer0計數值不正確...
|
||||
---|---|---|---|---|
資深會員
|
內建震盪器的精度有多高? 1% 還是 2%?我忘了
內建震盪器誤差修正暫存器裡的數值是多少?你有檢查嗎? 可以把震盪器誤差修正到 0.25% ? ?,也可能搞爛到 10% ?? 忘了! 呵呵,小心喔 改用 CCP 中斷,就不用去算現場保護的延遲,不過,內建震盪器的精度問題還是要考慮的 Best wishes
發表於: 2004/10/8 10:18
|
|||
|
Re: timer0計數值不正確...
|
||||
---|---|---|---|---|
資深會員
|
參照:
10 kHz 等於 100 個指令週期 8.33 kz 等於 120 個指令週期 這 20 個指令週期包含中斷的前處理,現場保護,context saving, 你有做 context saving 嗎?至少總有一個 GOTO 要兩個週期 ...還有,別忘了 BTG LATD,3 也要一個指令週期,載入TMROL也要一個週期 (還是兩個?),自己再仔細算算找找吧 20 個指令週期算是不錯的啦 看看下面這段 CCS 的中斷派遣程序,保護一大堆暫存器,大約要 40 個指令週期才能進入中斷服務程式,呵呵 0018: MOVWF 05 <-- 儲存 W 001A: MOVFF STATUS,06 <-- 儲存 STATUS 001E: MOVF FSR0L,W <-- 儲存 FSR 0020: MOVWF 07 0022: MOVF FSR0H,W 0024: MOVWF 08 0026: MOVF FSR1L,W 0028: MOVWF 09 002A: MOVF FSR1H,W 002C: MOVWF 0A 002E: MOVF FSR2L,W 0030: MOVWF 0B 0032: MOVF FSR2H,W 0034: MOVWF 0C 0036: MOVF PRODL,W 0038: MOVWF 14 003A: MOVF PRODH,W 003C: MOVWF 15 003E: MOVF BSR,W 0040: MOVWF 0D 0042: MOVLB 0 0044: MOVF @00,W 0046: MOVWF 0F 0048: MOVF @01,W 004A: MOVWF 10 004C: MOVF @02,W 004E: MOVWF 11 0050: MOVF @03,W 0052: MOVWF 12 0054: MOVF @04,W 0056: MOVWF 13 0058: BTFSS INTCON.5 005A: GOTO 0064 005E: BTFSC INTCON.2 0060: GOTO 1EDE <--- 到這裡才跳到中斷服務程式去
發表於: 2004/10/8 10:02
|
|||
|
Re: timer0計數值不正確...
|
||||
---|---|---|---|---|
資深會員
|
是啊
不過我沒用除錯模式 直接用icd2把程式燒錄進18f4320後拔掉icd2連接線
發表於: 2004/10/8 9:33
|
|||
|
Re: timer0計數值不正確...
|
||||
---|---|---|---|---|
資深會員
|
請問您的開發工具是ICD2嗎?
發表於: 2004/10/7 19:54
|
|||
|
timer0計數值不正確...
|
||||
---|---|---|---|---|
資深會員
|
我用的是18f4320
系統內建4MHz震盪器 我設定timer0為8位元計數器 把數值156丟入TMR0L 使用中斷 如此一來 應該是每 4M/4/(256-100) = 10KHz 產生一次中斷 可是我用示波器去看 卻不是10KHz而是8.33KHz 我把中斷程式改到最短了 一進入中斷就 BTG LATD,3 清除中斷旗標 載入TMROL計數值 然後離開中斷 但還是一樣無法達到10KHz 請問這是什麼原因呢?
發表於: 2004/10/7 18:07
|
|||
|