• ベストアンサー

PICでパルス数をカウントする方法

PICで不規則な幅のパルス数をカウントする為にはどうのようなプログラムになるのでしょうか? ループで入力ポートを監視するのでは出来ないように思うのですがどのような方法を用いると出来ますでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • likipon
  • ベストアンサー率38% (44/114)
回答No.1

「不規則な幅のパルス」とはどのような意味でしょうか? 適当に解釈すると: 1.幅が不規則なだけでパルスの最小幅がそれほど短くない. この場合なら, ループで入力ポートを監視するだけでもカウントは可能だと思います. 入力がHだったら1カウントして, 次に入力がLになってからまたHになった時に 次の1カウントするだけですね. (もちろん, 後述の方法でも可能です) 2.最小幅が短い場合 プログラムのループ周期よりもパルス幅が短いような場合は, プログラム的にカウントしても パルスの取りこぼしが考えられます. PICに限らずたいていのワンチップマイコンにはタイマ機能というのが用意されており, これを応用することでカウントを行うことができます. タイマは普通時間を計るために使い, クロックが入力されるとカウンタがプラスされると いうものです. このタイマは内蔵クロックで動作させる (カウンタを回す) こともできますが, このクロックを外から入力してやることもできます. タイマは基本的にクロックが入力された数だけカウンタが増えますので, 最初にカウンタをクリアしてやれば, その後のカウンタの値はクリア後に入力された パルスの数であるということになります. パルスの幅が不規則であったとしても, よほど高速でない限りは関係ありません. 機能の詳細はデータシートや関連書籍に書いてありますので, 調べてみてください.

poohpiglet2
質問者

お礼

詳細に説明していただきありがとうございました。 タイマについて勉強してみます。

その他の回答 (1)

  • Qwerty-36
  • ベストアンサー率25% (58/226)
回答No.2

通常の組込用のマイコンでは・・・ですが。 パルスをポートに入れる。 そのポートがタイマー/カウンタポートなら、カウンタモードに設定し、立ち上がり/下がりのどちらかのエッジで割り込みをかけ、割り込み処理の中でカウント値を+1する。 ポートが通常の入力ピンで有れば、ポーリングで"1"から"0"もしくは"0"から"1"に変わったらカウント値を+1する。

poohpiglet2
質問者

お礼

理解することができました。 ありがとうございました。

関連するQ&A