マイコン工作実験日記

Microcontroller を用いての工作、実験記録

リモコン機能を追加する -- その2

2009-10-12 00:03:26 | MP3プレーヤ
リモコン機能のドライバ編です。

赤外線受信モジュールは、CAP0.0とCAP0.1端子の両方に接続してあります。受信モジュールからの信号は反転出力となっており、信号が検出できた期間だけLレベルが出力されます。そこで、次のようにしてLが出力される時間を計測してやることにしました。

  • CAP0.0で立下り検出して、CR0にタイマ値をロード
  • CAP0.1で立上がり検出して、CR1にタイマ値をロード
  • CAP0.1で立上がり検出時に割り込み生成


割り込み処理で、CR1 - CR0 を計算してやれば、Lレベルの時間が計れることになります。Q-STEERの信号は、このページで解説されているように、ヘッダーに続く6ビットで構成されていますので、これを割り込み処理の中で解析し、その結果を上位に通知することとしました。

簡単な実験結果の表示は次のようになりました。



ir_countが割り込み回数。ir_dataが最後に検出されたリモコンからのボタン信号です。そして、ir_gotがボタン信号として判別された回数。最初の表示の段階では、一度もリモコンのボタンを押していないのに800回も割り込みが入っています。1回のボタン信号の検出に必要な割り込み回数はヘッダと6ビットデータの合計7回ですから、けっこうノイズをたくさん拾って割り込みがかかっていることがわかります。信号の長さを確認して不正と判断したものは読み捨てているので、ボタンの検出は問題なくできてはいます。

ボタンを押し続けていると、繰り返し同じ信号が出力されます。ボタンが離されると停止信号が出てきます。同じ信号を受信した回数をカウントすることで、ボタンの長押しを判断することにしようと思います。

不要な割り込みの回数を減らしたいと思い、タイマのクロックを落としてみたりしたのですが、ほとんど変化なし。こんなにノイズ拾うものなのでしょうか?