無論誰下降,請提供反饋意見,爲什麼。如果問題顯示沒有研究,不清楚或者沒有用處,那麼您就會冷靜下來。我的問題屬於這些類別之一。正如你所看到的,除非你是盲人,其他人明白我在問什麼。
要回答我的原始問題,我原來的想法是從硬件生成我想要的延遲。我甚至沒有考慮過使用「tick計數器」,因爲mplab稱之爲「tick計數器」。基本上,滴答計數器計算最大延遲發生的次數以儘可能接近期望的延遲。
例如,
如果我有一個32兆赫振盪器,4的時鐘分頻器的4預分頻器和8
一個寄存器大小我會:
32/4 = 8 MHz(時鐘分頻器) 8/4 = 2 MHz(預分頻器)
所以我的指令頻率是2 MHz 這是一個指令週期1/8000000 = 0.0000005秒。 這也是我能給出當前振盪頻率,時鐘分頻器和預分頻器的最小延遲時間。
由於我必須具有的256 最大十進制值的8位寄存器,我將具有256 * 0.0000005 =0.000128秒
如果我的期望的延遲不落在這些邊界是內的最大延遲太大,我會得到一個負值寄存器值
延遲的計數=期望的延遲/計時器週期 如果我想要一個250毫秒的延遲,這將是0.25/0.0000005,這會給我一個遠遠大於8位寄存器將成立。
對於PR寄存器值,如果計數遠大於最大寄存器值,我們將採用256計數,這會給我一個負數。
要計算產生所需延遲所需的刻度值(給定我們可能具有的最大延遲),我們將採用所需的延遲/最大延遲。
所以0.25/0.000128 = 1,953.125 四捨五入向上/向下,我們得到以下值:
截至1954年:0.250112
下到1953年:0.249984
因此,根據如何準確的,我們需要它看起來像1954年將是正確的滴答櫃檯。因此,爲了在給定32MHz振盪器,4的時鐘分頻器,4的預分頻器和8的最大值爲256的寄存器大小的情況下得到0.25秒的延遲,我們將具有0.000128秒的最大延遲,並且1954年蜱計數器拿到造成的
1954年* 0.000128 =0.250112秒延遲
- 我做了,它計算所有這一切都基於什麼給出一個Windows圖形用戶界面應用程序。它會自動計算任何值如果更改。所以如果我改變我的寄存器大小,它會自動重新計算最大延遲和PR值。如果有人有興趣,我會願意公開回購。
感謝您的幫助!
如果定時器1上的預分頻器'8'不夠用:使用定時器2或定時器0. –
發佈用於這些計算的真實代碼。問題可能包括計算FP數學的整數數學。 – chux
Chux這些是用來設置計時器的計算,所以目前還沒有代碼。 – Schwagmister