前回は昔話に終始してしまいました。
今回は、実際の開発の話にしたいです。
Raspberry piから制御させるため、色々なリモコンフォーマットを生成できるようにします。
- UART経由でフォーマットやリモコンコード、繰り返し送信回数の指定ができる
- 少なくともNEC, SONY, 三菱, 家製協フォーマットを出力できる
リモコン信号は大きく、ヘッダー、データ0、データ1、セパレーター、ストップビット(ターミネーター)、ギャップで構成されています。
リモコン信号の塊をフレーム、赤外線が出力されている期間をマーク(mark),出力されていない期間をスペース(space)と呼ぶことにします。各要素を簡単に説明します。これを仕様としてプログラミングします。
- ヘッダー(HEADER): フレームの開始を示すため、データより長いマークとスペースから構成される。マークだけを示すこともある。フォーマットによってはヘッダーが無いものもある。
- セパレーター(separator):ヘッダーやデーターの区切りを示すもの。一般的にスペースが挿入される。
- データ:0,1を示す。1Tのマーク期間とスペース期間を変えて、0,1を識別する。SONYフォーマットではマーク期間を変えて0,1を識別する。一般的に8ビット(1バイト)単位のLSBファーストで送信される。フォーマットによっては8ビット単位とは限らない。バイト毎にセパレータが挿入されるフォーマットもある。
- ストップビット(ターミネーター):データがマーク→スペースの順で送信されるフォーマットでは、最終ビットが0なのか1なのかを示すため、ストップビットを配置してデータの終わりを示す。
- ギャップ:次のフレームを送信するまでの期間。この期間を守らないと正しいリモコンコードと認識されない。単純にコードの終わりに指定時間のスペース(無信号)を入れるものと、フレーム開始から次のフレーム送信開始までの期間を一定にするもがある。この場合、送信コードにより時間(0,1の割合が異なる)が異なるため、コード期間を算出する必要がある。また、ヘッダを含まないものもある。
実際の設計は別の機会に紹介するとして、実際にマイコンから出力した波形とリモコン受光モジュールで受信した波形です。NECフォーマットだけは対応機器がなく動作確認できていませんが、他は実機確認済みです。
家製協フォーマットは20バイトまでは対応しているつもりです、まだ実機(エアコンなど)では確認できていませんが。
STM32F100用ではありませんが、STM32F103C8T6での例を別のページSTM32F103C8T6 でTM1638を使う(IR Transmitter sample付き)で紹介していますので参考にしてください。だいたい同じように使えます。