赤外線送受信機 NO.11 (PIC12C509A 受信機)

[Previous] [Next] [Index]
C 言語による受信機の PIC プログラム
 赤外線送受信機を作るためにアセンブラによる PIC プログラムの勉強をしてきたが、ここにきて C 言語の勉強を再開することになった。 Andy Birkett Projects に受信機デコーダの PIC プログラムが C 言語で公開されている。単に C 言語で記述しているだけなら、いまさら C 言語でプログラムを組む必要はない。何よりも驚いたのはたった 1 個の PIC12C508A にデコーダとスピードコントローラと 2 チャンネル分のマグネットアクチュエータドライバが PWM でコントロールされている。夢に描いていた PIC プログラムがそこにあった。

 PIC の勉強を始めるときにプログラムが C 言語で書けたらいいのにと考えていたが、はじめからアセンブラで記述してきたせいか今はアセンブラのほうがいいと思っている。しかし C 言語で書いたプログラムの見通しの良さも捨てがたい。

 プログラムをダウンロードしてみた。幸い CC5X C Compiler の free バージョンでコンパイルできる。早速コンパイラとマニュアルをダウンロードした。コマンドラインコンパイラだが MPLAB の統合環境の中に組み込めるのがありがたい。

 早速 C 言語で書かれたプログラムに目を通し、ソースをコンパイルしてみたところ、無事 HEX ファイルができた。 PIC に書き込んでテストしてみたが、出力に何も出てこない。ここから C 言語による悪戦苦闘のプログラム解析が始まった。

 プログラムの記述の仕方は人それぞれで、記述内容を理解するのはとても大変だ。 PIC 初心者にはなおさらである。しかし、たった一つの PIC にすべての機能が組み込めるとあれば何が何でも動かしてみたい気持ちになる。今まで以上に軽い受信機も夢ではないのだ。ここはなんとしてでも乗り越えなければならない。

 C 言語の勉強を再開するにあたり、いつもお世話になっている小黒さんに相談したところ、使っていないコンパイラがあるということで、いただいてしまった。

 両方のマニュアルに目を通しながら勉強し、コンパイルしたプログラムが何とか動くまでになった。ところがプログラムされている内容にいろいろと問題があることがわかった。当然プログラムを作った人が使っている送信機に合わせて作ってあるため、自分が使っている送信機とはパルスのタイミングなどが大幅に異なる。その結果期待した出力が出ないのだ。スロットルチャンネルを自動検出するプログラムになってはいるものの、プログラムはモード 2 を基本としている。 しかもスロットルストローク一つにも大きなタイミングの差がある。解決の糸口を見出すべくプログラムの提供者である Andy Birkett にメールで助言を求めた。快く応じてくれたが、使う送信機によって設定値が異なるのでカットアンドトライで試してほしいとの返事だった。

 人が作ったプログラムを解析するのはとても大変。しかし、理解できればなるほどこんな方法もあるのかといったプログラミング技法も身につく。何度も何度も紫外線消去のできる PIC に書き込んではテストを繰り返した。途中うっかり電源を逆接続して、二つあった PIC12C509A/JW の一つを昇天させてしまった。

 苦労の甲斐あって自分が使っている Futaba の送信機に合わせたプログラムに直すことができた。スロットルも、マグネットアクチュエータドライバもタイミングがぴったり合うようになった。感動の一瞬である。果たして分解能はどうか。オシロの波形で確認したところ、スロットルが 22 ステップ、マグネットアクチュエータドライバがそれぞれ左右 11 ステップあるのが確認できた。約 1.1KHz の PWM 周期だ。今まで作ってきたものに比べるとステップ数こそ少ないが、これだけの分解能があれば実用上全く問題ない。夢に描いていた機能が今現実となったのである。

 前回 0.76g の超軽量受信機を作ったが、同じ 2 チャンネルの機能を持った受信機を Andy Birkett のプログラムを基にして作り直してみた。大きく違うのはいままで 2 個の PIC を使って実現していた機能がたった 1 個の PIC で実現できている。 PIC 一つの重さは 0.1g にも満たないが、 1 個の PIC で実現していることに素晴らしい価値がある。必要ならば 3 チャンネルの受信機としても組むことができる。画像は新たに作った 2 チャンネルの受信機で 0.64g 。今回は FET も超小型のものを使っている。

 この C 言語によるプログラムを知ったきっかけを紹介しよう。少し前 E-ZONE の R/C Groups Discussion の Indoor and Micro Models に DIY Infra-red ? というスレッドがあった。丁度自分で作った赤外線送受信機で飛行機が飛んだときと重なったので、思い切って投稿したところ、大変大きな反響があった。特に赤外線コントロールユニットを普通の送信機にセットして使うシステムがいいと評価された。そのなかで私の作った赤外線コントロールユニットのプログラムと Andy Birkett のデコーダプログラムを組み合わせて実験を始めたというスレッドが目に入った。受信機についても投稿したら、なぜ二つも PIC を使っているのかといわれた。そこではじめて Andy Birkett のプログラムが一つの PIC で動くことを知ったのである。

 苦手な英語での Discussion ではあるが、思い切って投稿したことによりたくさんの情報を得ることができた。 PIC の素晴らしさに改めて感動するとともに、発言する勇気の大切さも一緒に学ぶことができた。

2 CHANNEL IR COMBO RECEIVER IRXA202 rxa202.hex for 12C509A

 従来の受信機とピンの配置をあわせてある。入力に赤外線受光素子を繋いで軽量な赤外線受信機となるが、 RF 受信機と組み合わせることもできる。あとは 5V での動作を考え DC-DC コンバータとモーターをドライブするための FET を繋げばいい。PIC 2 ポートでドライブするこの回路には 100Ω のコイルがマッチする。

 2003/01/26 に開催された藤沢市六会市民センター体育館で新たに作った IRXA202 受信機を A-1 2 号機に搭載してテストフライトを行った結果、従来と変らないコントロールができることを確認した。テスト機の全備重量は 10.9g 。


[Previous] [Next] [Index]
2003/01/28