DEMO9RS08KA2評価ボードには、BDMポートを付けることもできます。 これを使って、アプリケーションを作ってみましょう。 題材は、ルーレットゲームです。
緊急発行のため、プログラムは公開しておりません。 ご了承ください。
以下にこのアプリケーションの回路図を示します。 押しボタンの操作で8個のLEDと1個の圧電スピーカを駆動します。
R2(470Ω)は、 FLASH ROMのプログラム用12V電源がつながっている時に押しボタンを押しても、 悲惨な事故が起こらないように入れてあります。
LEDには、電流制限抵抗を入れていません。 これは、MC9RS08KA2の出力電流が多くないという事実を利用しています。 設計では、電源電圧3Vのときに、 "H"出力ポートと"L"出力ポートで0.5Vづつ電圧降下が起き、 それによって出力電流は5mAに制限されます。 これは、3V電源の時に限る計算です。 したがって、この回路に5V電源を与えると マイコンとLEDに大電流が流れて破壊する可能性がありますのでご注意ください。
品名 | 規格 | メーカ | 個数 | 調達先 |
---|---|---|---|---|
マイコン | MC9RS08KA2CPC | Freescale | 1 | Freescale |
カーボン抵抗 | 470Ω 1/6W | - | 1 | 秋月電子 |
カーボン抵抗 | 1kΩ 1/6W | - | 1 | 秋月電子 |
電解コンデンサ | 47µF 16V | SANYO | 1 | 手持在庫 |
積層セラミック・コンデンサ | 0.1µF 50V | - | 2 | 秋月電子 |
赤色発光ダイオード | OSDR5113A | OptoSupply | 1 | 秋月電子 |
黄色発光ダイオード | OSNG5113A | OptoSupply | 3 | 秋月電子 |
緑色発光ダイオード | OSYL5113A | OptoSupply | 4 | 秋月電子 |
タクト・スイッチ | - | - | 1 | 梅澤無線 |
ICソケット | 8P DIP | - | 1 | 秋月電子 |
ボタン電池ホルダ | CH25-2032 | SHOGYO | 1 | 秋月電子 |
ボタン電池 | CR2032 | 東芝 | 1 | 千石電商 |
圧電スピーカ | - | - | 1 | 梅澤無線 |
ピンヘッダ | 2×3 | - | 1 | 秋月電子 |
片面ユニバーサル基板 | 95mm×72mm | - | 1 | 秋月電子 |
丸ビス | 2mm×10mm | - | 2 | 手持在庫 |
6角ナット | 2mm | - | 2 | 手持在庫 |
スペーサ | 3mm×20mm | マック8 | 4 | 手持在庫 |
6角ナット | 3mm | - | 4 | 手持在庫 |
DEMO9RS08KA2を評価ボードとして使用するためには、 評価ボードにもBDMピンヘッダをつけます。
これで、ソフトウェア開発の準備は完了です。
ここでは、ソフトウェアの概要を説明します。 プログラムコードの詳細については、 都合により、割愛しています。
このプログラムは、 押しボタンスイッチを押すとLEDの光が走り出し、 押しボタンスイッチを放すとLEDの速度が徐々に遅くなり、 最後には停止します。 停止した位置によって、「あたり」と「はずれ」の音を出します。
このプログラムでは、押しボタンスイッチを押さずに 一定期間放置すると、LEDを消灯し、低消費電力モードに入ります。 低消費電力状態からは、押しボタンスイッチを押すと復帰します。
このプログラムは、状態遷移によって動作しています。
電源ONによるリセット直後、MC9RS08KA2は PROLOGUEという状態に入ります。 PROLOGUEでは、 押しボタンスイッチが押されていない状態であることを確認します。 つまり、押しボタンスイッチを押したまま電源を投入しても ルーレットは走り出しません。
押しボタンスイッチが押されていないことを確認したら、 MC9RS08KA2は、WAITという状態に入ります。 この状態では、キーボード割り込みを待ち、 押しボタンが押されたらRUNという状態に遷移します。 同時に、押しボタンが押されなかった時間を計測しており、 約5分間、押しボタンが押されない場合には、STOPという 状態に遷移します。
STOP状態では、 STOP命令により低消費電力モードに入ります。 この状態では、押しボタンスイッチが押されるのを待ちます。 押しボタンが押されたら、再び、PROLOGUE状態に 遷移します。
一方、RUN状態では、 徐々に移動速度を落としながら、LEDを移動させます。 移動速度が、ある決められた移動速度にまで低下したら、 EPILOGUE状態に遷移します。
EPILOGUE状態では、停止したLEDの位置によって、 「あたり」と「はずれ」の効果音を圧電スピーカから出します。 効果音を出し終わったら、PROLOGUE状態に遷移します。
ここでは、プログラムのデバッグの際に問題になった事柄を取り上げます。
圧電スピーカは、PTA3端子に接続されています。 この端子は、デバッグ時には、BKGD端子として使用されていますので、 デバッグ中は、圧電スピーカから雑音が出ます。
また、同じ理由で、 圧電スピーカから出す音のデバッグをデバッガを使って行うことができません。 端子数の少ないマイコンだから、仕方が無いですね。
このプログラムは、複数の割り込み待ちループによって構成されています。 それぞれの割り込み待ちには、 反応時間の短縮と低消費電力化を狙って WAITとSTOPという命令が使用されています。
STOP命令は、内部クロックを停止させる命令ですが、 デバッグ中、内部クロックが無いとBDMはうまく接続できません。 データシートでは、STOP状態でもBDMがイネーブルされていれば クロックが動き続けるとされているのですが、 実際には、STOP命令を実行するとデバッガが接続されなくなってしまいました。
そこで、wait_nopと stop_nopというアセンブラのマクロを宣言して、 デバッグ中はNOPに置き換えてやることにしました。 こうすると、デバッグ中もクロックが停止せず、 消費電力の削減はできませんが、快適にデバッグを行うことができます。
リチウム型ボタン電池を入れて完成です。
消費電力を測定するため、 STOP状態の消費電流を手持ちのテスタで測定しましたが、 測定不能という結果になってしまいました。 おそらく、1µA以下になったのだろうと推測しています。
2006-06-11 緊急発行。