マイコン制御はじめの一歩、LEDを点灯させよう!:S08ではじめるマイコン制御プログラミング(2)(3/3 ページ)
入出力装置なくして、マイコン・システムは成り立たない。今回は基本的な汎用I/O(GPIO)を使ってLED点灯プログラムに挑戦。
ユーザー・プログラムの追加
いよいよお待ちかねのプログラミングです。LED(PTC0)を点灯させるプログラムを考えてみましょう。
PTC0はその名のとおり、マイコンの信号ピンPTC0に接続されており、パラレルI/OポートCで制御します。ポートCのデータ方向レジスタ(PTCDD)に“出力”を指定し、データ・レジスタ(PTCD)に“LED点灯の値”を書き込めばよいのです。
リファレンス・マニュアル(120ページ)を見てみますと次の記述があります(図8)。
これらを踏まえて、プログラムをリスト2のように変更してみます。
それでは、プログラムをビルドしてターゲットにダウンロード、実行してみましょう。見事にLEDが……おや? 光りませんねぇ。
こんなときはどうしたらいいでしょうか。そうです「デバッグ」をしてみましょう。一般的にはここでprintfデバッグの出番でしょうが、マイコンのようにリソースの限られた環境ですとprintfは実装されていないのが普通です。そこで登場するのが「デバッガ」です。これまではプログラムをダウンロードするだけのために[Debug]ボタンを使っていましたが、今回はデバッグのために[Debug]ボタンをクリックしてください(図9)。
デバッガを起動すると、初期設定ではプログラムが起動して、main関数の先頭で停止します。ここで「Source」ウィンドウを確認し、[Start/Continue]ボタンをクリックしてください(図10)。先ほど停止した個所の続きからプログラムが実行されます。実行中かどうかは、[Start/Continue]ボタンの色と、画面右下のステータス・バーの表示で確認できます(図11)。なお、停止するには[Halt]ボタンをクリックします。
それでは、プログラムどおりレジスタの値が変わっているかを確認してみましょう。リファレンス・マニュアルで見たいレジスタのアドレスを調べて「Memory」ウィンドウで観察してもよいのですが、ここでは「Inspect」ウィンドウを使って確認してみることにしましょう。デバッガのメニュー[Component]−[Open]で「Inspect」アイコンをクリックしてください。これで、「Inspect」ウィンドウが開きます(図12)。
そして、[IO Register]−[MC9S08QE128]−[MODULE PTC]−[PTC REGISTERS]を選択すると、ウィンドウの右側に関連するレジスタの一覧が表示されます(図13)。
いちいちリファレンス・マニュアルでアドレスを調べなくてよいので便利ですね。ついでに、16進数表記のままだと分かりにくいので、このウィンドウ上で右クリックし、ショートカットメニューの[Format]−[Binary]を選択して2進数表記に変更してみましょう。
プログラムでは、PTCDD0とPTCD0の値を「1」にしています。レジスタにもちゃんと反映しているようです(つまり、作成したプログラムどおり動いているということですね)。
次に、デモ・ボード回路図でLED点灯の仕組みを確認してみましょう。LEDはベース・ボード側に搭載されていているので、「DEMOQE Base Board Schematic.pdf」を参照してください(2ページ目の右上)(図14)。
ベース・ボードの回路図を見てみると、VDDとマイコンの信号ピンとの間に電流制限の抵抗を介して、LEDが接続されているのが分かります。これは、マイコンの信号ピンがLOWのときにLEDの両端に電圧が発生し、点灯する回路です。つまり「負論理」ということです。つまり、ここに“バグ”が潜んでいたということです。ベース・ボードの回路は負論理ですので、PTCD0の値を「1」にしてもLEDは点灯せず、逆に消灯してしまいます。
念のため、デバッガでレジスタを修正して確認してみましょう。「Inspect」ウィンドウのPTCDの値「111111」をダブル・クリックし、「111110」に修正してみてください(図15)。
いかがでしょうか? デモ・ボードのLED PTC0が点灯するはずです。やはり原因はココですね。
それでは、プログラム・ソースを修正してみましょう。デバッガを終了して「main.c」ファイルを開いてください。リスト3のように修正した後、再びプログラムのビルド、マイコンへのダウンロードを行って動作を確認してみてください。
これでPTC0が見事に点灯するはずです! うまくいかない方は本稿をもう一度読み、設定やプログラムの見直しを十分に行ってみてください。
いかがでしたか? 今回登場したモジュールは基本的なGPIOだけですが、はじめて組み込みプログラミングをした読者の方は、新鮮な驚きがいろいろとあったのではないでしょうか。
次回は今回作成したLED点灯プログラムに改造を施してみます。「もっと便利になる」「もっと使いやすくなる」などの発想を具現化できるのがマイコン制御プログラミングのだいご味です。お楽しみに!(次回に続く)
Copyright © ITmedia, Inc. All Rights Reserved.