◆ 入力/出力ポート に関係する I/O制御レジスタ(続き)
ポートBに関するレジスタは次の三つです。ポートAとほとんど同じですが、無関係なビットが入っていない分、ポートAよりもシンプルになっています。
ポートBデータ・レジスタ(PTB)
・ポートAデータ・レジスタ(PTA)の説明を参照してください。
データ方向レジスタB(DDRB)
・データ方向レジスタA(DDRA)の説明を参照してください。
ポートB入力プルアップ・イネーブル・レジスタ(PTBPUE)
・ポートA入力プルアップ・イネーブル・レジスタ(PTAPUE)の説明を参照してください。
前回書き忘れましたが図中の $0000 や $0001 といった数字は、そのレジスタが配置されているアドレスを示しています。CodeWarrior のデバッガ画面を開いて Memory ペインを見るときなど参考にしてください。
◆ 入力/出力ポートの考え方
マイコンが何らかの仕事をするためには、マイコンの内部だけではなく、外部に対して何らかの情報を入力または出力する必要があります。その最も単純なものが、入力/出力ポートです(まとめて入出力ポートと呼ばれることもある)。
ポートAは 6本の端子をもった入出力ポートです。全部まとめて入力または出力することもできますし、6本をそれぞれ独立して使うこともできます(ただしPTA2には出力機能はない)。個別に使う場合は PTA0 から PTA5 のように呼ばれます。8本の端子をもつポートBも同様で、8本を個別に使う場合は PTB0 から PTB7 のように呼ばれます。
いずれかのポートを使おうとしたとき、まず最初に考えることは、それを入力として使うのか、それとも出力として使うのかを決めることです。たとえば、 PTA3 を入力方向にして使うことにすると、PTA3 は入力ポートと呼ばれることになります。 そして、たとえば PTA1 を出力方向にして使うことにすると、PTA1 は出力ポートと呼ばれることになります。
◆ 入力ポートの考え方
入力ポートについてまず理解しておかなくてはならないことは、入力されたデータの読み取り方についてです。
ユーザーの視点で見た入力ポートの基本的な機能:
入力ポート1本1本について、それぞれ入力された電圧により 「 0 または 1 」 が読み取られ、入力結果としてデータ・レジスタの該当ビットに格納されます。何ボルト とか 何% とか、そういう中間的な大きさを示す結果は得られません。

