找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 3925|回復(fù): 19
打印 上一主題 下一主題
收起左側(cè)

單片機(jī)定時(shí)器時(shí)間不準(zhǔn)

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
無(wú)論我選擇晶振頻率為12MHZ還是11.059Hz ,(用了燒錄軟件里面的那個(gè)定時(shí)器計(jì)算器) 計(jì)時(shí)器的時(shí)間都比正常的慢,幾乎沒(méi)分鐘就要慢5s,各位大佬有沒(méi)有什么好的解決辦法啊。
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:161164 發(fā)表于 2023-5-29 22:46 | 只看該作者
5/60 = 8.333% Error
正常晶振誤差沒(méi)有這么大
程序中是不是用了阻塞式延時(shí)?
回復(fù)

使用道具 舉報(bào)

板凳
ID:220661 發(fā)表于 2023-5-30 07:45 | 只看該作者
上程序吧,很大可能不是自動(dòng)賦值的。
回復(fù)

使用道具 舉報(bào)

地板
ID:879348 發(fā)表于 2023-5-30 07:57 | 只看該作者
幾分鐘慢5s不可能
回復(fù)

使用道具 舉報(bào)

5#
ID:712097 發(fā)表于 2023-5-30 08:32 | 只看該作者
要精準(zhǔn)計(jì)時(shí),推薦使用外部時(shí)鐘芯片如PCF8563,DS1302等。
回復(fù)

使用道具 舉報(bào)

6#
ID:123289 發(fā)表于 2023-5-30 08:34 | 只看該作者
好辦,再改中斷時(shí)間常數(shù)。
回復(fù)

使用道具 舉報(bào)

7#
ID:57657 發(fā)表于 2023-5-30 09:08 | 只看該作者
定時(shí)器使用自動(dòng)重裝初值模式,定時(shí)器中斷里的程序執(zhí)行時(shí)間,不得超過(guò)定時(shí)器設(shè)定的時(shí)間。
回復(fù)

使用道具 舉報(bào)

8#
ID:332444 發(fā)表于 2023-5-30 09:55 | 只看該作者
看我帖子,單片機(jī)頻率比時(shí)間芯片高一個(gè)數(shù)量級(jí),定時(shí)是很準(zhǔn)確的,有誤差大多是呆等思路和代碼引發(fā)的。
回復(fù)

使用道具 舉報(bào)

9#
ID:332444 發(fā)表于 2023-5-30 10:06 | 只看該作者
看圖片運(yùn)行1小時(shí)半始終保持差1秒同步,也就是無(wú)誤差。

回復(fù)

使用道具 舉報(bào)

10#
ID:332444 發(fā)表于 2023-5-30 10:11 | 只看該作者
這是代碼片段

回復(fù)

使用道具 舉報(bào)

11#
ID:123289 發(fā)表于 2023-5-30 10:19 | 只看該作者
1、理論上只要是晶振,做到日差1秒之類,沒(méi)有問(wèn)題。因?yàn)槿詹?秒,要求的穩(wěn)定優(yōu)于1秒/1天=1/86400,約為百萬(wàn)分子11.57。晶振振蕩穩(wěn)定度優(yōu)于它。
如何做到呢:
2、確保單片機(jī)的時(shí)基是晶振,而不是內(nèi)部RC。
3、確保定時(shí)器的時(shí)鐘源,是由晶振分頻或不分頻的時(shí)鐘脈沖。
4、建議使用自動(dòng)重裝方式(這一點(diǎn)并不是很重要的),但新手會(huì)發(fā)生中斷時(shí)常數(shù)重置不準(zhǔn)確(如中斷后走了一個(gè)脈沖再裝新的時(shí)常數(shù))。
5、中斷時(shí)常數(shù)建議取長(zhǎng)1000ms的公約數(shù),例如5、10、20、50、100ms,以便秒計(jì)算。對(duì)于新手來(lái)說(shuō),取大一點(diǎn),間隔時(shí)間長(zhǎng)一點(diǎn),發(fā)生意外的概率會(huì)少一點(diǎn)。
6、由于晶振不會(huì)輕易地恰好是12.000000MHz,或是11.0592MHz,所以第5、是做不到精準(zhǔn)的。這時(shí)你就無(wú)法實(shí)現(xiàn)日差一秒。
以12M,時(shí)鐘分頻為12,則10ms中斷需要,10000個(gè)脈沖,通常晶振不是精準(zhǔn)的12MHz,如12.000240MHZ,這樣10ms就可能是10000.2個(gè)時(shí)鐘,由于時(shí)常數(shù)只能取最接近的整數(shù)10000(實(shí)際=65536-10000),所以每次中斷最會(huì)誤:0.2個(gè)時(shí)鐘,拆成時(shí)間是0.2us。每秒中斷100次,即每秒誤差20us,一天就誤差1.728秒。這是你所能做到的極限精準(zhǔn)度。
7、日差<1秒的技巧:如果每間隔一個(gè)時(shí)間,對(duì)誤差進(jìn)行補(bǔ)償,至于間隔時(shí)間取多少,由你決定,補(bǔ)多少,則需要你知道當(dāng)前日差是多少秒。這個(gè)估計(jì)難不倒你。
8、中斷服務(wù)程序中一定要短,不能超過(guò)10ms(前例參考),否則,會(huì)丟失一個(gè)中斷,這樣計(jì)時(shí)就無(wú)法精準(zhǔn)控制了,這是重重之重!
記。褐袛喾⻊(wù)只做計(jì)時(shí),與之無(wú)關(guān)的計(jì)算,以及其它事件,只做個(gè)標(biāo)記,放到主程序中,依標(biāo)記再做。這樣中斷服務(wù)程序就短了,不會(huì)超時(shí)了。
回復(fù)

