初心者が必ず落ちる 代表的な罠の一つです。
下の回路図を見てみましょう
この回路において、RA0, RA1, RA2, RA3, RA4をそれぞれ"1"とすると、当然全てのLEDが点灯すると思います。
誰だってそう思います。僕もそう思います。
しかし、現実は無情。LED4だけが点灯しません・・・
それはなぜか??
実はPIC16Fシリーズにおいて、Microchipは我々をハメるため、
RA4だけをオープンドレイン出力にしているのです。
オープンドレイン出力とはなんでしょう?
下の回路図で説明します。
左の図は普通のI/Oピン。
マイコンはRA0に接続されたスイッチを制御します。
スイッチが"1"だとRA0ピン電圧は5Vになり、スイッチが"0"だとRA0ピンの電圧は0Vになります。
これが当たり前ですよね。
右の図がオープンドレイン出力のI/Oピン。
マイコンはRA4に接続されたスイッチを制御します。
このスイッチはRA4ピンをGNDに接続するか否かを設定するだけで、RA4ピンそれ自身は電圧を出力しません。
なので、スイッチを"1"にしようが"0"にしようが、RA4ピンの電圧は0Vです。
ではどうすればいいのでしょう?
答えは、LED点灯を"負論理"にすることです。
下の図を見てください。
このようにすれば、通常のI/Oピンも、オープンドレイン出力のI/Oピンも全く同じ回路で、
共にスイッチが"0"の時にLEDが点灯し、スイッチが"1"の時にLEDが消灯します。
正論理でも下の図のようにすればいいのではないか?という意見もあると思います。
たしかにこれで正論理が成立します。
しかし、この回路にはPIC特有の重大な罠があります・・・
実はこれこそが、Microchipの仕組んだ
真の罠 なのです!
(I/Oピン書き換えの罠に続く)