Re: 16F685一直無法校準TMR1
|
||||
---|---|---|---|---|
資深會員
|
程式沒有寫的很仔細,原理看的懂即可。
32768 數65536 = 2sec 中斷一次 如果要 1sec 中斷一次 tmr1_isr: bcf PIR1,TMR1IF bsf tmr1h,7 如果要 0.5sec 中斷一次 bcf PIR1,TMR1IF bsf tmr1h,7 bsf tmr1h,6 這樣候做法最簡單。 如果你要中斷特定時間, 那就要 tmr1_isr: bcf pri1,tmr1if bcf t1con,tmr1on :停止計數 movlw 數值_LOW addwf TMR1L,F BTFSC STATUS,C ;要對稱,無論有無C,這段的執行時間都是四個cycle MOVLW 數值_HIGH+1 BTFSS STATUS,C MOVLW 數值_HIGH 這個部份用c 是很困難的,不確定執行的指令是否有刻意浪費時間。 addwf tmr1h,f bcf t1con,tmr1on :重新計數 從off 譬 on 這 8個cycle 也要納入時間考量 ,你設定的數值才會是『準』的 ,用c 你很難估這段時間 直接填tmr1l tmr1h 時間幾乎肯定會錯。
發表於: 2023/4/5 17:17
|
|||
|
Re: 16F685一直無法校準TMR1
|
||||
---|---|---|---|---|
資深會員
|
參照:
這種寫法就會讓時間錯亂~~ 除非你都有沒其它『中斷源』了 不能直接改 tmr1h tmr1l ,程式不是依你想像的方式在運作
發表於: 2023/3/31 22:22
|
|||
|
Re: 16F685一直無法校準TMR1
|
||||
---|---|---|---|---|
資深會員
|
32768hz 的osc 如果真的這麼爛,那現在的電子錶是如何做到這麼準的?
所以,真的很不準?還是你程式有bug而不自知? 就我的經驗,程式去修改 TMR1H,TMR1L ,不讓系統自己跳,有很大的機率會讓時間錯亂~~ 除示你能完全掌握每行指令的時間,且時間一致,一般人不學 asm ,不專精這塊,很難會準的。 程式並不是以『你以為』的方式的跑,而是code 一行一行往下跑。
發表於: 2023/3/30 0:21
|
|||
|
Re: 16F685斷電EEPROM內容就毀損
|
||||
---|---|---|---|---|
資深會員
|
eeprom 不容易壞
所以最有可能的情況是 插拔的過程中,程式執行了讀寫 eeprom 的程式。 一般對策就是在開機時加入延時ex: 送電後delay 1sec 後才開始執行 這樣就不會插拔電源時造成程式誤動作。
發表於: 2022/8/26 19:04
|
|||
|
Re: SAME54 - 請教測量外部輸入的方波頻率
|
||||
---|---|---|---|---|
資深會員
|
long long time ago, 我用 pic 一個帶lcd 的簡易demo board ,做過一個 測速器
單純用16f pic mcu,pwm輸出給 ir led, 再由另一隻pin 接ir 接收器, 從反射回來的波形,可以精確量測0~99999 rpm。 (實測過 20000rpm,在4000rpm的5葉片上,都貼上反射鋁箔,反射的頻率就會變成5倍,利用這樣的方式,模擬出 20000rpm的機器,驗證程式) 當時主要是要做 led 恒溫控制,要監控/測試 散熱風扇的轉速變化/性能。 市售的測速器無法接電腦記錄,只好自己動手做。 以6000 rpm為例, 相當於 1秒 100次,=10ms 一個pulse 以60000 rpm為例,相當於1秒 1000次,=1ms 1個pulse 16次= 16ms 處理一次。不是什麼大問題 但是 240rpm, =1秒4次 一次250ms 如果抓 16次,就要 4sec。這時就要調整 capture 的數量。 實作羅輯並不難 time0_isr{ 定時觸發 uart 將資料丟出。 } 32768 osc 輸入 timer1 time1_isr{ timer1 中斷,表示2秒內沒有軟體重置計數器 =>轉速為0 capture prescale =1, 2秒=>理論可抓到 >30rpm } capture_isr{ reset timer1 (timer1=0)( 這要以asm 寫,才能夠精確計算重置timer1的誤差) 跟據 capture prescale 調整ccpr的值,然後輸出顯示。 (用左移,計算出一個 pulse = 多少 timer1) 更新 time0_uart 的資料 (利用 定時器,定時輸出 轉速值) 跟據 capture的時間,調整 capture prescale if bit7=1 or bit6=1 capture prescale =1 else if bit5=1 capture prescale =4 else capture prescale =16 }
發表於: 2021/5/27 14:22
|
|||
|
Re: SAME54 - 請教測量外部輸入的方波頻率
|
||||
---|---|---|---|---|
資深會員
|
long long time ago, 我用 pic 一個帶lcd 的簡易demo board ,做過一個 測速器
單純用16f pic mcu,pwm輸出給 ir led, 再由另一隻pin 接ir 接收器, 從反射回來的波形,可以精確量測0~99999 rpm。 (實測過 20000rpm,在4000rpm的5葉片上,都貼上反射鋁箔,反射的頻率就會變成5倍,利用這樣的方式,模擬出 20000rpm的機器,驗證程式) 當時主要是要做 led 恒溫控制,要監控/測試 散熱風扇的轉速變化/性能。 市售的測速器無法接電腦記錄,只好自己動手做。 以6000 rpm為例, 相當於 1秒 100次,=10ms 一個pulse 以60000 rpm為例,相當於1秒 1000次,=1ms 1個pulse 16次= 16ms 處理一次。不是什麼大問題 但是 240rpm, =1秒4次 一次250ms 如果抓 16次,就要 4sec。這時就要調整 capture 的數量。 實作羅輯並不難 time0_isr{ 定時觸發 uart 將資料丟出。 } 32768 osc 輸入 timer1 time1_isr{ timer1 中斷,表示2秒內沒有軟體重置計數器 =>轉速為0 capture prescale =1, 2秒=>理論可抓到 >30rpm } capture_isr{ reset timer1 (timer1=0)( 這要以asm 寫,才能夠精確計算重置timer1的誤差) 跟據 capture prescale 調整ccpr的值,然後輸出顯示。 (用左移,計算出一個 pulse = 多少 timer1) 更新 time0_uart 的資料 (利用 定時器,定時輸出 轉速值) 跟據 capture的時間,調整 capture prescale if bit7=1 or bit6=1 capture prescale =1 else if bit5=1 capture prescale =4 else capture prescale =16 }
發表於: 2021/5/27 14:22
|
|||
|
Re: SAME54 - 請教測量外部輸入的方波頻率
|
||||
---|---|---|---|---|
資深會員
|
頻率 = plus / △t
一般人的羅輯是 一秒幾次 機器的運作則是 χ個plus 要幾秒。 χ 和輸入的頻率有關 輸入的頻率慢,χ 大 會導致反應太慢 , χ 小,在頻率快的情況下,又會一直計算。 你的羅輯一樣是 一秒幾次
發表於: 2021/5/25 9:44
|
|||
|
Re: web:bit 和 bbc micro:bit 有什麼不同?
|
||||
---|---|---|---|---|
資深會員
|
我也從沒聽過,是前天小朋友在問,我才第一次聽到。
基本上我是不反對小朋友學這些 Hardware/firmware/software 只是這套 web:bit ,我稍稍餵狗查了一下,發現應該是從 bbc micro:bit 改來的 而這些的原形是 arduino,只是在設定操作的sotware上更加人性化,更適合初學者 這讓我想起小學玩過的『動動腦』電子玩具, micro:bit 基本上就是這個世代的 『動動腦』 只是這和我用 鍵盤一個字一個字寫 asm 相去甚遠。 要玩我手上有一堆 demoboard ,但是小孩不適合也不感辦。 想了解一下,有沒有人對 mirobit webbit 這有較深入的研究。 (我是想直接從 英國買套件回來,怕和現在台灣的 web bit 不相容,1000多元的玩具,真的不貴)
發表於: 2020/5/8 17:03
|
|||
|
web:bit 和 bbc micro:bit 有什麼不同?
|
||||
---|---|---|---|---|
資深會員
|
web:bit 和 bbc micro:bit 有什麼不同?
小朋友現在電腦課在上 web:bit,我稍微上網查一下 發現這和 bbc micro:bit 很類似 有高手了解這兩套有什麼同異嗎? 大家對現在國中電腦課上這種產品有什麼看法?
發表於: 2020/5/8 12:21
|
|||
|