使用道具 舉報(bào)

12#
ID:1061331 發(fā)表于 2023-5-30 10:58 | 只看該作者
可以試試用軟件來(lái)調(diào)整過(guò)來(lái)
回復(fù)

使用道具 舉報(bào)

13#
ID:401564 發(fā)表于 2023-5-30 12:48 | 只看該作者
每分鐘慢5秒,我都不用分析,直接就告訴你,這是代碼不對(duì)
10個(gè)小時(shí)以內(nèi)的定時(shí)器,完全可以直接用單片機(jī)片上的RC時(shí)鐘,都不需要用到晶振
回復(fù)

使用道具 舉報(bào)

14#
ID:291668 發(fā)表于 2023-5-30 13:21 | 只看該作者
誤差太大了。好好檢查一下。
回復(fù)

使用道具 舉報(bào)

15#
ID:1079863 發(fā)表于 2023-5-30 14:44 | 只看該作者
at89c52單片機(jī)定時(shí)器的時(shí)間可能比正常的慢的原因有以下幾種123:  晶振的頻率不準(zhǔn)確,導(dǎo)致時(shí)鐘信號(hào)的周期不穩(wěn)定,影響定時(shí)器的計(jì)數(shù)速度; 定時(shí)器的工作模式設(shè)置不正確,導(dǎo)致定時(shí)器的計(jì)數(shù)范圍或重裝載值不合適,影響定時(shí)器的溢出時(shí)間; 定時(shí)器的中斷服務(wù)程序執(zhí)行時(shí)間過(guò)長(zhǎng),導(dǎo)致定時(shí)器的中斷響應(yīng)延遲,影響定時(shí)器的溢出標(biāo)志清零; 定時(shí)器的中斷優(yōu)先級(jí)設(shè)置不合理,導(dǎo)致定時(shí)器的中斷被其他高優(yōu)先級(jí)的中斷打斷,影響定時(shí)器的中斷處理; 定時(shí)器的計(jì)數(shù)源選擇錯(cuò)誤,導(dǎo)致定時(shí)器從外部引腳輸入計(jì)數(shù)信號(hào),而不是從內(nèi)部系統(tǒng)時(shí)鐘輸入,影響定時(shí)器的計(jì)數(shù)精度。

評(píng)分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

16#
ID:883242 發(fā)表于 2023-5-30 16:10 | 只看該作者
chxelc 發(fā)表于 2023-5-30 08:32
要精準(zhǔn)計(jì)時(shí),推薦使用外部時(shí)鐘芯片如PCF8563,DS1302等。

RTC的優(yōu)點(diǎn)是功耗極低,掉電依然可以運(yùn)行。缺點(diǎn)是32768的音叉晶體沒(méi)有MHz級(jí)AT-cut晶體穩(wěn)定,實(shí)際上更加不準(zhǔn)確。
回復(fù)

使用道具 舉報(bào)

17#
ID:332444 發(fā)表于 2023-5-30 16:32 | 只看該作者
運(yùn)行8小時(shí)后依然無(wú)差


回復(fù)

使用道具 舉報(bào)

18#
ID:1074206 發(fā)表于 2023-5-30 17:26 | 只看該作者
雖然51的精度不是很高,但絕不會(huì)出現(xiàn)你說(shuō)的這種情況,一定是程序里面有問(wèn)題
回復(fù)

使用道具 舉報(bào)

19#
ID:1081090 發(fā)表于 2023-5-31 13:57 | 只看該作者
可能的原因:
1、晶振未起振,程序用RC在跑
2、定時(shí)器阻塞了(比如你在10ms定時(shí)器里跑了個(gè)可能需要12ms的程序)
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表