赤外線リモコンの検討(構想編7)

f:id:torusanada98:20210810175813j:plain

構想編7

DACユニットのソフトへの組み込みの検討を行います。

DACユニットソフトウェア構成

リモコン受信処理を組み込むDACユニットのソフトウェアの構成を確認します。図は現行のソフトウェアのジェネラルフローチャートです。

f:id:torusanada98:20210810175852p:plain

大きく3つの部分で構成されています。イニシャル処理は、必要な設定とデモ表示を行います。キー検出処理は、3つあるキーの検出のみを行います。キー処理はキー検出処理で確定したキーオン情報に従ってDAC ICへのコマンド発行および表示処理を行います。

リモコン受信処理組み込み

現状のDACユニットソフトウェアのジェネラルフローチャートに赤外線リモコン受信処理を組み込みます。

f:id:torusanada98:20210810175927p:plain

Main loop中には、従来の処理に影響を与えないように独立してIR処理を追加しました。従来のキー処理に相当します。それ以外に、外部割り込みのInt0処理でリモコンの受信処理を行います。2重受信防止用のタイマー処理の為にタイマー割り込みMsTimer2処理も追加しました。この処理の中でInt0を有効にしているわけではないので、わざわざMsTimer2を使わずとも同様の機能実装ができる事に気がつきましたが、現時点ではこのままとします。それでは変更した処理のフローを整理します。最初はイニシャル処理です。

f:id:torusanada98:20210810175951p:plain

ここではMsTimer2のライブラリ登録とIR受信の為の入力ポート設定およびデファインを行っています。次は追加した外部割り込みInt0処理です。

f:id:torusanada98:20210810180015p:plain

処理の最初でInt0割り込みを無効にして、Int0の多重割り込みを禁止します。Leader検出をしたら32bitの受信処理を行い、カスタムコードチェックを行ってキーコードを確定します。キーコードの受け渡しはグローバル変数で行います。次はMsTimer2処理です。

f:id:torusanada98:20210810180039p:plain

Int0が有効の場合は処理をぬけます。無効の場合は、130msのウエイトを置いてInt0有効化フラグをセットします。最後はIR処理です。有効なIRコードがある場合、ATT処理と表示処理を行います。Int0が無効の場合は、130msウエイトの状況を判断してカウントアップした場合は、Int0を有効に戻します。

DACユニットソフトウェア移植準備

移植にあたり、キー処理フロー中のATT処理を事前に確認します。写真が現行ソースの抜粋です。

f:id:torusanada98:20210810180106p:plain

先頭のKTSTはキーステータスでATTキーが押された事が確定すると0x64になります。AT変数に現状のDAC IC用のATTパラメータが保存されていて、1回押すごとに値を-2しています。DAC ICへのコマンド発行は関数化されています。その下はLCD表示用に処理がべた書きされています。この処理はIR処理でも行うため、関数化します。

f:id:torusanada98:20210810180212p:plain

byteデータを引数とするAT_disp関数です。この関数を使う事でMain処理では、この関数をコールするだけですみます。

f:id:torusanada98:20210810180318p:plain

続いて、リモコンサンプルコードで取得したキーコードをMain処理への受け渡しできるようにします。リモコン処理は割り込み処理なので、キーコードをグローバル変数で受け渡しします。下記が現状のリモコンサンプルコードです。

f:id:torusanada98:20210810180343p:plain

キーコードはローカル変数keyの格納されています。事前にkeyをグローバル変数宣言して使用します。

f:id:torusanada98:20210810180359p:plain

具体的にはget_ir_key関数を使ってキーコードを格納するkey変数のint宣言を削除しています。そのかわりに、ソースの先頭でint key;でグローバル変数宣言を行っています。次回は移植を行います。

 

つづく(構想編8)