タイマと応用

タイマと言われて、何を思い浮かべるだろうか...

・ストップウオッチとか
・キッチンタイマとか

 身近なものとしては、こんなところだろうか。要するに時間を計る装置の事を、一般的にタイマと呼んでいる。
 マイコンの内部にもタイマが実装されている。組み込みプログラミングでは(そうでない場合も同様であるが)、「時間を計りたい」、とか、「一定時間後に何がしかの処理を実行したい」、とか言う処理は頻繁に登場する。これらの要求に答えるために、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秒間隔で通知を発生する、インターバルタイマを使って、温度の時間変化をさせるプログラムの動作を模式的に表したもの。

  1. タイマは一定間隔(例えば1ミリ秒とか)でカウントアップされている。
  2. カウント値が1000になった時、割り込みなどを使ってプログラムに通知する。
  3. カウンタ値を0に戻す。
  4. 以上を繰り返す。

 この様に、インターバルタイマは、一定の時間をおいて何かを観測したり、制御したりするのに使用する。
 
 実際のプログラミングは、こちら

 ○経過時間の計測

 H8/3052Fのインプット・キャプチャ(Input Capture)という機能を使うと、経過時間を計る事が出来る。例えばストップウオッチのように、スタートしてから、何秒後にゴールしたかを計測するといった場合に使用する。この様なプログラミングは、インターバルタイマの機能を使っても実装は可能だが、プログラミングが面倒でもあるし、応答や時間分解能も専用の機能を使った方が向上する。


 上図は、イベントの発生間隔を計測する例。

  1. タイマは一定間隔(例えば1ミリ秒とか)でカウントアップされている。
  2. イベントが発生すると、割り込みルーチンなどを使って、タイマの値を読み取る。
  3. タイマの値を0にリセットする。
  4. 以上を繰り返す。

実際のプログラミングは、こちら。

 

最終更新:2014年07月25日 10:49