IRリモコン信号のデコード方法
NECフォーマットをはじめとする赤外線リモコンの受信は、色々と処理を実行中のマイコンにとって
意外とネックになるものです。 他の処理を邪魔しないで受信する幾つかの方法をご紹介
できればと思います。
意外とネックになるものです。 他の処理を邪魔しないで受信する幾つかの方法をご紹介
できればと思います。
必要なハードウェアリソースは
1.ポート入力の割り込み
2.タイマー
の2点です。
ポート入力の割り込みを使ってタイマーをスタート。
同時にポート入力割り込み極性を反転して割り込み待ち。
次にポート入力割り込みが入ったらタイマーのカウンタ値を読み取って時間を計測。
この時間がリーダーコードに相当するものかどうかを判断する。
リーダーコードと判断した場合には、信号のデコードへ入る。
信号のデコードも同様に「0」「1」との時間の長さを計測して判断します。
この時間の認識にある程度の幅を持たせておくというのがコツです。
実は、リモコン側のクロックや、計測しているマイコンのクロックがあまり正確ではない
ために計測誤差がでるからです。 また、デューティー比がぴったり5:5とならない事が多いです。
4:6~6:4くらいまで認識の範囲を広めておくと良いでしょう。
ちょっと違った手法としては、ポート割り込みがかかってから、タイマーをスタートさせ、
一定時間後にタイマー割り込みによりポートを読んで「0」「1」判定するという方法です。
毎回、時間計測する必要がなく、割り込み頻度も減るので処理が軽くなります。
時間計測の範囲判定などもいりません。 今回は、この手法を使いました。

以上が、リソースとしてタイマーを専有できるときのアルゴリズムです。
その他としては、高速にポーリングして信号をデコードす方法もあります。タイマー割り込みは
使うもののポート入力割り込みを使わないで受信できるのが特徴です。
今回のマイコンではADCで250us毎に割り込みを使っていますので、その時ついでに
IRセンサのポート読んで、高速ポーリングの手法をとっても良かったと、今更ながらに
気が付きました。
※) ノイズ・誤動作対策を、ある程度盛り込んでおく必要があるのは、マイコンによるI/O処理
全てにおいて同様です。 このあたりはテキトウに実験して自分がヨシとするまでつめます。
« 電子ボリューム実験基板 進捗 70% | トップページ | MUSES72320で実験したこと(1) »
「電子回路」カテゴリの記事
- 電子工作の難易度レベル分け(2020.10.25)
- 黒田式トランスリニア・バイアス回路の起源?(2020.04.13)
- オーディオ回路のグランド・電源配線の仕方(2020.01.07)
- グランドループによるハムノイズ発生の原理と解決方法(2020.01.05)
- 偽物のOPAMPが溢れている?(2019.10.06)
「マイコン」カテゴリの記事
- PICkit 3のProgrammer-To-Goを試す(2019.01.26)
- PICマイコンの開発環境 × Windows 8.1 は動作しないらしい(2014.07.21)
- IrBerryDACのPICプログラムソース公開(2014.03.13)
- MPLAB X IDE 手ごわい(2014.03.09)
- AppleRemoteの送信コードの謎(2013.11.27)
「電子ボリューム」カテゴリの記事
- ArduinoによるOLED表示機の作り方(ソフトウェア編-2)(2021.02.14)
- ArduinoによるOLED表示機の作り方(ソフトウェア編-1)(2021.02.13)
- Arduino UNOでArduino ProMiniにプログラムを書く方法(2021.02.12)
- ArduinoによるOLED表示機の作り方(ハードウェア編)(2021.02.11)
- MUSES72323コントローラのプログラム変更 ボリューム表示が可能になる?(2021.02.09)
コメント