• slider image 442
  • slider image 503
  • slider image 504
  • slider image 505
  • slider image 506
  • slider image 507
  • slider image 508
:::


Browsing this Thread:   1 Anonymous Users






Re: 16F685無法校準TMR1問題(續)
#4
資深會員
資深會員


查看用戶資訊

發表於: 2023/5/13 11:06
程式是
依照寫出來(的code),跑出結果
不是依照你想出來的,得到結果

先有需求規格 後有解決方案
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 16F685無法校準TMR1問題(續)
#3
資深會員
資深會員


查看用戶資訊
參照:
一、用32768,一般就是來數 2秒、1秒、0.5秒、0.25秒

別用 32768 來數 0.1 0.2 0.3秒之類 ,自找麻煩。

二、要數0.1秒、0.2秒 用 osc 來數,別自找麻煩外掛 32768

因為有其他程式組件需要低頻計時,但TMR0和TMR2使用的頻率都無法迎合也不能隨便調,如整合到TMR0或TMR2則要增加很多ROM使用空間(測試過編譯器說ROM空間不足),所以要放在TMR1內,也要調成16Hz。

升級16F1829或許是個選項,因為可以用TMR4或TMR6來代工,但變成要額外購入就不考慮了。

參照:
三、振盪器一定有誤差,但是 ppm 等級,一年誤差是以秒計。

誤差太多,不是振盪器壞了,就是程式有bug。

新買入的相信誤差不會怎樣大,只是其中一顆使用的是從一個舊遙控器拆出來,可能老化的關係,其誤差真的有點大。

我在po這篇文後花了幾天調整TMR1補正值(T1LMKC變數),多次調整後對照網絡時間跑了3個星期,其誤差小的到現在還沒需要再調。

發表於: 2023/5/12 19:29
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 16F685無法校準TMR1問題(續)
#2
資深會員
資深會員


查看用戶資訊
一、用32768,一般就是來數 2秒、1秒、0.5秒、0.25秒

別用 32768 來數 0.1 0.2 0.3秒之類 ,自找麻煩。

二、要數0.1秒、0.2秒 用 osc 來數,別自找麻煩外掛 32768

三、振盪器一定有誤差,但是 ppm 等級,一年誤差是以秒計。

誤差太多,不是振盪器壞了,就是程式有bug。

bug 是依你程式產生的,而不是依你的想像力。

發表於: 2023/5/12 16:38
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


16F685無法校準TMR1問題(續)
#1
資深會員
資深會員


查看用戶資訊
這是接續之前一篇關於無法校準的問題,只是似乎被視為討論已完,所以還是再開另一篇來問。

前情提要,如要修正TMR1計時偏差問題,除了不能直接覆寫TMR1H和TMR1L,還要先將TMR1關掉才可以進行TMR1計數器修改的程序,並加上TMR1關掉期間所帶來的額外延遲的補正部分,即每隔一定數量的中斷後,當額外的延遲累積到大約30.5us後(32768Hz振盪一次計數的時間),會在TMR1L額外加1以補回時差,然後新的問題來了。
我分別在一個20MHz和三個8MHz的程式上跑,連續跑24小時後收集結果。結果出來是20MHz的比對照時間快了2秒,而8MHz的三個分別慢了15、19和20秒。
本來一直想不到原因為何,直到看到datasheet上這個(請看附圖)。

因為有其他Timer的中斷的關係,所以ISR抓到TMR1中斷的時機並不是每次都一樣。按照圖片,如果TMR1重新啟動後,T1CKI是在HIGH的時候,那麼最快可以在15.25us後TMR1會增加一次;但如果T1CKI是在LOW的時候,那麼最差情況是要在45.75us後TMR1才會加一次。我相信就是這部分的誤差造成這個難以修正的延遲。而且從8MHz的程式的結果看,應該是大部分情況下TMR1重啟時T1CKI都是在LOW,只是踩在LOW的時機都不一樣。

然後,T1CKI腳位的狀態是無法讀取的(總是讀為0),即是不能夠透過讀取腳位來判斷。

PIC16F631/677/685/687/689/690第84頁、第6.4節:
參照:
TRISA5 and TRISA4 bits are set when the Timer1 oscillator is enabled. RA5 and RA4 bits are read as '0' and TRISA5 and TRISA4 bits read as '1'.


我想了一個方法就是在啟動TMR1前先取得TMR1L的值在暫存,在啟動TMR1後等候30.5us,以TMR1L在這段時間後的值是否不同了來判斷是否需要額外計時補正,這不一定準但至少不會比現在的情況差。可是這樣特意等候30.5us好像很蠢也沒必要,要是有其他高頻率中斷這無疑是一個大妨礙,但已經想不到其他可以用來判斷的方法。

Attach file:



gif  tmr1_increment_edge.gif (14.75 KB)
32118_643fcff13ec79.gif 750X340 px

發表於: 2023/4/19 19:53
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部







You can view topic.
不可以 發起新主題
You cannot reply to posts.
You cannot edit your posts.
You cannot delete your posts.
You cannot add new polls.
You cannot vote in polls.
You cannot attach files to posts.
You cannot post without approval.
You cannot use topic type.
You cannot use HTML syntax.
You cannot use signature.
You cannot create PDF files.
You cannot get print page.

[進階搜尋]


:::

Microchip連結

https://www.facebook.com/microchiptechnologytaiwan/
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=13
https://mu.microchip.com/page/tmu
http://elearning.microchip.com.tw/modules/tad_link/index.php?cate_sn=1
https://page.microchip.com/APAC-PrefCenters-TW.html
http://www.microchip.com/
http://www.microchip.com/treelink
http://www.microchipdirect.com/
http://www.microchip.com.cn/newcommunity/index.php?m=Video&a=index&id=103
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=2
http://www.microchip.com.tw/Data_CD/eLearning/index.html
http://www.microchip.com.tw/RTC/RTC_DVD/
https://www.microchip.com/development-tools/
https://www.youtube.com/user/MicrochipTechnology
[ more... ]

教育訓練中心

!開發工具購買
辦法說明 [業界客戶] [教育單位]
----------------------------------
!校園樣品申請
辦法說明 [教師資格] [學生資格]
----------------------------------