はじめに
PICマイコンが内蔵するタイマーモジュールのうち、奇数番モジュールにはゲート機能があります。ゲート機能を使うと、ゲートが有効な間だけカウント動作をさせることができるので、外部信号のパルス幅や周期測定に活用できます。
概要
下は、使用したPIC12F1840のタイマー1モジュールのブロック・ダイアグラムです。ゲート信号入力は4系列から、クロック源は外部クロックと内部クロックから選択できます。タイマー1本体のTMR1(TMR1H+TMR1L)は16ビットカウンタなので、測定するゲート信号が65535カウントに収まるようにクロックおよびプリスケーラを設定/選択します。
ゲート機能は、①ゲートモード(繰り返しパルス測定)、②トグルモード(繰り返しサイクル測定)、③シングルパルスモード(1パルス測定)、④トグル+シングルパルスモード(1サイクル測定)から選択できます。以下は、各モードのタイミング・チャートです。(上のブロック・ダイアグラムと照らし合わせて見て下さい)
動作モードのうち、シングルパルスモードはT1GVALの立ち下がりでゲート割り込みフラグ TMR1GIFが立ち、ゲート割り込みが有効になります。
内容
実験では、一例として以下に示すパルス幅:250us,周期:1000usの矩形波をT1Gピンに入力し、パルス幅をシングルパルスモード、信号周期をトグル+シングルパルスモードで測定します。
MCCで以下のようにタイマー1モジュールをトグル+シングルパルスモードに設定し、ゲート割り込みを有効にします。シングルパルスモードにするには、この設定からT1GTMを無効にするだけなので、ゲート割り込み毎にT1GTMビットを制御し、モードを交互に切り替えます。PICマイコンのシステムクロックは内部FOSC:4MHz設定です。タイマー1クロック源はFOSC/4、プリスケーラは1:1なので、タイマー1クロック周波数は1MHzです。
ゲート割り込みを有効にすると、MCCは tmr1.c にゲート割り込み関数 TMR1_GATE_ISR を生成します。割り込みが許可されると、割り込み関数がコールバックされるので、この関数に次のような割り込み処理のコードを追記します。
以下はmain.cの内容です。
結果
ブレッドボードに下図の回路を組んで実験しました。タイマー2で生成した矩形波を、RA5ピンからRA4(T1G)ピンに入力します。液晶表示器の上段にパルス幅、下段に信号周期のカウント数を表示しています。タイマー1クロック:1MHz=1us/カウントなので、カウント数をそのまま時間[us]に読み替えれば入力信号どおりの結果です。
実験では割愛しましたが、パルス幅や信号周期に加え、Dutyも表示すれば大よその信号波形が想定できると思います。また、タイマー1クロック源に高精度発振子を使用すれば、それなりの周波数カウンタとして使えます。このように、MCCを使えばゲートモードを簡単に設定できるので活用してみて下さい。
– 以上 –