【初心者向】マイコン基本機能【入出力ポート】現役エンジニアが徹底解説

こんにちは、組み込みエンジニア歴20年以上のtomozoです。

 

今回は、

私の組み込み開発経験も交えながら

マイコンの基本機能の一つである

【入出力ポート/IO PORT】

について徹底解説します。

 

この記事は

マイコンの入出力ポートについて詳しく知りたい新人組み込みエンジニアの方

向けの記事です。

 

マイコンの入出力ポートを使いこなすために

情報を調べているところではないでしょうか?

 

新人の頃はマイコンのマニュアルを読んでみても、

ページ数が多くて分からないことばかりなので

もう少し簡単に知りたいところだけ分かればなあって思いますよね。

 

私も新人の頃に先輩からマニュアルみたら分かるよって言われたこと

ありましたが、それはある程度知っている人の意見であって

分からない人からしたらさっぱり分からないってこともあります。

 

この記事を読めば

  • マイコンの入出力ポートについて
  • 入出力ポートの関連用語
  • 組み込み機器での使用例

が分かるようになります。

 

このページを足掛かりにして

しっかり基本を理解してもらえたらうれしいです。

それでは早速解説をはじめます。

 

マイコンの入出力ポートとは

マイコンの入出力ポートとは、

端子から0/1のデータを出力したり

端子に入力された0/1のデータを読む機能のことです。

 

マイコンの端子を港( = ポート)に見立てて

荷物( = 0/1データ)が入ってきたり(INPUT)

出ていったり(OUTPUT)するので

この名前が付けられています。

 

その他、I/Oポート(アイオーポート)や

GPIO(General Purpose Input/Output:汎用IOの意味)

と言ったりもします。

 

どんなマイコンでも必ずある基本中の基本の機能です。

 

入出力ポート関連の専門用語

ここでは、少しハードウェア寄りの内容ですが

入出力ポートを理解する上で

新人組み込みエンジニアが知っておいて欲しい

以下3つの専門用語と内容を紹介します。

  • プルアップ・プルダウン
  • オープンドレイン/オープンコレクタ
  • ヒステリシス

それでは一つずつ見ていきましょう。

プルアップ・プルダウン

プルアップ・プルダウンというのは

簡単に言うとIOポートにつながれている信号ラインを

電源レベルかグランドレベルに抵抗を使って接続することです。

絵で描くと下の図のようになります。

電源につなぐものを電源レベルに(high)釣り上げているのでプルアップ

グランドにつなぐものをグランドレベル(low)引き下げているのでプルダウンと言います。

tomozo

覚えやすいですね

 

なぜ必要なの?

新人エンジニアあん

電源を投入してからマイコンが立ち上がるまでは

ポートを制御することができないので状態は不確定です。

そんなときプルダウンを付けると電源投入時も安定させることができます。

 

下の図で電源を投入してから黒い点線でマイコンが立ち上がるとします。

プルダウンがない場合、0からマイコン起動までの区間は水色の出力ポートの

電圧は不安定な状態になります。(上図)

プルダウンがある場合、電源を入れてからマイコンが起動するまでの

不安定区間もハード的に0Vに安定させることができます。(下図)

万一、故障などでマイコンが立ち上がらなかったり、

組み込みソフトウェアに不具合があると

最悪の場合、外部デバイスを壊してしまったり、

組み込み機器が暴走する可能性があります。

そこで電源投入時の不安定な状態でも

安全に立ち上がるようにハードウェアで確定するのに役に立ちます。

 

中にはレジスタを設定することによって

内部回路でプルアップが有効にできるマイコンもありますよ。

 

未使用ポートの処理

マイコンにはたくさんの入出力ポートがあるので、

全部きれいに使い切るわけではありません。

未使用のままの入出力ポートの処理にも注意してください。

 

ポイント

  • 入力・出力どちらでもOK
  • 抵抗を使って外部でプルアップかプルダウンするのが好ましい

 