ポート入力電圧と入力結果の関係の目安
ここでちょっと理屈っぽい説明をしますが、いきなりこれを全部理解するのは難しいでしょうから、ある程度慣れてから、またこのあたりを読み直していただくとよいと思います。
回路的な視点で見た入力ポートの基本的な機能:
入力ポートの端子(ピン)につないだ信号線の電圧が、GNDに近いか、それとも VDDに近いかを見分けて 0 または 1 の結果を得ます。
GND の電圧は 0V です。入力ポートの電圧がこれに近いときは、入力がローと言います(単純に L と略記されることが多い)。 一方 VDD の電圧というのはマイコンの電源電圧のことです。QY4A の電源電圧は 3V または 5V で動作可能なので、使用している電源電圧によって 3V または 5V が VDD の電圧となります。入力ポートの電圧が VDD に近いときは、入力がハイと言います(単純に H と略記されることが多い)。
気を付けておきたいのは、Lと認識する電圧範囲、Hと認識する電圧範囲というのが決まっていて、それから外れた中途半端な電圧のときは正しく認識される保証がないということです。具体的な範囲は英文データシートの電気的仕様(Chapter 16 Electrical Specifications)の VIH,VIL の項目に書かれています。 0.3 × VDD 以下のとき "L" 、0.7 × VDD 以上のとき "H" と認識させることができます。どうしてもその中間の電圧を入力したい場合は、汎用入出力ポートではなくA-Dコンバータの機能を使う必要があります。
QY4A マイコンの入力ポートには、あると意外に便利な追加機能が入っています。
具体的なことは、出力ポートの説明の後でまとめて解説します。入力ポートの応用的な機能:
各ポートはプルアップ抵抗を内部に備えており、必要に応じてオン/オフすることができます。 回路構成によっては、これで外付け部品を減らすことが可能です。内部プルアップをオンにしておいても、そのポートを出力方向にしたときは内部プルアップ無効になります。
◆ 出力ポートの考え方
このマイコンの出力ポートは、わりと単純です。
ユーザーの視点で見た出力ポートの基本的な機能:
出力ポート1本1本について、それぞれデータ・レジスタの該当するビットに 「 0 または 1 」 を書き込むと、L または H の電圧が出力されます。出力ポートの機能を単純に使う場合は、何ボルト とか 何% とか、そういう中間的な大きさを出力することはできません。
出力ポートの模式図(イメージ図)
また理屈っぽい説明をしますが、これをすべて理解する必要はありません。
回路的な視点で見た出力ポートの基本的な機能:
図中のデータ・レジスタの該当ビットに 0 を書き込んだときは、インバータ(反転器)の出力が 1 すなわち H になります。すると、下側の NチャンネルMOS FET がオン、上側の PチャネルMOS FET がオフになるので、出力ポートは GND に引っ張られて L レベルになります。該当ビットに 1 を書き込んだときは、インバータの出力が 0 すなわち L になります。すると、上側の PチャネルMOS FET がオン、下側の NチャンネルMOS FET がオフになるので、出力ポートは VDD に引っ張られて H レベルになります。
出力ポートに流せる電流には制限がありますから、それを守る必要があります。PTA は それぞれ ±25mA、PTB はそれぞれ ±15mA となっています。LED は余裕で光らせることができますが、豆電球やモータを直接駆動することはできません。 また、マイコン全体で 100mA 以上は流すことができないので注意が必要です。
◆ PTA3 と PTA1 を使った入出力ポートの説明
入出力ポートの簡単な使用例を、図を使って説明していきます。 「え~、またですか?」 という声が聞こえてきそうですが、PTA3 にプッシュ・スイッチ、PTA1 に LED をつなぐことを考えてみましょう。最初に示すのは、やってしまいがちな 良くないつなぎ方 です。
良くないつなぎ方
「スイッチを押したときに入力ポートのレベルを H にしよう」 という気持ちはわかるのですが、少し問題があります。これではスイッチを押していないときに入力ポートがどこにもつながらないので、電圧が定まらず L 入力にならないのです。
それから 「出力ポートが H のときに LED を光らせよう」 という意図もよくわかるのですが、このままでは電流が流れすぎてポートの制限を越えてしまいますし、LED は明るすぎて発熱も限度を超え、壊れてしまうでしょう。 電源電圧が 3V 以下で、しかも電源の内部抵抗が充分に大きい場合にはこのままの回路で LED を点灯させることもできますが、それはよほど特別な理由があるときだけだと考えてください(近いことをしている例)。
次に、改善した回路を示します。
改善した例1
追加した 10kΩの抵抗は、スイッチがオフのときに L 側に引っ張る役目をしています。これを プルダウン抵抗 と呼びます。 抵抗値は 10kΩくらいが多いのですが、割と適当で構いません(数kΩ~100kΩくらい)。
LED には 330Ωの抵抗を直列に入れました。 LED の順方向電圧が 2V とすると、VDD が 5V のときは 330Ωの抵抗にかかる電圧は 3V になります。 オームの法則 により、電流 = 電圧/抵抗 なので 3[V] ÷ 330[Ω] ≒ 0.01[A] となって、約 10mA 流すことになります(割り算の÷の記号を/と書くことが多いので覚えておくこと)。 このようにして、流れる電流を制限するための抵抗を 電流制限抵抗 と呼びます。
最近の LED は明るいので、10mA も流せばまぶしいくらい明るく光るはずです。このままの回路で電源電圧を 3V にした場合、LED の順方向電圧は変わりませんから抵抗の両端の電圧が 1V となります。すると、電流は 1[V] ÷ 330[Ω] ≒ 0.003[A] となり、約3mA 流れることになります。これでも暗くはなく、はっきりと光って見えます。
なお、電流制限抵抗と LED の順番は、どちらでもかまいません。言葉で説明するより見たほうが早いので、図で示しておきます。
電流制限抵抗と LED の順番はどちらでもかまわない
ところで、スイッチと LED のつなぎ方は1種類ではありません。 「スイッチを押したときに L 入力」 とすることもできますし、「出力ポートが L のときに LED を光らせる」 ということもできます。その場合はスイッチや LED のオン,オフとデータ・ビットの1,0の扱いが変わってくるので、プログラムで対応する必要があります。
改善した例2
この場合は、スイッチを押していないときに 10kΩの抵抗によって入力ポートの電圧レベルを VDD 側に引っ張っています。そしてプッシュ・スイッチを押したときだけ GND 側すなわち Lレベルになります。このような抵抗を プルアップ抵抗 と呼びます。
出力ポートは、接続している LED の向きが先ほどとは逆 になっていることに注目してください。そして、電流制限抵抗の接続先が GND から VDD に変わっていますね。この構成の場合は、H出力のときは電流が流れず LED は消灯。L出力のときは先ほど計算したのと同じ大きさの電流が流れて LED が点灯します。
ここまで説明してきてやっと話がつながったと思いますが、たった今説明したプルアップ抵抗をマイコンの外に付けず、マイコン内蔵のプルアップ抵抗 を利用することが可能です。それを使えば、回路は下記のように簡単にできます。
内蔵プルアップ抵抗を使う例
いかがだったでしょうか。たかが入出力ポート、されど入出力ポート。しっかり説明をするとなると思った以上に分量が多くなってしまいます。そしてさらに、次回もこの続きをやります。ここまでは説明ばかりだったので、次回は実際に動かしてみることにします。
『参考文献』
「試しながら学ぶHC08マイコン入門」 (CQ出版)
第1章 マイコン電子工作を始めよう
第10章 統合開発環境CodeWarriorを使ってみる
Appendix F KMC908QY4Aユーザ・モード・モニタ入りマイコンの知識
筆者のホームページ 『マイコン工作の実験室』
組み込みエンジニア KAWANO
