mbed LPC824はinputがデフォルトでプルアップされている。プルアップ抵抗を追加しなくていいから便利なのだが問題がある。
mbed APIにおけるDigitalInクラスでは、コンストラクタで、
DigitalIn sensor( P0_6, PullNone );
のようにピンモードを指定できるし、mode()メソッドを使って、
sensor.mode( PullNone );
ともできる。
ちなみに、指定できるモードは以下の通り。
PullUp, PullDown, PullNone, OpenDrain
このようにDigitalInでは何の問題もないのだが、アナログ入力が問題だ。
AnalogInクラスにはこのピンモードを設定するメソッドがない!! なぜだ。。。。
mbedのサイトを見ると、
Warning
一部のCPUのmbedライブラリについて、アナログ入力ピンの内蔵プルアップ/プルダウンがONになっているものがあります。(意図してか、意図せずか不明)
この場合、ドライブ能力の低い電圧源や、抵抗器を介したアナログ入力の値がおかしくなります。ピンモードを設定しているレジスタを直接アクセスして、プルアップ/プルダウンをOFFにしてください。
https://os.mbed.com/users/okini3939/notebook/AnalogIn_jp/
と書かれている。なんとも面倒な。レジスタを触るのか。
しかしレジスタを触らなくてもうまいことハックできちゃった。
つまり、いったんDigitalInで目的のピンをPullNoneで設定しておいて、再度同じピンでAnalogInを生成する。するとPullNoneなAnalogInが出来上がる。
DigitalIn dummy( P0_6, PullNone );
AnalogIn sensor( P0_6 );
これで動いたさ。
最近のコメント