ソフトウェアを書かなくてはなりません。本当にロボットの自律制御プログラムなんて書けるの?アジェンダプロジェクトの準備センサの動きを見るモータを動かしてみる制御戦略を決める性能評価プロジェクトの準備まず、CodeWarriorでプロジェクトを作成します。Expertから使用します。V5.0を使用しています。この説明通りにプログラムを作成してもうまく動きません。V5.1を使う場合には、このパッチが必要です。CodeWarriorを起動するまず、CodeWarriorを起動します。下のようなStartupダイアログが出てきます。選択するとStartupダイアログが出てきます。Projectボタンをクリックします。プロジェクトの作成まず、プログラム開発の基礎になる、プロジェクトを作成します。言語とディレクトリの選択まず、使用する言語とプロジェクトの作成場所を決めます。ディレクトリ欄は、お使いのPCのお好きな場所を指定してください。設定が終わったら、「次へ」ボタンをクリックします。次は、使用するデバイスとデバッガの接続方法を設定します。ここでは、デバイスとしてMC9S08QG8を選択します。Pro"を選択します。設定が終わったら、「次へ」ボタンをクリックします。「追加ファイルの選択」ダイアログが開きます。そのまま、「次へ」ボタンをクリックします。次のダイアログでは、プログラム開発を助けるツールを選択します。Expert"をチェックします。設定が終わったら、「次へ」ボタンをクリックします。次のダイアログでは、Cコンパイラで使用するオプションを設定します。ここでは、以下のようにすべてデフォルトのままにしておきます。formatNone設定が終わったら、「次へ」ボタンをクリックします。PC-Lintツールの選択PC-Lintは、プログラムの書き方を検査してくれます。今回は、使いませんので、"No"を選択します。新しいプロジェクトが作成されます。使用するパッケージの選択プロジェクトの作成には、もうちょっと設定が必要です。次は、使用するパッケージの選択ダイアログが現れます。"MC9S08QG8_16"以外のチェックをはずします。設定が終わったら、「OK」ボタンをクリックします。デバッグとリリースの選択プロジェクト作成のための設定も最後になりました。最後に選ぶのは、デバッグとリリースの選択です。コンパイル方法が変わってくる場合があります。そんな時に使用するのが、ここで指定する"Configuration"です。それぞれ選択してコンパイルします。今回は、評価ボードをそのまま使うので、"Debug"設定しか使いません。そこで、"Release"のチェックをはずします。設定が終わったら、「OK」ボタンをクリックします。以上で、新しいプロジェクトが完成しました。画面は、上記のようにいくつかのパネルに分かれています。比較的簡単にプログラミングを行うことができます。以下は、このプロジェクトで使用するビーンの一覧です。今回は、PWMを使わずにプログラムを書いてみました。A/Dコンバータ・ビーンの設定3軸加速度センサの出すアナログ信号は、A/Dコンバータビーンで受信します。ビーン・セレクタからADCビーンを選んでダブルクリックします。ビーン・インスペクタに"AD1"のプロパティが表示されます。EXPERTの場合には表示されるようになります。EXPERTボタンをクリックしてください。これから、プロパティを設定していきます。三つのアナログ信号として以下のポートに伝達されます。チャネル数を3にします。チャネル0から2までの端子名を以下のように変更します。次に設定するのは、A/D変換の時間の設定です。クリックすると変換時間を設定するダイアログが現れます。中にある"46オs"を左クリックするとプルダウンメニューが現れます。最後に「OK」ボタンをクリックすれば設定完了です。英語などで使用される"Western"フォントでは、"μ"が表示されます。これは「マイクロ秒」を示しているのです。このような表示になってしまいます。"us"で代用してくれれば、こんな事にはならなかったのに。以上で、"ADC"ビーンの設定は終了です。最終的にプロパティは以下のようになったはずです。モータ制御出力の設定このプログラムでは、モータの動作を汎用出力端子で制御しています。この制御に使用されるのが"BitIO"と呼ばれるビーン群です。ここでは全部で六つのビーンを定義します。ビーン・セレクタからBitIOビーンを選んでダブルクリックします。ビーン・インスペクタに"Bit1"のプロパティが表示されます。ここまでの手順は、以下の六つのビーンに共通です。以下、それぞれのビーンのカスタマイズをしていきます。Motor1Aビーンのカスタマイズカスタマイズする項目は、以下の三つです。ビーンの名前デフォルトのビーン名は、"Bit1"のような適当な名前になっています。プログラムを書いていると他のビーンとの区別が難しくなります。そこで、ビーンにはわかりやすい名前を付けます。"Motor1A"と入力します。次は、このビーンがどの端子に関連付けられるかを指定します。このビーンが出力専用であることを明示します。プログラムがコンパクトになります。"Output"を選択します。以上でカスタマイズは終了です。最終的にプロパティは以下のようになったはずです。以下のようにプロパティを設定します。Output最終的にプロパティは以下のようになったはずです。以下のようにプロパティを設定します。Output最終的にプロパティは以下のようになったはずです。以下のようにプロパティを設定します。Output最終的にプロパティは以下のようになったはずです。以下のようにプロパティを設定します。Output最終的にプロパティは以下のようになったはずです。モータ・ドライバをON/OFFさせるのにしか使用していません。以下のようにプロパティを設定します。Output最終的にプロパティは以下のようになったはずです。モータ・ドライバをON/OFFさせるのにしか使用していません。以上ですべてのビーンの定義が終わりました。このプログラムでは、割り込みを一切使わずに機能を実現しています。その代わり、時間待ちをする"Delay100US"というメソッドを使います。付いていますので、使用することができません。"Enable"(有効)を選択します。これで、時間待ちメソッドを使うことができます。コード生成とコンパイル以上でプログラムで使用する材料はそろいました。ソースコードは生成されません。すると、コード生成、コンパイル、リンクが行われます。3軸加速度センサの動作を見てみましょう。A/D変換プログラムを作るまず、必要になるのは、A/D変換プログラムです。ここでは、加速度センサからの値を3軸同時に取得するプログラムを作ります。テキストエディタを開きます。以下のプログラムを"main(void)"関数の直前に書きます。10ビットの値としてacc_value[]という配列に入れます。いつでも各軸の加速度が得られることになります。