「18LF2550のRC4、RC5はデジタルポートとして使用する場合は、他のPORTCのピットとは異なり、TRISCの設定がなく、インプットポートとしてのみ使用できる」とデーターシートに書いてありました。
PIC 18LF2550を使用するならば、ノキア5110LCDはこのままの配線では表示ができない事が判りました。
その後、ノキア5110LCDへの配線を18LF2550の別の空きポートへ移動してちゃんと表示ができる様になりましたが、どうしても湿度センサーとだけ通信ができません。
どうも、もっと根本的な制御部分の考え方を調べ直す必要が有る様です。
全てのキーワードはオープンドレインの様です。
PICのそのポートがオープンドレインであるかないかで、
制御のしかたを考え直さなければいけないのでした。
今回の様に、オープンドレインでないPICでも信号のやり取りはできるがその場合は、
PICがデータを出力をする場面なのか、
PICがデータを貰う場合なのかで、
PICの双方向ポートに利用している最終段の出力の
トリステート管理(ハイインピーダンス、”H”、”L”)
をうまく利用していないと駄目だという事です。
それが、エレキジャックさんの
(3)双方向のDATAポートのドライブについて
にちゃんと書いてありました。
オープンドレインではないポートを双方向ポートとして利用するには、
そのポートを出力として”L”レベルにしておいたままで、
TRISコントロールと、プルアップ抵抗をうまく使って、
送信(出力)、受信(入力)を行うのです。
オープンドレインではないポートをTRISコントロールで”インプット”に設定すると、
PIC内部のポート部分に仕込まれた回路で、
そのポートが「ハイインピーダンス状態」になるようになるように設計されています。
そのポートが出力として”H”であっても、”L”であっても、
そのポートが「ハイインピーダンス状態」の時は、
このポートの出力先のラインが抵抗でプルアップされていれば、
相手から観れば常に"H"レベルになっているわけです。
これをPICからデータを貰う側から観た時の”H”信号として使うわけです。
それで、このPICのポートで相手からの信号を読み込む時は、
そのポートが「ハイインピーダンス状態」のままでデータをPICに読めば、
”H”はHighレベルになり、
”L”は抵抗でプルアップされていても電流が抵抗でのみ軽く消費されるだけで済み、
SW等の入力と同様にLowレベルとして読めるのです。
もちろんこれがプルアップ抵抗の本来の役割ですから。
このPICのポートを使ってPICからの出力として”L”を相手に送りたい時のみ、
このポートをTRISコントロールで出力ポートに設定すれば、
始めから出力として”L”設定してあった”L”レベルになる。
こうする事によって、
オープンドレイン仕様ではないポートでも、
出力のショートを起こさないで、
ちゃんと双方向にデーターを送受信できるというわけです。
(なお、24FJ64GA002は、デジタル出力は、オープンドレイン構成が可能です。)
ソフトを変更して、もう一度18LF2550に挑戦してみます。
プログラム容量がフラッシュラム32Kバイト(# Single-Word Instructionsで16K)と大きく16F886の2倍もありあます。
SRAMデータメモリーも2048バイト、EEPROMも256バイトあります。EEPROMは24FJ64GA002に実装されていません。
18LF2550のピン配列も16F886と殆ど互換性があるので、
このままの実験ボードが使えますから、
どうしても利用したいのです。
その後で 24FJ64GA002への挑戦をします。
例によって、いつになる事やら。(Aug. the 7th 2010) |