ある基準時間、ここでは1000mSを基準にし、その期間に入力されたクロックをカウンターで数えます。上図の例では12、20、25、50Hzと切り替わり、表示機である7セグメントにもその数値(測定結果)が表示されます。従って、基準時間が狂うと測定結果も狂ってきます。又、クロック数を数えるカウンターもリアルタイムにカウントしていないと、正確には測定できません。特に信号の取りこぼしが、その原因なので、ソフトウェアーで構成したカウンターやタイマーでは、うまくウェイト調整などをしないといけない訳です。絶対出来ないとは言えませんが、ここは内部タイマーを使用する事とします。
●タイマ割り当て
次にタイマーの割り当てになりますが、TMR1は16ビットなので、これがカウンターに使用できると良かったのですが、ちょいと半端なピン(RB6)から信号を供給する事になるのでTMR0を使用しRA4を信号入力にしました。しかし、今回のカウンターは3桁なので、カウンターには16ビット幅が必要です。ここは仕方無しに上位8ビットはソフトウェアーカウンターとしました。
よって測定基準時間はTMR1とします。クロックソースは内部クロック20MHzで1000mSを作るのには次の様になります。
MainClock 20MHz = 1 / 0.00000005S = 50nS
200nS = 50nS × 4(clock/Cycle)
TMR1 1S = 50000(TMR1)×100(TMR1HH) × 0.0000002(200nS)
TMR1へのセット値は減算カウンターなので
15536(10) = 65536(10) − 50000(10)として、これを16進に変換しTMR1Hに3CH、TMR1LにB0Hをセットします。実際には校正後LOW側はB6Hになっております。
次回は16BITカウンター値を3桁のBCDコードに変換します。
次回に続く 「次回はこちらから」
|