|
技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機 | DSP技術(shù) | MCU技術(shù) | IC 設計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
我的時鐘 |
作者:zhangxu198 欄目:單片機 |
我做了一個時鐘,運行了還不到12小時,就有慢了四秒了,不知道什么原因,我已經(jīng)把重新加載TH0和TL0的時間算進去了,怎么還會慢?請高手指點,難道要把中斷里面的指令時間全算進去嗎?謝謝 |
2樓: | >>參與討論 |
作者: zgl7903 于 2006/9/1 19:44:00 發(fā)布:
個人見解 晶振不準,LZ的時間相對精度和晶振精度是一樣的,設法匹配晶振要求的電容,或者使用微調(diào)電容來修整 |
3樓: | >>參與討論 |
作者: 5880527 于 2006/9/1 21:39:00 發(fā)布:
你把那定時中斷的開頭部分貼出來大家分析一下看看 |
4樓: | >>參與討論 |
作者: conwh 于 2006/9/1 22:11:00 發(fā)布:
后面修正一下 |
5樓: | >>參與討論 |
作者: taoest 于 2006/9/2 0:05:00 發(fā)布:
自動重載 要用自動重載, 你的時鐘肯定還有按鍵、顯示、通信什么的,總會有偶然的打斷重要程序。 如果用自動重載的定時器,就不怕了。 如果還是不準,那就是晶體的問題了。 通常的晶體誤差《200ppm 如果用普通的晶體,12小時誤差4秒,一點都不奇怪。 |
6樓: | >>參與討論 |
作者: starlite_jason 于 2006/9/2 15:14:00 發(fā)布:
用單片機做時鐘,肯定有這個問題了。。。 主要是由晶體引起。。。頻率漂移 |
7樓: | >>參與討論 |
作者: zhangxu198 于 2006/9/2 16:09:00 發(fā)布:
現(xiàn)在已經(jīng)慢了二十秒了,我運行了38小時 zg17903說的微調(diào)電容哪有?是不是變?nèi)荻䴓O管? taoest說的打斷重要程序,我給定時0優(yōu)先級最高了,應該不會。你說的自動重裝,我把重新加載的時間算進了,我想應該也可以。 starlite_jason說的頻率漂移,我用的是那種外形是鐵的那種。上面寫的精度是12.0000M,假使由于溫度等有這個問題出現(xiàn)也應該不會這么大吧? 5880527說的中斷程序我寫在下面了,請幫忙看一下呀,謝謝 多謝各位關(guān)注! T0_INT: MOV TH0,#HI ;加載高字節(jié) MOV TL0,#LO ;加載低字節(jié) INC DEDA MOV A,DEDA CJNE A,#CU,TT1 ;到0。5S嗎?到了LED取反 CPL WLED MOV DEDA,#0 INC DEDA1 MOV A,DEDA1 CJNE A,#CO,TT1 ;是否到了1S? MOV DEDA1,#0 INC SEC MOV A,SEC CJNE A,#60,TT1 ;是否一分鐘到了 MOV SEC,#0 INC MIN MOV A,MIN CJNE A,#60,TT1 ;是否一小時到了 MOV MIN,#0 INC HOUR MOV A,HOUR CJNE A,#24,TT1 ;是否24H到了 MOV SEC,#0 MOV MIN,#0 MOV HOUR,#0 TT1: RETI |
8樓: | >>參與討論 |
作者: squarelook 于 2006/9/2 17:20:00 發(fā)布:
不要依靠單片機自己來計時 誤差很大,加個PCF8563,效果會很好! |
9樓: | >>參與討論 |
作者: ymc8 于 2006/9/3 16:47:00 發(fā)布:
可能很正常 請告訴時鐘頻率、定時器初值。 沒有對中斷響應時間進行補償(可能每次中斷都不一樣) to squarelook:“不要依靠單片機自己來計時,誤差很大”嚴重不同意,依靠單片機自己來計時完全可以做到誤差只取決于晶振誤差,甚至可以做到比只使用硬件電路的(同一個晶振)的時鐘精度更高(因為可以采用軟件溫度補償?shù)鹊龋,許多產(chǎn)品已在應用。 |
10樓: | >>參與討論 |
作者: 5880527 于 2006/9/3 20:49:00 發(fā)布:
你的程序理論上就有誤差 同意樓上的,樓主你沒考慮到每次中斷電腦響應的時間不一致,你需要每次進入中斷時對TH0,TL0進行補償,一般只補償TL0就可以了,比如MOV A,TL0 ADD A,#LO MOV TL0,A MOV TH0,#HI(TH0如果有進位也要補償),這里的L0的值要進行嚴格計算或者試探了。單片機做的時鐘應該可以精度很高,在軟件方面理論上可以沒有誤差。我沒做過電子時種。 |
11樓: | >>參與討論 |
作者: 5880527 于 2006/9/3 20:58:00 發(fā)布:
另外 樓上有幾位提到了晶振的精度影響,我從沒關(guān)心過這個,不知道它的誤差是不是固定的,還是隨溫度有很大漂移,我的感覺是在溫度變化不大的情況下那個影響很小吧。如果溫漂很小,那在程序上對晶振的原始誤差進行補償后做出來的時鐘應該比我們常用的墻上掛的鐘還準的。 |
12樓: | >>參與討論 |
作者: 5880527 于 2006/9/3 21:27:00 發(fā)布:
我也反對squarelook 很多時候不是外部時鐘可以解決的,比如在時間短到秒以下級別時(這樣的情況對單片機來說最多了),你通過外部時鐘總需要通訊或查詢什么的吧,那也要時間啊。而且那要增加成本的,你怎么不用個GPS來定時呢 |
13樓: | >>參與討論 |
作者: dellric 于 2006/9/4 1:19:00 發(fā)布:
沒有補償 MOV TH0,#HI ;加載高字節(jié) MOV TL0,#LO ;加載低字節(jié) 這已經(jīng)造成誤差,建議使用重裝載,或者把LO加2試一下 |
14樓: | >>參與討論 |
作者: mgarm 于 2006/9/4 8:26:00 發(fā)布:
程序問題,單片機可以實現(xiàn)時鐘的。 |
15樓: | >>參與討論 |
作者: 后學 于 2006/9/4 8:54:00 發(fā)布:
如果你要求時間比較準確,還是用RTC更好些, 如果你要求時間比較準確,還是用RTC更好些,比如DS12C887, 用單片機無法排除一些外部的偏差, 比如晶振什么的,僅僅依靠程序沒法做到很準確的時鐘,~~ |
16樓: | >>參與討論 |
作者: starlite_jason 于 2006/9/4 9:19:00 發(fā)布:
晶體震蕩頻率很容易受到外界的影響 晶體震蕩的頻率是比較穩(wěn)定的,它對溫度的敏感也不大,除了溫度以外,負載電容的影響也很大,所以假設在一個恒溫的狀態(tài)下,基本可以認為晶體的震蕩是穩(wěn)定的,但是它的誤差是存在的,通常可以通過調(diào)節(jié)負載電容來減小這個誤差,所以12個小時慢4秒是非常正常的,你可以通過軟件來做這個補償,但是換了另外的一塊PCB,情況又會不同,所以如果你要非常精確的時間,還是要用RTC,RTC也是需要校準的,但它本身存在一些校準電路,所以存在的誤差比晶體震蕩產(chǎn)生的要小,通過外部的電容補償,可以把精度縮小到一個月一秒或更高 |
17樓: | >>參與討論 |
作者: liukejj 于 2006/9/4 11:16:00 發(fā)布:
re 晶震的頻率在常溫下應該波動不大,我個人認為是電容的問題,還有程序是可以通過補償方式校準的,可以設計一個動態(tài)補償程序,這樣就算換了板子或者環(huán)境誤差應該都不大 |
18樓: | >>參與討論 |
作者: gyt 于 2006/9/4 11:26:00 發(fā)布:
很明顯是程序有問題 沒有進行補償。補償以后,可以做到很準的。 |
19樓: | >>參與討論 |
作者: zhangxu198 于 2006/9/4 20:04:00 發(fā)布:
回復5880527 你說的補償,我也想過這個問題,不過按你上面這樣的寫法好像越來越慢了,本來慢了是慢了四秒,到時可能慢得更多了,是不是應該把ADD改成SUBB?多謝你的指點。 |
20樓: | >>參與討論 |
作者: aearo 于 2006/9/4 20:34:00 發(fā)布:
要算指令 周期 的 是否 有顯示延時程序 這個程序要注意 |
21樓: | >>參與討論 |
作者: 5880527 于 2006/9/4 20:34:00 發(fā)布:
肯定該用ADD,追上延遲的時間 用我說的那個方法補償時,你的LO要比原來程序里的大一點才是,可能要大個2、3吧,因為在進行補償時定時器也在運行 |
22樓: | >>參與討論 |
作者: xwj 于 2006/9/4 21:16:00 發(fā)布:
51的定時器是向上加的,這時的加就是減 設 中斷間隔為A(常量) 進 中斷前TL0已經(jīng)計數(shù)了x(不確定) 修正程序需執(zhí)行時間為 B個周期(常量,可以有指令確定) 中斷觸發(fā)值10000H(16位,也是常量) 那么怎么去消除x的影響呢? 這就不用多說呢吧? 不明白的話 自己去仔細想想哦 |
23樓: | >>參與討論 |
作者: 5880527 于 2006/9/4 22:15:00 發(fā)布:
肯定應該是ADD,追回延遲的時間 LO比你以前程序的要大2左右,我沒算過 |
24樓: | >>參與討論 |
作者: ymc8 于 2006/9/5 13:10:00 發(fā)布:
普通的RTC并不比單片機做得準確,只是停電處理容易 |
25樓: | >>參與討論 |
作者: yuntian 于 2006/9/5 18:07:00 發(fā)布:
建議你這樣. 永遠不要寫TH0,TL0,只是讀中斷標志就可以了,溢出后,用一個計數(shù)器加上65536就可以了.這樣精度只取決于晶振了. |
26樓: | >>參與討論 |
作者: ritamm66 于 2006/9/5 18:15:00 發(fā)布:
沒有時鐘芯片始終是不準的 |
27樓: | >>參與討論 |
作者: dyidtm 于 2006/9/5 18:59:00 發(fā)布:
中斷響應是否立即?為什么不用T2? |
28樓: | >>參與討論 |
作者: NE5532 于 2006/9/5 20:58:00 發(fā)布:
用RTC吧,看我的。 http://blog.21ic.com/more.asp?NAME=NE5532&id=15629 誤差在10min/year內(nèi) |
29樓: | >>參與討論 |
作者: ymc8 于 2006/9/7 8:49:00 發(fā)布:
“誤差在10min/year內(nèi)”還需要用RTC?笑話! 只用單片機就可以做到誤差在 1 min/year 內(nèi),并不需要很高級的晶體,只是斷電保護需要仔細考慮。 |
30樓: | >>參與討論 |
作者: zhangxu198 于 2006/9/8 20:17:00 發(fā)布:
不寫TH0,TL0那就不好算時間了,都是不是整數(shù)了 不寫TH0,TL0那就不好算時間了,都是不是整數(shù)了 |
31樓: | >>參與討論 |
作者: zhangxu198 于 2006/9/12 23:15:00 發(fā)布:
用邏輯門電路怎么樣呀? 以前讀書的時候用數(shù)字電路做過,但是在一塊板用了好多飛線,整整一大捆,焊得頭都大了,沒有焊完。因為那個時候老師急著要我們交,交上去了。發(fā)下來后就沒焊下去了,因為分數(shù)都打完了。現(xiàn)在真后悔沒把它做完,不該為了分數(shù)下來就放棄。 |
|
|
免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入 |
Copyright © 1998-2006 www.udpf.com.cn 浙ICP證030469號 |