會員登陸
帳號:

密碼:

記住我



忘記密碼?

現在註冊!
網站導航
最新下載
訪問統計 (自2012/5/3)


正在流覽:   1 名訪客



« 1 (2)


Re: 12F1822耗電速度問題
版主
註冊日期:
2004/04/30 10:53
來自 CAE, Microchip
所屬群組:
站務管理者
註冊會員
MICROCHIP
文章: 15077
等級: 73; EXP: 94
HP : 1094 / 1823
MP : 5025 / 86266
離線
[quote}以下為使用的功能:
16MHz內置振盪
Power-up timer
TMR1(8Hz,使用32768Hz低功耗外部振盪)
IOC(IOCAP=8)
所有輸入都有560ohm下拉電阻(RA1除外)
以FVR讀取ADC電源電壓,每分鐘只讀取一次


這是你之前的設定方式,個人建議是: 可以使用 Internal 1MHz RC 震盪頻率取代原先的 16MHz? MCU 是否真的需要到 16MHz 的執行速度? 這可以考慮一下。

TMR1 已經使用外部 32768Hz 的晶震,為何不直接就設預除器 除 8 後在計數 65535 後中斷一次,這樣就可以有 16 秒的時間了。
2019/11/29 11:39
轉換PDF檔 列印


Re: 12F1822耗電速度問題
資深會員
註冊日期:
2013/10/22 15:08
來自 香港
所屬群組:
註冊會員
文章: 230
等級: 14; EXP: 17
HP : 0 / 329
MP : 76 / 6457
離線
引用:
這是你之前的設定方式,個人建議是: 可以使用 Internal 1MHz RC 震盪頻率取代原先的 16MHz? MCU 是否真的需要到 16MHz 的執行速度? 這可以考慮一下。

因應SPI輸入的最低速度限制(我是使用自己撰寫的SPI輸入輸出程式碼),內振設太低會影響讀取輸入的準確度。


引用:
TMR1 已經使用外部 32768Hz 的晶震,為何不直接就設預除器 除 8 後在計數 65535 後中斷一次,這樣就可以有 16 秒的時間了。

程式內的時間模組可不能每16秒才計數一次吧...
而且因為需要準度校正,所以我在撰寫時間相關的程式所設定的中斷頻率一般不會低於8Hz,而4Hz是極限。

2019/11/29 19:51
轉換PDF檔 列印


Re: 12F1822耗電速度問題
資深會員
註冊日期:
2013/10/22 15:08
來自 香港
所屬群組:
註冊會員
文章: 230
等級: 14; EXP: 17
HP : 0 / 329
MP : 76 / 6457
離線
經過2個月,再跟進一下。

讓MCU以這個設定一直跑了兩個月,剛再測量電池電壓,仍然穩穩的在2.97V,只是如果沒有進行校準的話,時間誤差會是每天慢5秒。

就此順便一問,TMR1利用外部振盪時,實際跑出來的時間在沒校正的情況下總是比參考時間(例如氣象局的授時伺服器)的較慢,而沒一個會比較快,為什麼?

在5個有同樣硬件設定的作品中,全部都要設定在每256次中斷,就要有16-19次設定為較高的中斷頻率,才可達到平衡。用文字表達比較難,所以附圖表示。

TMR1中斷後初始值即為TMR1中斷事件(TMR1IF)發生後,立即把TMR1H和TMR1L的值重設,而61440為使用32768Hz振盪時達到8Hz中斷頻率的數值,即TMR1H=240而TMR1L=0。

if(PIR1.TMR1IF){
  
TMR1H=TMR1H_RST;
  
TMR1L=TMR1L_RST;
  
PIR1.TMR1IF=0;
...
}

//當中TMR1H_RST和TMR1L_RST為變數
//TMR1H_RST的值為239或240
//TMR1L_RST的值為1、0或255


在紅線的時間點發生中斷時,TMR1H仍是被重設為240但TMR1L則設定為1。

附加檔案:



gif  未命名.gif (10.18 KB)
32118_5e31db4693508.gif 800X640 px

1月30日 03:32:21
轉換PDF檔 列印


Re: 12F1822耗電速度問題
版主
註冊日期:
2004/04/30 10:53
來自 CAE, Microchip
所屬群組:
站務管理者
註冊會員
MICROCHIP
文章: 15077
等級: 73; EXP: 94
HP : 1094 / 1823
MP : 5025 / 86266
離線
回覆有關石英震盪器 32768Hz 不準的問題:

32768Hz 的頻率得準確度是要依廠商的規格而定,如果廠商所提供的規格是 25ppm 的話就會有誤差到 +- 2.5 秒/日。

而且溫度也是個重要的影響因素,像 Microchip 所出的萬年曆時鐘晶片 MCP7940N 本身就有內建 "On-Chip Digital Trimming/Calibration" 可以自行設定 Crystal 的誤差值及溫度影響值後自我修正頻率的差異。

引用:
只是如果沒有進行校準的話,時間誤差會是每天慢5秒


以這表現的誤差是 5秒/86400秒 = 58ppm,算是高了一點,可以試著修改 C1 & C2 的電容值及使用無溫度系數的 NPO 陶瓷電容。還有如果測試幾顆 Crystal 都是一樣的誤差值,那就可以在軟體裡修正。請自行計算是否在幾次的中斷後修改 Timer1 的值使其符合精確的計時。

1月30日 09:45:06
轉換PDF檔 列印