こちらのルネサス社サイト

未使用ポートの処理について記載されています。

tomozo

勉強になりますので余力のある方は読んでみてください

オープンドレイン/オープンコレクタ

普通の出力端子は下の回路のように

電源側とグランド側に一つずつスイッチングできる

FETがあり、HighまたはLowを出力します。

電源(Vdd)側がONならHigh、グランド側がONならLowとなります。

FETというのは電界効果トランジスタ(FET:Field Effect Transistor)

のことでゲートとソースの間に電圧を印可すると、ドレインとソース

完が通電状態になる素子です。

下右図のスイッチと抵抗で書いた図が等価回路となるので

スイッチのようなものと理解しておいてください。

 

 

オープンドレインとは電源側のFETをなくして

以下のような回路構成を持った出力端子のことです。

High状態にできるようにプルアップ抵抗がついているのが特徴です。

例えば出力にLEDをつなげれば点灯/消灯することができます。

 

オープンドレインのメリット

マイコンは3.3Vだけど、外部素子は5V駆動なんて時に

電源電圧の違う外部素子と接続できることです。

これをレベルシフタといいます。

以上のようにFETで構成される場合はオープンドレインといって、

トランジスタの場合はオープンコレクタといいます。

別物ですが、組み込みの初心者レベルではスイッチングできるもので

同じようなものという認識で問題ありません。

 

tomozo

ハード設計者の人がオープンドレイン(オープンコレクタ)という言葉を時々使いますので組み込みエンジニアも理解しておきましょう!

 

ヒステリシス

マイコンの入力ポートは下の図のように

  • ある電圧以上で1(high)
  • ある電圧以下で0(low)

というようにアナログな電圧を

デジタルデータの0/1で認識しています(青線)。

黒線が電圧の変化で0Vから時間とともに上がっていって

また0に下がっていく変化するとします。

この図の場合のしきい値(赤点線)は一つです。

 

これに対してノイズに強くするために、

  • しきい値1を境に0から1に変わる
  • しきい値2を境に1から0に変わる

2つしきい値を持っているものもあります。

下図のようにデジタルの0/1の変化は青線のようになります。

この2つのしきい値の差をヒステリシスと言って

入力電圧の変化に対してヒステリシスをもって

状態が変わるものをシュミットトリガといいます。

 

例えばルネサス社のRL78/G13の場合、

ハードウェアマニュアルを見る以下のようになります。

MIN MAX
ハイレベル 0.8×端子の入出力バッファ電源 端子の入出力バッファ電源
ローレベル 0 0.2×端子の入出力バッファ電源

 

ハードウェアが試作のときはHighが入力されているはずなのに

実際は電圧がしきい値まで足りておらずマイコンが

0と判断しているなんてことも時々あります。

変だなと感じたらオシロスコープで電圧を確認して

みるようにしましょう。

 

組み込み機器の入出力ポート実用例 3選

組み込み機器での入出力ポートの実例を紹介します。

 

入出力ポート使い方

  • 各端子(ポート)に対応したレジスタに入出力ポートの方向を設定する
  • 入力の場合はレジスタのデータをリードする
  • 出力の場合はレジスタにデータをライトする

これだけで使える場合がほとんどです。

 

組み込み機器でよく使われる使用例は以下の3つです。

  1. 外部デバイスからの入力
  2. 外部デバイスへの出力
  3. 通信用に利用

 

一つずつ説明していきます。

外部デバイスからの入力

マイコンの外部に接続したセンサなどの出力信号を

マイコンの入力ポートに接続してセンサのON/OFFの状態を

読み取ります。

外部デバイスへの出力

マイコンの外部に接続したモーターやLEDなどの外部デバイスと

マイコンの出力ポートを接続して外部デバイスをON/OFF

します。

 

ちなみにマイコンと直接接続できることもありますが、

ほとんどの場合ドライバやバッファなどの

駆動用素子がマイコンと外部デバイス間に入ることが多いです。

