マイコン制御はじめの一歩、LEDを点灯させよう!S08ではじめるマイコン制御プログラミング(2)(3/3 ページ)

» 2008年10月27日 00時00分 公開
[高田浩,@IT MONOist]
前のページへ 1|2|3       

ユーザー・プログラムの追加

 いよいよお待ちかねのプログラミングです。LED(PTC0)を点灯させるプログラムを考えてみましょう。

 PTC0はその名のとおり、マイコンの信号ピンPTC0に接続されており、パラレルI/OポートCで制御します。ポートCのデータ方向レジスタ(PTCDD)に“出力”を指定し、データ・レジスタ(PTCD)に“LED点灯の値”を書き込めばよいのです。

 リファレンス・マニュアル(120ページ)を見てみますと次の記述があります(図8)。


ポートCのレジスタ 図8 ポートCのレジスタ ※MC9S08QE128/96/64リファレンス・マニュアル(120ページ)より

 これらを踏まえて、プログラムをリスト2のように変更してみます。

main.cの修正(2) リスト2 main.cの修正(2)

 それでは、プログラムをビルドしてターゲットにダウンロード、実行してみましょう。見事にLEDが……おや? 光りませんねぇ。

 こんなときはどうしたらいいでしょうか。そうです「デバッグ」をしてみましょう。一般的にはここでprintfデバッグの出番でしょうが、マイコンのようにリソースの限られた環境ですとprintfは実装されていないのが普通です。そこで登場するのが「デバッガ」です。これまではプログラムをダウンロードするだけのために[Debug]ボタンを使っていましたが、今回はデバッグのために[Debug]ボタンをクリックしてください(図9)。

デバッガ起動画面 図9 デバッガ起動画面

 デバッガを起動すると、初期設定ではプログラムが起動して、main関数の先頭で停止します。ここで「Source」ウィンドウを確認し、[Start/Continue]ボタンをクリックしてください(図10)。先ほど停止した個所の続きからプログラムが実行されます。実行中かどうかは、[Start/Continue]ボタンの色と、画面右下のステータス・バーの表示で確認できます(図11)。なお、停止するには[Halt]ボタンをクリックします。

ラン・コントロール・ボタン 図10 ラン・コントロール・ボタン
ステータス・バー 図11 ステータス・バー

 それでは、プログラムどおりレジスタの値が変わっているかを確認してみましょう。リファレンス・マニュアルで見たいレジスタのアドレスを調べて「Memory」ウィンドウで観察してもよいのですが、ここでは「Inspect」ウィンドウを使って確認してみることにしましょう。デバッガのメニュー[Component]−[Open]で「Inspect」アイコンをクリックしてください。これで、「Inspect」ウィンドウが開きます(図12)。

Inspectウィンドウ 図12 Inspectウィンドウ

 そして、[IO Register]−[MC9S08QE128]−[MODULE PTC]−[PTC REGISTERS]を選択すると、ウィンドウの右側に関連するレジスタの一覧が表示されます(図13)。

ポートCのレジスタ群 図13 ポートCのレジスタ群

 いちいちリファレンス・マニュアルでアドレスを調べなくてよいので便利ですね。ついでに、16進数表記のままだと分かりにくいので、このウィンドウ上で右クリックし、ショートカットメニューの[Format]−[Binary]を選択して2進数表記に変更してみましょう。

 プログラムでは、PTCDD0とPTCD0の値を「1」にしています。レジスタにもちゃんと反映しているようです(つまり、作成したプログラムどおり動いているということですね)。

 次に、デモ・ボード回路図でLED点灯の仕組みを確認してみましょう。LEDはベース・ボード側に搭載されていているので、「DEMOQE Base Board Schematic.pdf」を参照してください(2ページ目の右上)(図14)。

回路図LED部分 図14 回路図LED部分 ※デモ・ボード回路図「DEMOQE Base Board Schematic.pdf」より

 ベース・ボードの回路図を見てみると、VDDとマイコンの信号ピンとの間に電流制限の抵抗を介して、LEDが接続されているのが分かります。これは、マイコンの信号ピンがLOWのときにLEDの両端に電圧が発生し、点灯する回路です。つまり「負論理」ということです。つまり、ここに“バグ”が潜んでいたということです。ベース・ボードの回路は負論理ですので、PTCD0の値を「1」にしてもLEDは点灯せず、逆に消灯してしまいます。

 念のため、デバッガでレジスタを修正して確認してみましょう。「Inspect」ウィンドウのPTCDの値「111111」をダブル・クリックし、「111110」に修正してみてください(図15)。

PTCDの変更 図15 PTCDの変更

 いかがでしょうか? デモ・ボードのLED PTC0が点灯するはずです。やはり原因はココですね。

 それでは、プログラム・ソースを修正してみましょう。デバッガを終了して「main.c」ファイルを開いてください。リスト3のように修正した後、再びプログラムのビルド、マイコンへのダウンロードを行って動作を確認してみてください。

main.cの修正(3) リスト3 main.cの修正(3)

 これでPTC0が見事に点灯するはずです! うまくいかない方は本稿をもう一度読み、設定やプログラムの見直しを十分に行ってみてください。



 いかがでしたか? 今回登場したモジュールは基本的なGPIOだけですが、はじめて組み込みプログラミングをした読者の方は、新鮮な驚きがいろいろとあったのではないでしょうか。

 次回は今回作成したLED点灯プログラムに改造を施してみます。「もっと便利になる」「もっと使いやすくなる」などの発想を具現化できるのがマイコン制御プログラミングのだいご味です。お楽しみに!(次回に続く)

前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.