タイマと言われて、何を思い浮かべるだろうか...
・ストップウオッチとか
・キッチンタイマとか
身近なものとしては、こんなところだろうか。要するに時間を計る装置の事を、一般的にタイマと呼んでいる。
マイコンの内部にもタイマが実装されている。組み込みプログラミングでは(そうでない場合も同様であるが)、「時間を計りたい」、とか、「一定時間後に何がしかの処理を実行したい」、とか言う処理は頻繁に登場する。これらの要求に答えるために、H8/3052Fには、
16bitインテグレーテッドタイマユニット(ITU)
というものが実装されている。
何だか難しそうではあるが、機能としては、時間を計ったり、パルスを出力したり、PWM(別に詳述)を出力したり、一定間隔で割り込みを発生したりする事が出来る。
16bitインテグレーテッドタイマユニット(以降、ITU)には、様々な機能が実装されているため、全部を紹介すると大変なので、とりあえず、基本的な使い方であるインターバルタイマ(一定時間が経過した事を知らせる機能)と経過時間の計測方法について、紹介する。
余談であるが... マイコンボードには、水晶振動子と言う非常に正確に時間を刻む素子が実装されている。 ![]() 水晶振動子の精度は10-6以上あるので、1日の誤差が0.1秒以下の時計も簡単に作れる。 マイコンボードには25MHzの水晶振動子が実装されている。25MHzということは、1秒間に25 x 106回(つまり2千5百万回)の信号(パルス:正確には正弦波)を出力する。マイコンボードはこの信号を基準に全ての動作を決めている。ITUも同様である。 |
○インターバルタイマとは何者か?
これを使うことで、
・1秒間隔で変数の値をインクリメント(time++とか)してやると、時計が作れる。
・色々な処理を、時間で分けて動かす。(マルチタスク)
・データを一定間隔で取得して、時間による変化を見る。
などの処理ができる。
例えば、温度の時間変化を測定したい場合の例。
ITUはあらかじめ設定された時間(例では1秒)毎に、お知らせを発行する。お知らせによって温度測定処理が起動される。以降、繰り返し。
上図は、1秒間隔で通知を発生する、インターバルタイマを使って、温度の時間変化をさせるプログラムの動作を模式的に表したもの。
この様に、インターバルタイマは、一定の時間をおいて何かを観測したり、制御したりするのに使用する。
実際のプログラミングは、こちら。
○経過時間の計測
H8/3052Fのインプット・キャプチャ(Input
Capture)という機能を使うと、経過時間を計る事が出来る。例えばストップウオッチのように、スタートしてから、何秒後にゴールしたかを計測するといった場合に使用する。この様なプログラミングは、インターバルタイマの機能を使っても実装は可能だが、プログラミングが面倒でもあるし、応答や時間分解能も専用の機能を使った方が向上する。
上図は、イベントの発生間隔を計測する例。
実際のプログラミングは、こちら。