2016-04-26 7 views
1

PIC16F88Xは内部クロック周期が200nsで、TIMER0を1秒間に4回測定するようにプログラムします。PIC16F882のTimer0の値が最大値より大きい場合PRESCALER

microchip tutorial on programming timer 0(10ページ)によると、私はTMR0 RATE 1に割り当てるPS0PS1PS2を使用することができます:256これは唯一の51,2マイクロ秒に私のクロック周期の規模になります。

TMR0の初期値をプログラムする可能性もありますが、到達したいクロックには影響しないと思います。大きな写真に欠けているものはありますか?

答えて

4

タイマプリスケーラは、ユーザが望む範囲をカバーすることはできません。大きなインターバルを達成するためには、あなたのタイマ割り込みルーチンにロジックを追加する必要があります。基本的には、増分する必要のある変数/カウンタを追加する必要があります.50usについて言えば、TMR0に初期値を加えて51.2usから50usにタイマーを調整します。カウンターが5000に達すると、1/4秒の解像度が必要になります。

たちは、このマイクロコントローラで利用可能なタイマ1は16ビットで、8プリスケーラまで持っていることがわかり

+0

「TMR0」は8ビットカウンタであることを忘れていますので、256にしかなりません。したがって、256 * 51,2usをオーバーフローする前にカウントできる最大期間は? –

+0

正確に。 [データシート(http://ww1.microchip.com/downloads/en/DeviceDoc/41291D.pdf) で述べたようにタイマ0モジュールは 次の機能を持つ8ビットタイマ/カウンタである。 • 8ビット・タイマ/カウンタ・レジスタ(TMR0) •8ビット・プリスケーラ これは、計算が正しいこと、 '' 'TMR0'''の値を選択してプリスケーラがISRに独自のコードを実装する必要があることを意味します。 –

1

はスペックシート(http://ww1.microchip.com/downloads/en/DeviceDoc/41291D.pdf)76ページを見てみると...それがお役に立てば幸いです。私自身のアプローチは、手動で値を播種せずに8のprescallerとタイマ1を使用することです、これは与える:

<osc speed>/(4*<prescaller>*2^16) 
5MHz/(4*8*2^16) = 2.38Hz 

を正確に4Hzのを取得するには、の値にすべてのロールオーバーにカウンターをシードすることができます

2^16-<osc speed>/(<desired speed>*4*<prescaller>) 
2^16-5MHz/(4Hz*4*8) = 26474