ARMマイコンに内蔵された周辺デバイスの使い方を学ぶ−GPIO 入力編−「mbed」で始めるARMマイコン開発入門(6)(2/2 ページ)

» 2015年03月02日 11時00分 公開
[今岡通博MONOist]
前のページへ 1|2       

入力モード設定

 先ほど示したプログラムの場合、+電源にdp1をつないだときだけ1で、それ以外の場合は0でしたが、実は入力ポートのインスタンスを生成する際に、どういう場合が1でどういう場合が0かを決めることができるのです。

 もう一度、DigitalIn Classの説明をご覧ください。入力ポートのインスタンスを作る際にピンの名前以外に入力モード(mode)を設定できます。あるいはメンバー関数modeで設定可能です。modeの設定はさらに下にスクロールすると表示され、入力モードは「PullUp」「PullDown」「PullNone」「OpenDrain」の4つがあります。

 ここでは、これらの4つのモードのうちOpenDrain以外を説明します。そもそも何で3つも4つも入力モードがあるかというと、この入力ポートに接続する相手側回路に合わせる必要があるからです。

  • Pulldown

 それではPullDownから見ていきましょう。先に示したプログラムでは入力ピンのインスタンスを生成する際にモードは設定しませんでしたので、入力モードはデフォルトに設定されました。デフォルト時にはPullDownになるようです。ではPullDownの内部回路(図4)を見てみましょう。

photo 図4 PullDown時の内部回路

 入力ポートに接続された抵抗が、マイコン内部でGNDにつながっていますね。ですから+電位が印加されない限り入力ポートの値は0となりますので、スイッチが閉じたときに1、スイッチが開いているときには0になります。ちなみにpull down(プルダウン)という呼び名ですが、これはGNDあるいは低い電圧側に引っ張っているという意味でこう呼んでいます。用途としては、手動操作するスイッチの入力などがあります。

  • PullUp

 次にPullUpを見ていきましょう。このモードを使うにはインスタンスを生成する際に、第二引数にPullUpと指定します。あるいはインスタンス生成後、メンバーのmode関数の引数で同様の指定をします。

 図5をご覧ください。PullUpの場合はマイコン内部で入力ポートは抵抗を介し+側の電位が印加されています。よって外部回路によってGND側に入力ピンを短絡させない限りこのピンの値は1となります。

photo 図5 PullUp時の内部回路

 それではスイッチ接続した場合ではどうでしょう。スイッチが閉じるとGNDに短絡するように接続します。すなわちスイッチを押した状態が0でそれ以外が1となります。スイッチの状態で見るとPullDownとは逆論理になっていますね。

 PullUp入力に押しボタンスイッチなどを接続する場合は、論理が逆になってしまいますのでプログラム側で適切な処理が必要です。またスイッチを接続する以外にも、前回の出力ポートの回で紹介したオープンドレインタイプの出力の受けとしても使われます。Pullup(プルアップ)の呼び名ですが、高い電圧側に引っ張っているという意味合いでこう呼んでいます。

  • PullNone

 PullNoneですが、これは入力ピンがどこにも接続されていないモードです(図6)。どこにもつながらない状態(オープン)時には、この入力ピンの値は不定(0か1か確定されない)となるので、手動スイッチなど一瞬でもどこにもつながらない状態がある外部回路の入力には適していません。CMOS回路およびTTL回路のように、必ず0か1の状態を取る出力回路の入力として使われます。抵抗がどちらにもつながっていないので、消費電力を多少なりとも節約できます。

photo 図6 Pullnone時の内部回路

入力電圧

 DigitalInクラスを使えば入力ピンの状態を0か1の値で読み出せることは分かりました。それでは実際に何が0で何が1なのでしょうか。それは電圧の高さによって決まります。それぞれ電圧のしきい値があって、それ以上が1でそれ以下が0となります。図7のような回路でしきい値を確かめることができます。

photo (図7)

 LPC111xシリーズのデータシートを見てみましょう。1(Hi)と判断する電圧のしきい値と、0(Low)と判断する電圧のしきい値が「HIGH-level input voltage 0.7VDD V」「LOW-level input voltage 0.3VDD V」と記述されています。

 1と判断される電圧のしきい値は、LPC1114の電源電圧の7割の電圧です。また0と判断される電圧のしきい値は電源電圧の3割ということになります。それでは電源電圧の3割以上7割未満の場合はどうでしょう。これは仕様上不定ということになります。

 不定といわれてもふに落ちない方もいると思いますので少し説明しておくと、入力電位が現在0の値をとる範囲(0.3VDD)にあって、それが上昇する局面(立ち上がり)では入力ピンの値が1になるしきい値は0.7VDDとなります。また逆に現在入力ピンの値が1であって、電位が下降する局面(立下り)では0になるしきい値は0.3VDDとなります。

 なぜこのように立ち上がりと立下りでそれぞれ別々のしきい値があるかというと、ノイズやしきい値付近で変化する入力信号によって値がバタつくのを抑える効果があります。このような動作を入力電位の変化に対して出力状態がヒステリシスを持つといいます。また、このようなヒステリシスを持ったデジタル入力回路のことをシュミットトリガ (Schmitt trigger)といいます。LPC1114は各ピンごとにヒステリシスの有無を設定できるような回路構成になっています。

 なおこれらのピンをデジタル入力として使用する場合は最大5Vまでの入力に耐えるように設計されています。これを5Vトレラントと呼びます。

おわりに

 今回はLPC1114のデジタル入力についてお話しました。デジタル入力といっても、入力されるのはアナログ的な電位の変化であって、それを一刀両断に0か1にしてマイコン内部に取り込んでいるのです。ですから入力ピンに接続するところまではアナログの知識がないと正しい値が取り込めないことも多々あります。

 アナログは少し苦手と思われている読者もいらっしゃるとは思いますが、本連載でも少しずつ触れていきますので、この機会に苦手意識を払拭して頂ければと思います。ということで次回はアナログ入力に挑戦します。しっかりとついてきてくださいね。お楽しみに。

(次の記事を読む)

前のページへ 1|2       

Copyright © ITmedia, Inc. All Rights Reserved.