Re: 12F1822耗電速度問題
資深會員
註冊日期:
2007/06/05 21:45
所屬群組:
註冊會員
文章: 1052
等級: 28; EXP: 59
HP : 0 / 689
MP : 350 / 26389
離線
時間是不等人的...
也不等程式...


---+-------+-------+-------+-------+-------

加號(+)是中斷點
有些人以為(中斷)程式,是從 中斷點 加號(+) 開始執行
其實算對,也算不對....

如果你對時間不敏感,是對的...
如果你對時間很敏感,可能就會出錯...

這是什麼意思,在說什麼....

這要從中斷機制說起....
看起來 只有一個 加號(+)的中斷點,
包含很多機制與一些學問在其中....

如果我們細看(慢動作)中斷過程
(把中斷點 加號(+) 展開來看)...
+ => +A----B------
加號展開,加入A點,B點來說明....

原來中斷
---+--------------+--------------

展開
---+A----B--------+A----B--------

(如果你不變更中斷設定,中斷週期不會改變...)

A點 一樣是原來中斷位置(加號 +)
B點 你的中斷程式開始的位置

尤其你中間還會有一堆判斷
if(PIR1.TMR1IF){
// 這堿O(中斷)B點
...
}

註: B點的位置,基本上是不可控,而且有可能長短不一...

如果你在中斷點重設 timer計數器,例:
TMR1H=TMR1H_RST;
TMR1L=TMR1L_RST;

註: 在autoload的MCU中,不需重設計數器
在沒有autoload/preload的,才需要重設計數器

沒有autoload/preload,重設計數器
TMR1H = TMR1H + TMR1H_SET;
TMR1L = TMR1L + TMR1L_SET;
用修正的不是,直接設定...

為什麼是這樣....
因為你的程式碼,是在(中斷)B點重設計數器,不是在(中斷)A點
註: 有autoload/preload是在(中斷)A點,MCU幫你重設計數器...

原本中斷周期是這樣
---+A----B--------+A----B--------+....

當你在(中斷)B點,"誤設"計數器後,變成這樣
---+A----B------------+A----B------------+...

原本的中斷周期變.......長......長了

也就是你觀察結果,永遠都變慢,不變快....

以上供參考...

1月30日 10:37:52
轉換PDF檔 列印


Re: 12F1822耗電速度問題
資深會員
註冊日期:
2013/10/22 15:08
來自 香港
所屬群組:
註冊會員
文章: 230
等級: 14; EXP: 17
HP : 0 / 329
MP : 76 / 6457
離線
引用:
可以試著修改 C1 & C2 的電容值及使用無溫度系數的 NPO 陶瓷電容

針對TMR1外部振盪電路我一律使用20pF的NPO陶瓷電容。這部分我也曾經參看過一些文章說明NPO在這類型電路的應用和重要性。使用較小的電容值可以減少中斷之間的額外延遲,但也會降低穩定性。

引用:
還有如果測試幾顆 Crystal 都是一樣的誤差值,那就可以在軟體裡修正。請自行計算是否在幾次的中斷後修改 Timer1 的值使其符合精確的計時。

經過5年多以來的持續更新和測試,誤差值都不一,只是在軟體上設定的校準值,幾個作品之間差異都很小(最小16,最大19),近期我針對程式架構增設更精準的校正方式。而且在ISR內還有其他中斷式,即例如TMR0、TMR2、TMR4以及IOC等等,以及中斷判斷式的次序排列,也會影響ISR捕捉TMR1中斷事件的時機。
通常每次修改完涉及到TMR1中斷的程式碼後,都需要花最少兩星期來觀察和校準,有時可能要花上一個月。


回覆jason680的解說:
明白你的意思,而且了解到由MCU在偵測到中斷到跑進去ISR執行,是有時間差距,也就是MCU永遠無法即測即跑。

就你所說的,時間點A和B永遠都有個最小差距,而且是無法進一步縮小,也是中斷在沒校正的情況下只會越跑越跟不上去。

2月02日 17:19:18
轉換PDF檔 列印


Re: 12F1822耗電速度問題
版主
註冊日期:
2004/04/30 10:53
來自 CAE, Microchip
所屬群組:
站務管理者
註冊會員
MICROCHIP
文章: 15077
等級: 73; EXP: 94
HP : 1094 / 1823
MP : 5025 / 86266
離線
談到校正,有一種叫 TCXO (溫度補償控制的石英振盪器) 其準確度可達 5ppm。可以用一個 1MHz TCXO 做一個標準頻率輸出的電路板用來校正 Timer1 的 32768Hz 的誤差。 因為 TCXO 是很準確的頻率可以做為校正的基礎,在固定的時間內 (1分鐘) 測量 32768Hz 的誤差值,並將此誤差值寫到內部的 EEPROM。這樣每次開機的時候就可用這校正值來修正 32768Hz 的誤差。

麻煩的是每個產品都要做校正,不過這也算是最便宜的作法。

2月03日 11:32:13
轉換PDF檔 列印



« 1 (2)



無法在此發表文章
可以在此觀看文章
無法回覆文章
無法編輯自己的文章
無法刪除自己的文章
無法發起投票調查
無法在此投票
無法上傳附加檔案
無法不經審核直接發表文章

[進階搜尋]


搜尋
Microchip連結
產品技術問題產品技術支援專線:0800-717718 台北02-25088600 新竹03-5778366 Ext. 8600 高雄07-2137830 MicrochipDIRECT 專線: 07-2137830
Powered by XOOPS © 2001-2012 The XOOPS Project