![]() |
xianfajushi 發(fā)表于 2023-1-31 11:00 自己回復(fù)自己的帖子有意思嗎? 一個DS1302再怎么搞,它也就那樣,并不能體現(xiàn)一個程序員的代碼水平 你搞個無刷電機FOC試一下,你就會知道,DS1302是多么的低端 再說,你整幾個月,都還沒有搞明白,DS1302的精度跟程序一點關(guān)系都沒有 "我修改了程序拋開時鐘芯片用定時期替代秒計時,運行十幾個小時結(jié)果和電腦時鐘一樣精準(zhǔn)" 自以為是找到新世界的大門,實際上是連DS1302的門都沒有找到 DS1302的精度取決晶振,如果你用的無源晶振,那就得用晶振機(或者叫石英精度測試儀之類的)不斷的調(diào)試,更改匹配電容來達到高精度的效果如果用的是有源晶振,DS1302的精度主取決有源晶振的誤差了,但這一點意義都沒有,因為一個有源晶振的價格可以買一個RX8025T了,如果你不知道什么叫RX8025T,那就先去百度一下吧 |
xianfajushi 發(fā)表于 2023-1-31 11:00 就單純做時鐘而言本來就是用單片機遠比1302精準(zhǔn)。理論精度達10ns級。采用計時專用芯片的好處是掉電不停止走時,做萬年歷還可省去繁瑣的大小月、潤月、閏年、世紀年的計算。如果算成本,批量定制電子鐘專用的邦定封裝芯片比單片機成本還低。 |
對了有一點需要補充就是程序里面寫的定時期頻率仿真電路芯片的時鐘頻率需要保持一致否則會偏差,比如程序?qū)?1.0592Mhz那么仿真電路圖中的單片機屬性里面的時鐘頻率也要修改為11.0592Mhz保持相同,如果是12Mhz則走快了,反過來如果程序?qū)?2Mhz而仿真是11.0592Mhz則會走慢。 |
突發(fā)奇想,用數(shù)碼管顯示每周的值:一二三四五六日。64,64,9,9,73,73,63,63,9,61,81,69,121,79 |
wulin 發(fā)表于 2023-1-28 20:56 如果能夠把程序打造得輕便即可用計時器中斷實現(xiàn)比較精準(zhǔn)的計時拋卻時鐘芯片目標(biāo),畢竟兆赫茲的精度比千赫茲提高了一個數(shù)量級別。 |
wulin 發(fā)表于 2023-1-28 20:56 只有了然于胸才能駕輕就熟 |
wulin 發(fā)表于 2023-1-28 20:56 不斷優(yōu)化就是對邏輯思維的驗證,從而實現(xiàn)賣油翁的過程. 其實不然我認為頻繁讀取對精度有所影響,就好比開定時器中斷應(yīng)該說沒什么影響,然而實踐告訴人們,輕便的程序?qū)Χ〞r器計時精度沒多大影響,而復(fù)雜的程序?qū)Χ〞r器計時精度就有影響,中斷也要獲得響應(yīng)時間的,電路也是一樣的總要撥點時間去處理其他事件. |
xianfajushi 發(fā)表于 2023-1-28 17:08 所謂合理是相對的,在不影響其它功能的前提下頻繁讀1302也并無不可,單片機也累不死。只能說在現(xiàn)有硬件條件下,滿足所有功能預(yù)期,互相不發(fā)生沖突是需要一定的編程技巧?桃庾非笾骱瘮(shù)周期減小到十幾微秒又有多少實際意義。 |
xianfajushi 發(fā)表于 2023-1-28 10:27 頻繁讀取1302全部數(shù)據(jù)不會影響其計時精度,但對于你刻意精打細算主循環(huán)時間肯定有影響。比如蜂鳴器音調(diào)會不穩(wěn)。 |
wulin 發(fā)表于 2023-1-28 09:13 那么怎樣才合理?之上已經(jīng)說了,尋求合理的安排,目前把讀秒壓縮在每秒4次左右,在不開定時期情況下;若開定時器按每秒讀取然而定時器未必就能精確每秒夜有不精確時候就會造成漏讀秒的情況發(fā)生. |
wulin 發(fā)表于 2023-1-28 09:13 頻繁讀取1302全部數(shù)據(jù)是否會影響其計時精度?目前猜測而已沒什么證據(jù)。 |
xianfajushi 發(fā)表于 2023-1-10 17:13 這個限制條件不完善,在Mbcd=0的1秒時間內(nèi)會多次讀1302,如果是跨年的那1秒內(nèi),則重復(fù)多次讀全部數(shù)據(jù)。當(dāng)然這屬吹毛求疵,未必影響其它程序正常運行。何況是在半夜,誰還會去計較。 |
wulin 發(fā)表于 2023-1-9 17:17 中斷+計數(shù)的1毫秒間隔或200微妙能做多少事還真的沒什么案例,本案例旨在說明詢問式計數(shù)延時相比獨占計數(shù)延時的優(yōu)越且靈活調(diào)節(jié)和設(shè)置,屬于高級分析思維模式,而非入門級別獨占計數(shù)延時一直套用引發(fā)種種疑難。 |
經(jīng)過幾次試驗?zāi)壳鞍炎x秒信號壓縮到每秒4次左右基本察覺不到太大差別可以接受的程度,調(diào)整后蜂鳴器音調(diào)頻率也發(fā)生變化能聽出區(qū)別來。 |
人中狼 發(fā)表于 2023-1-12 08:39 其它都不用說,有好的程序拿來看看。 我家一臺旭日紅外熱水器無線控制器每周都快1小時多,比如時間是6點看它屏幕走時已經(jīng)是7點多了,每次都要去調(diào)整時間,否則計算峰谷的時間就不準(zhǔn)確了!非常麻煩,是很差勁的產(chǎn)品質(zhì)量,可以斷定是很差勁的程序代碼,所以莫要小看簡單的程序提高效率問題,所謂見微知著,簡單的功能都不能注重效率的話,可知復(fù)雜功能是很有問題的。 |
這個就是純粹的強調(diào)所謂的效率兩個字而已,但實際應(yīng)用中效率到底又指什么呢 |
188610329 發(fā)表于 2023-1-11 00:20 從主程序中看到,這就是一個1302時鐘,其它什么事都沒干,壓根就不需要節(jié)約什么時間,效率什么的都是沒有什么意義的 1秒鐘讀取一次,延時直接用delay(); 按鍵一樣的直接延時去抖動,沒必要折騰那么多東西 或者是說用讀取的時間來作為數(shù)碼管的延時,都比樓主折騰這個好 我也不知道,把單片機時間節(jié)約成這樣子,是為了什么? 是怕單片機累壞了?還是怕單片機長時間延時會鬧情緒 我看了半天,都不知道“獨占時間”是個什么玩意 |
xianfajushi 發(fā)表于 2023-1-10 16:50 ds1302來說,你真要節(jié)約寶貴的系統(tǒng)資源,就用硬件讀寫。不管用spi讀寫,還是串口1讀寫,都比你IO讀寫,占用系統(tǒng)時鐘少。 |
在不開定時器情況下也可以比較精準(zhǔn)控制只讀一次秒信息精度控制在毫秒以下,因為上述說過了的6毫秒和40毫秒周期,因此可以比較精準(zhǔn)控制去讀秒信息一次足夠,而不需要無謂的多次讀取,同樣道理讀天月年也可以按條件讀取,只是不開定時器情況下按我的思路是實現(xiàn)所有功能代碼后再進行比較精準(zhǔn)的控制讀秒信息,因為不同功能的程序周期也不同,就比如6毫秒和40毫秒周期一般道理。 |
wulin 發(fā)表于 2023-1-9 17:17 限制條件的讀是最合理的時間安排 Mbcd=Du_1302(0x81); if(Mbcd==0)Fbcd=Du_1302(0x83); if(Mbcd==0&&Fbcd==0)Sbcd=Du_1302(0x85); |
wulin 發(fā)表于 2023-1-9 17:17 之前代碼是秒分時頻繁都去讀取,其實沒必要,因此修改后的代碼就是按條件限制的讀取 Mbcd=Du_1302(0x81); if(Mbcd==0)Fbcd=Du_1302(0x83); if(Fbcd==0)Sbcd=Du_1302(0x85); |
wulin 發(fā)表于 2023-1-9 17:17 優(yōu)化的讀取是秒=0則讀分,分=0則讀時,不需要頻繁讀分和時信息,這樣就可以節(jié)省很多寶貴的時間資源. |
xianfajushi 發(fā)表于 2023-1-5 07:29 用定時器的目的是控制主函數(shù)循環(huán)周期,以便輕松處理按鍵消抖和按鍵長短按計數(shù)以及數(shù)碼管動態(tài)掃描。如果在主函數(shù)中加無源蜂鳴器驅(qū)動就得縮短定時周期也就是主函數(shù)循環(huán)周期。大約200us。因為無源蜂鳴器有特定的驅(qū)動頻率要求,常見的廉價無源蜂鳴器約2KHz聲壓最大。若主函數(shù)循環(huán)周期不穩(wěn)定蜂鳴器音量聲調(diào)也不會穩(wěn)定。這不是仿真就可以搞定的。通常情況下200us可以干很多很多事。對于某些在一個主循環(huán)周期內(nèi)做不完的事可以拆分。單片機玩的就是時間和邏輯。說白了就是在什么時間點干什么事。 |
通過我提供的測試圖片一看就知道單片機的時間都到哪去了,也就知道優(yōu)化該從何處下手了,我之所以說我的程序還能進一步優(yōu)化,指的是讀取芯片的頻次可以進一步減少而不會明顯影響顯示精度,按目前圖片的時間約50毫秒的頻次顯然有很多次去讀取是不必要的,因此是可以繼續(xù)優(yōu)化的,至于多少次或說多少時間去讀取一次合理,就值得探討了,各位高手不妨?xí)逞愿哒摗?/td> |
wulin 發(fā)表于 2023-1-4 20:42 今早想起來要補充說明不開定時器的情況下,就用簡單的功能來測試,蜂鳴器一定要的,若要其它功能不是不會提出來,我自己代碼也是不開定時器,不使用額外循環(huán)計數(shù)延時,我的測試周期還可以優(yōu)化再減小。 |
wulin 發(fā)表于 2023-1-4 20:42 不錯,通篇沒用到計數(shù)延時。 |
wulin 發(fā)表于 2023-1-4 20:42 實在是抱歉,我忘記了說明是不開定時器的情況下,就用簡單的功能做測試,不要看表面功能簡單,練就的是功夫。 |
xianfajushi 發(fā)表于 2023-1-4 07:12 這種要求的程序很簡單,也用不著138、573,給你一個示例參考,另加鬧鐘也是輕而易舉的事。黑幣你就自己留著吧。 ![]()
|
xianfajushi 發(fā)表于 2023-1-4 07:12 我這幾年編程白學(xué)了?我怎么看了幾次都看不明白這段文字表達了什么........... |
沒看懂樓主的目的,樓主用的是138解碼逐個點亮數(shù)碼管的掃描方式,讀取1302數(shù)據(jù)和bcd轉(zhuǎn)換十進制再查表只需要在點亮一個數(shù)碼管周期內(nèi)完成,其余時間只能等待延時,不延時還能干嘛呢,還有啊,這程序太簡單了,很多功能都沒實現(xiàn),操作不用按鈕,使用旋轉(zhuǎn)編碼器,年月日和鬧鐘都沒實現(xiàn)呢,這些都實現(xiàn)了,再找優(yōu)化方案和程序精簡 |
Powered by 單片機教程網(wǎng)