湿度センサーを 18LF2550で使うには?その2


18LF2550用に開発して動作確認後に、16F886へ流用していたのですが、今度は湿度センサーからの完了信号が読み込めなくなってしまいました。

後でこれが、実は18LF2550で動いている様に見えても、それは「動いてしまった!」のであって、本当は無理をして動作していた事が分かりました。

PIC のデジタルI/Oポートは、入力ビットの確認を行う際に、入力先の状態を読み込み、その出力のラッチ(ポート内の記憶レジスタ)も書き換えてしまう可能性があるのです。

1つのポートグループ内のたった1ビットでも読み込もうとすれば、PICはポートグループの全ビットの入力先の状態を読み込んでから、指定のビットの情報だけ使って動作します。

つまり、1ビット分の読み込み命令でも、そのポートグループの全ビットのラッチが個々のビットのポートの先の状態によって書き変わってしまうという事なのです。そういう、ハードウエア構造だから致し方ないのです。

「その入出力が混在するポートを利用する、全ての装置のインターフェースに対して、一元管理されたポートバッファリングを行う様にプログラミングしておかなくてはいけない!」という事なのです。

RB0に繋がった気圧センサーからの完了信号を読み込んで使用してから、その後に、湿度センサーの出番となる為に、SHTヘのDATA出力用ビットのラッチが書き変わってしまうので、デジタルオシロで観察すると、出力が"H"のままになったままです。

初期に設定しておいた"L"状態が確保できなくなり、非オープンでレイン用の双方向通信が成り立たなくなってしまっていたのです。

ソフトウエア上で、このSHT-11との通信ルーチンをコメントアウトしてしまうと、他の部分は正常に動くばかりか、消費電流も55mAも流れていたのが、たったの4mA程に戻りました。内部で信号のショートがおきているのはもはや明白です。

それでは、なぜ18LF2550は稼働できるのでしょうか?

今回の18LF2550の動作クロックは、安定した動作を確保する為に、内部のUSB用の逓倍発振装置を使って外部の8MHzのクロックを16F886の倍の16MHzにして使っているので、ショートの時間も短く、上手く動作してしまっているのではないだろうかと思います。たまたま稼働しているのですね。

結局どうしらたいいものかとパレットソフトさんに泣きついてしまいました。
本当にいつも私は、パレットソフトさんにお世話になってばかりです。

devide.c の所で、ポートグループを一元管理すればいい事を教わっていたのですが、理屈は分かっていても、いざどうすれば良いのかといわれると、自分ではどうする事も出来なかったのが事実なのでした。はい。

以上の観点から修正された、PIC 16F886、PIC 18LF2550 のハードウエア共通版のプロジェクトファイルを下記リンクからダウンロードして下さい。

回路図は前回の「湿度センサーを18LF2550で使うには? その1」のものと変わり有りません。

16886prrh15.zip

※ご注意 本プロジェクトは HI-TECH C for the PIC10/12/16 v9.81 以前のバージョンにて作成されています。 HI-TECH C for the PIC10/12/16 v9.81 以降のバージョンでそのままコンパイルすると、コンパイルエラーが発生いたします。これを解消するには、下記をご参照下さい。

HI-TECH C for the PIC10/12/16 v9.81リリースとその注意点!
http://ohta.no-ip.com/Pages/templan/index60.html
(Mar. the 1st 2011)
182550prrf15A.zip(Dec. the 3rd. 2012)

どちらも、PIC自身の相違点である特定のパラメーターや、内部のシステムクロック周波数等 device.c の一部分を除く全てのファイルが共通です。

動作電流は16F886で4mA以下、18LF2550で10mA以下で正常に動作している事を確認いたしました。

なお、このPIC18LF2550用ソースプログラムは、
Windows XP Pro v2002 SP3上で、
現時点において最新で無償の、
MPLAB IDE v8.88 の統合環境の元で、
HI-TECH C Pro PIC18MCU (Liteモード) v9.80用に変更し、 一部を修正して、コンパイルして、
MPLAB IDE v8.88 の統合環境から直接USB接続の秋月電子通商のPICkit2もどきのゼロプレッシャーソケットからPIC18LF2550へ書込みました。(Dec. the 3rd. 2012)

(注意)これ以前のバージョンでコンパイルを行うと、スタックオーバーフローのワーニングが出たりしますので、上記バージョンにてコンパイルして下さい。

気圧センサー部分を含むプログラムの大部分を、パレットソフトさんのプログラムを利用し、私が変更に、変更を加えて使用しています。

ノキア5110表示用のライブラリー部分は、
CQ出版の「トランジスタ技術2006年3月号」に掲載された、
R8C/15付録マイコン基板活用企画 
第9回 小型グラフィック液晶表示器で作る簡易温度計 山本 秀樹氏 のR8C/15用ソフトウエアをHI-TECH C Compiler用に移植して使用しています。

湿度センサーSHT-11とのインターフェース部分は、今回はエレキジャックさんのソースを利用しております。

I/Oは非オープンドレイン対応でPICの双方向I/O通信を行い、関連ポートグループのデジタルI/O操作は、ファイル device.c 上で一元管理されたポートバッファ方式関数で全て行っています。

パレットソフトの小林さんの、親切で丁寧な御指導に改めて感謝いたします。
(Aug. the 21th 2010)


注意事項
General disclaimer
トッ プページへ

なお、当ホームページで公開しているデーター(写真、音声)等を個人の枠を超えて複製・転用する事はご遠慮下さいませ。
ご意見/苦情/ご感想はこちらまで