ユビキタス鉄道模型
赤外線リモコン戦車
├ 赤外線送信側
├ 開発ソフト
├ 戦車受信側
├ 受信側ソフト
└ 終わりに
レーザ・グラフィックス
USB加速度センサマウス
ビジョンシステム
リアルタイムOS
LCD表示パネル
相撲ロボット
多自由度ロボット
 開発事例 TOPへ
 HOMEへ
イエローナビ
 ページTOPへ
 開発事例 TOPへ
 HOMEへ
YellowSoft.com
製品紹介 Q&A ダウンロード 開発事例 ユーザ ご購入 価格表 お問合せ
 赤外線リモコン戦車


  H8/3664Fを用いた赤外線リモコン戦車の製作
    前田博志


  開発ソフト

ソフトは(有)イエローソフト社のCコンパイラを使用しました。H83664の内蔵FROMデバックに対応しています。デバッカはFROMに書き込んだプログラムのブレークポイント設定、トレースなどが出来ます。

  プログラムリスト

プログラムはまず、ポート5をキーの入力端子として使用するために初期化しています。P5を入力端子として使用する理由はソフトウエアでポートをプルアップすることができるので、CPU外部にプルアップ抵抗を付ける必要がないためです。
SIOは2400bpsに設定しています。ここで、通常のH8シリーズと異なるのはトランスミットイネーブルをここではアクティブにしません。理由は後述します。


次に、赤外線搬送波38KHzを作るためにタイマWを設定しています。他にもタイマはA、Vとありますが、10MHzから38KHz近傍を比較的精密に作り出すには16ビットタイマWが一番向いているようです。
38KHzの信号を作るためにGRA、GRBの2本を使用しています。16ビットタイマカウンタTCNTがカウントアップしていき、GRAの値と一致するとFTIOA端子が1になります。かつ、TCNTが0にクリアされます。GRBの値と一致するとFTIOB端子が1になります。それをコンペアマッチのたびに0、1を交互に繰り返すトグル出力に設定しFTIOAから38KHzを出力させます。
トグル出力は38KHzの2倍で1周期ですから
10MHz÷(38KHz×2)= 131.5789474...
となります。小数点以下切捨てとし131をGRAに設定します。GRBはここでは信号として使用していませんが、FTIOB端子とFTIOA端子の位相差を90度とする場合、GRAの半分を設定すればよい事になります。GRB=66とします。38KHzは多少の誤差があっても、赤外線受光モジュールの方の性能で問題はないと思われます。


無限ループ内では初めにキー(P5)を読み込み、50msec待って再び読み込み、先に読み込んだデータと同じ場合、次のステップに進みます。これは機械式スイッチにはチャッタリングがつき物ですし、外来ノイズが乗って押していないのにあたかも押されたような症状になるのを防ぐためです。時間をおいて2回、もしくは複数回ポートを見に行けば、単発的なノイズの影響は受けないソフトになります。
キーデータが同じ場合、データのビットと0xffのXORを取っています。これはビットの0,1を反転させるためです。ポートはプルアップされていますので、なにも押されないときは全てのビットは1なのですが、反転すれば押されたキーのビットが1になります。筆者にはその方が分かりやすいためで、そうでない方は必要ありません。念のため、P50〜P55のみ見るためのANDをかけています。
キーが押されていなければデータは0です。そうでない場合、押されたキーの位置でTXDからAからFまでのアスキーコードを出力しています。このデータが先述の回路を通して赤外線として放出されることになります。連続して押されていてもデータは1回しか出力しないよう、フラグを用いています。


さて、前述したようにSIOのトランスミットイネーブルはSIO1文字出力関数char_out()の中で行っていて、かつ、データ送出後、またディスイネーブルにしています。
これは、H8/3664のSIOが例えばH8/3048のものと違い、電源投入後、なにもしないと初めの1文字が2回出てしまう癖を除いているものです。方法として他の方法も考えられると思いますが、筆者はこのようにしてクリアしました。H8/3664のCPUコアはH8/300HでH8/3048と同じと宣言していますが、周辺について同じとは言っていませんので、微妙な差があるようです。この辺はH8/3664がローコストを目標の1つとしているように思いますので、例えば4ビットマイコンのようにソフト側で対策してやることが多くなるのかも知れません。



← 赤外線送信側 3/6 戦車受信側 →