■マイコンチップを搭載した付録基板 CQ出版社の発行する「トランジスタ技術」8月号に、NECのマイコンチップ78F0730を搭載したUSBマイコン基板が付録としてついていた。 マイコンチップ78F0730は、USBインタフェースを内臓しており、PCとUSBで直結できる。付録基板のチップには、既に、USBドライバやPCとの通信プログラムが書き込まれており、そのままPCのUSBポートに差し込むだけで遊べるという優れものだ。 この付録基板で何か遊んで見ようと考えた。ちょうど同じ頃、一度改造したジャンクのミニコンポにリモコンの受信機能を追加していたのだが、その関係から、この付録基板を使ってリモコンの送信機・受信機を作ってみようと思い至った。
付録基板には、予めトラ技の記事内で推奨されていたUSBコネクタやリセッタブルヒューズ、ピンヘッダを取り付けておいた。これに、リモコンの送受信機に必要な最小限の部品を取り付けてみた。 受信回路は、赤外線モジュール1個。送信回路は、赤外線LEDとその駆動用トランジスタ、LEDの電流制限用抵抗、と非常にシンプルだ。 リモコン信号の受信結果は、USBの通信プログラムを介してPC側で表示する。送信データもPC側で入力して、通信プログラムを介してマイコンで受け取る。 ■リモコン送受信プログラム リモコン送受信のためのプログラムは、NECのプログラム開発環境PM+を使ってC言語で作成した。
RAMエリアに書き込み可能なように、送受信合わせて2キロバイト以内に納まるようにした。 手元のオーディオ機器のリモコンを調べた所、KENWOODやONKYOのリモコンはNECフォーマットであった。DENONのリモコンは、独自のフォーマットであった。プログラムでは、このNECフォーマットとDENONフォーマットの2種に対応させた。 詳細はソースプログラムを参照して頂ければ幸いであるが、ポイントを以下にしるしておく。 ・受信プログラム
リモコン信号の受信ビット長の計測には、forループによる遅延タイマーを使った。ビット0/1の判定は、計測結果と判定閾値との比較で行うので高い精度が必要という訳では無い。マイコン内臓のタイマー機能を使わなくてもプログラムのループ処理で十分だ。 事前にテストプログラムで試して見た所、 unsigned short i; for(i =0; i< 10; i++); 受信信号の立下りから次の立下りまで、このループの実行回数をカウントして、それが32回(1.6ms相当)未満ならビット0、以上なら1と判定した。 なお、最初のビットについては、NECフォーマットの場合には、リーダー信号となるので、カウント結果が、128回(6.4ms相当)を越えた場合には、続く信号をNECフォーマットとして受信するようにした。そうでない場合には、DENONのフォーマットと解釈する。 ・送信プログラム リモコンの送信信号は、赤外線を38KHzのサブキャリアで変調する必要がある。赤外線受信モジュールから出力される受信信号は、このサブキャリアを復調した後の負論理の信号である。 つまり、送信プログラムでは、送信データの各ビットの先頭ハイレベルの期間だけ、LEDを38KHzでオン・オフさせればよいことになる。 38KHzのオン・オフを実現するためには、その倍の周期の76KHzで、LEDを点灯、消灯させる必要があり、 これをプログラムのループタイマーで実現するのはちょっと困難だ。 PICならば、アセンブラ言語で命令クロック数をきちんと計算してプログラムすることも出来るが、78K0マイコンで、更にC言語で作成するとなると、精度が保証出来ない。 そこで、送信プログラムでは、この78KHzの発振を実現するためにマイコン内臓のタイマーを使うことにした。インターバルタイマーにより、1/78KHz周期で割り込みがかかるようにして、その割り込み処理内でLEDを点灯、消灯させることにした。 メイン処理では、この割り込み回数をチェックすることで、ビットの送信時間をコントロールした。なお、割り込み周期は、デジタル処理のために、75.47KHz(37.7KHz)となったが、赤外線受信モジュールは、38KHzから少々ずれても検出してくれるので問題は無い。 実際の所、このマイコンチップで78KHzの割り込みが出来るのかどうか不安であったが、完成後のテストでは、うまく動作した。 |