汎用I/Oを使って、LEDを操ってみようS08ではじめるマイコン制御プログラミング(3)(1/3 ページ)

マイコン制御の基礎である入力と出力。今回もGPIOを使ってLEDの点灯を制御する。例を参考にGPIOの操作に慣れよう。

» 2008年11月27日 00時00分 公開
[高田浩,@IT MONOist]

 前回「マイコン制御はじめの一歩、LEDを点灯させよう!」の内容はいかがでしたか? 新鮮な驚きがありましたか? 実質、ソースを2行追加しただけでLEDを点灯させることができたのです。でも、あまり深く考えちゃいけません。あれっ? なんだか不服そうですね。なになに? 「乾電池とLEDと抵抗があれば、同じことができる」ですって……。気がついちゃいましたか。実は前回行ったのは、ONになりっぱなしのスイッチをプログラムで作っただけなのですね。この場合、マイコンもICも必要ありませんでした。

 でも、ちょっと待ってください。前回は「はじめの一歩」だったのです。物には順番があります。一歩目が無ければ二歩目も有り得ません。今回はその続きです。これからだんだん複雑になり、ありがたみが分かってきます。このままでは、制御に向いているというマイコン・システムの沽券(こけん)にかかわります。

前回のプログラムの改造:SWでON/OFF制御

 では、スイッチでLEDの点灯/消灯を制御するプログラムを考えてみます。スイッチの状態によってレジスタに書き込む値を変えれば良いのです。ちょっとだけ制御っぽくなってきましたね。

 LEDは前回と同じPTC0、スイッチはPTA2を使います。PTA2を押したり離したりすることでPTC0の点灯/消灯を切り替えます。

 PTAD、PTADDレジスタは下記のようになります(図1)。

ポートAのレジスタ 図1 ポートAのレジスタ

 Port AはPort Cと似ていますが、若干制限があるようです。しかし、PTA2は普通に使えます。

 スイッチですのでPTADD2を0(入力)に設定します。スイッチの状態はPTAD2から読み取ります。リスト1を参考にプログラムを修正してください。スイッチの値をLEDに反映する部分は繰り返し処理の中に書きます。

リスト1 リスト1

 プログラムをビルドしてダウンロード、動作確認してみてください……。動きませんね。スイッチのON/OFFを切り替えてもLEDがつきっぱなしです。では、どこに問題があるのかデバッガを使ってデバッグしてみましょう。

 デバッガを起動した後、マウス・ポインタをSourceウィンドウの「PTCD_PTCD0 = PTAD_PTAD2」の上に移動して右クリック。[Set Breakpoint]を選択してください。その行の先頭に右向きの矢印アイコンが付加されます(図2)。

ブレークポイントの設定 図2 ブレークポイントの設定

 これはブレークポイントといい、指定した場所でプログラムの実行を中断できます。Start/Continueボタンをクリックしてプログラムを実行してみてください。ブレークポイントで停止するはずです。

 スイッチ(PTA2)の状態を確認するためInspectウィンドウを開き、PTADレジスタを確認してください。PTAD2は0になっています。

 次にPTA2を押したままStart/Continueボタンをクリックしてください。再びブレークポイントに到達して停止します。もういちどPTAD2を確認してください。0のままで変化ありませんね。

 では、デモ・ボード回路図を確認して見ましょう。「DEMOQE Base Board Schematic.pdf」を参照してください。1ページ目の右下です(図3)。

回路図スイッチ部分 図3 回路図スイッチ部分

 スイッチを押すとGNDにつながり、信号ピンがLOWに落ちるようです。スイッチを離すとHIGHには……なりませんね。これがHIGHでもLOWでもないハイ・インピーダンスの状態です。こういう回路では通常、プル・アップ抵抗をつけて離している状態でHIGHになるようにするのですが、それもありません。ボードの設計ミスでしょうか? でも、前回紹介したデモ・プログラムではちゃんとスイッチが機能していましたね。

 ここで、第1回「マイコン・システムでどんなことができるのか?」で説明したGPIOの使い方を思い出してみてください。3種類のレジスタを使うといいました。ここで満を持して登場するのが「内部プルアップ・イネーブル・レジスタ」です。そうです。プル・アップ抵抗に相当する回路がマイコンに内蔵されているのです。このレジスタでその機能を有効にすれば良いのです。レジスタ名はPTAPEです(図4)。

ポートA プル・イネーブル・レジスタ 図4 ポートA プル・イネーブル・レジスタ

 PTAPE2に1を書き込めば有効になります。下記のようにプログラムを修正し、動作確認してみてください(リスト2)。

リスト2 リスト2

 PTA2を押すとPTC0が点灯し、PTA2を離すとPTC0が消灯します。

       1|2|3 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.