通信手段

上記2つが入出力ポート使用の大半なのですが、

この2つの応用というか考え方を変えた形として

外部機器との通信手段として利用することもあります。

 

通信はシリアル通信やCAN通信など通信専用の機能で行うことがほとんどです。

しかしCAN通信などの比較的高速な通信を利用したとしても

データの送受信や解析を含めるとμs単位の処理時間が必要です。

 

これ以上の高速性が必要で

BUSY/READYといった1/0で済む2値情報で通信可能な場合、

下図のように入出力ポートでやり取りすることがあります。

 

さらに信号を2本つなぐと2bitになり2×2で4パターンの情報になるので

少し使いやすくなります。

例えば以下のようにBUSY/READY以外に電源OFFとERROR

といった使い方ができます。

信号1 信号2 ステータス
0 0 電源OFF
0 1 READY
1 0 BUSY
1 1 ERROR

tomozo

単純なやりとりであればポートでするとシンプルなので検討してみてくださいね

 

入出力ポートを利用したプログラミングの実例を

こちらの記事で詳しく紹介しています。

よければ読んでみてください。

【組み込み基礎】RL78でLチカプログラミング【タイマ/割込/ポート】

 

入出力ポート制御で知っておきたいこと

入出力ポートを制御する上で組み込みエンジニアが

知っておいて欲しいことは以下の3点です。

  • 初期設定の重要性
  • 何度も初期化する必要はない
  • ノイズ対策でポートリフレッシュ

一つずつ解説します。

初期設定の重要性

ポートの初期設定は非常に重要です。

不安定な状態をできるだけ早く回避するために

マイコンが立ち上がってできるだけ早い段階で

機器の仕様・ハードウェアに合わせた初期化を行ってください。

 

また、未使用ポートであってもほったらかしにしないで

念のためリセット時はどうなっているのかそのままでいいのか

確認しておきましょう。

何度も初期化する必要はない

ポートの初期化・方向レジスタの設定は

基本的にマイコンが立ち上がったイニシャルの処理で

1回だけ行えば問題ありません

変更しないのに何度も書き換えたりするのは

無駄な処理なので不要です。

ノイズ対策でポートリフレッシュ

組み込み機器は外部からのノイズで誤動作したり、

ハードウェアがおかしくなったりすることが時々あります。

 

ノイズ対策としてポートリフレッシュという形で

入出力ポートの設定レジスタを上書きすることで改善

することがあります。

 

上で説明した何度もやるのは無駄という説明とは相反するものですが、

このようにやむなくせざるを得ないこともある

というのは頭の片隅に入れておいてください。

 

入出力ポートを使ったプログラムは以下のページで詳しく解説しています。

【組み込み基礎】RL78でLチカプログラミング【タイマ/割込/ポート】

 

まとめ

マイコンの入出力ポートとは

0/1のデータを端子から出力したり、端子に入力されたデータを読む機能

入出力ポート関連の知っておきたい専門用語

  • プルアップ・プルダウン
  • オープンドレイン
  • ヒステリシス

組み込み機器の入出力ポート実用例

  • 外部デバイスからの入力
  • 外部デバイスへの出力
  • 通信手段

入出力ポート制御で知っておきたいこと

  • 初期設定の重要性
  • 何度も初期化する必要はない
  • ノイズ対策でポートリフレッシュ

 

参考になったとか、もっとここが知りたいなど一言でも

コメント、意見などいただけると励みになります。

 

こちらの記事でマイコンの基本機能についてまとめています。

もしよければご覧ください。

マイコン基本機能5選【初心者組み込みエンジニア必見】

 

組み込み以外にこのサイトでは

学校や友人、一般の親は教えてくれない

資産運用の重要性についても紹介しています。

 

できるだけ早く自分の将来のために勉強しておかないと

もっと早く知っておけば良かったって後悔しますよ。

インデックス投資はおすすめ!厳選ファンド(商品)3つと利回り検証

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA