LCDのコントラスト調整について2
再度左図のようにしておき、3pinの電圧と電流を測定してみた。
電圧(V) | 電流(mA) |
0.213 | 0.169 |
0.397 | 0.162 |
0.713 | 0.15 |
0.927 | 0.142 |
1.09 | 0.136 |
この結果から内部等価回路は
このように推定できる。
ネットであれこれ検索していると、ELMさんのサイトに答えがあった。
私なりに書き直してみました。
5つの抵抗の合計値が28KΩだったわけだ。
これがわかれば右図のように半固定抵抗で分圧した電圧を3pinに加える必要はなく、左図のようにしても問題ないはずだ。
ただし、どのLCDモジュールでもこの手が使えるかどうかはわからないが、HD44780を使ってるならたぶんOKだろう。
この方法で湿度・温度計のCPUスリープ時の消費電流は0.64mAにまで減少した。
LCDのコントラスト調整
SHT-71を使った湿度・温度計3
CY3210-PSoCEVAL1ではMAX232が基板上にハンダ付けされており外せないので正確な消費電流が測れないからです。
いくつか部品が乗ってますが、以前実験したときのもので、電源ラインは外してあります。
SHT-71はこの写真のように足を前後に曲げて基板に載せました。
プログラムを書き換えました、Sleep Timerを使います。
タイマは1秒に設定し、温度と湿度を交互に測定します。
それぞれ12ビットモードにしてあります。
消費電流ですが、1秒中約80mSの間に8mAほど流れ、あとは約1.4mA程度でした。
平均すれば約2mAぐらいでしょうか。
LCDをストロベリーリナックスさんのI2C低電圧キャラクタ液晶モジュールに変えれば1mA以下になることが期待できます。
SHT-71を使った湿度・温度計2
単位が出るように表示ルーチンをいじりました。
百均で買った温度計と並べてみました。
PSoCのユーザーモジュールLEDをDATAportに使っていましたが、やめました。
プロジェクトを開くたびにDriveがStrongになるのが面倒なのと、Shadow Registerを試したかったからです。
SCKportは今まで通りLEDユーザーモジュールを使います。
測定時間について:
データシートから引用します。
デフォルトで温度は14ビット、湿度は12ビットで測定されます。上記に引用した注意点を守るとするならば温度は3秒、湿度は1秒測定にかかることになります。測定に要する時間は8/12/14 ビット測定に対応して最大でそれぞれ20/80/320 ms です。この時間は内部発振器の速度によって変化し、30% 程度まで短い値を示すことがあります。
・・・中略・・・
重要:自己加熱を0.1℃ 未満に抑えるため、SHT7xを使用する全時間帯の中で実際にデバイスが動作する時間が10% を超えないようにしてください。たとえば、12 ビット精度の測定ならば最高でも毎秒1回の測定としてください。
再度データシートから引用します。
私の場合、温度湿度共に12ビットで測定するようにしました、変更はステータスレジスタへの書き込みで行えます。測定分解能:特に何も指定しなければ温度は14 ビット、湿度は12 ビット精度で測定されますが、それぞれの分解能を12 および8 ビットへ下げることも可能です。特に高速測定が必要な場合や、消費電力を抑える必要がある場合は分解能を下げることが有効です
このようにソフトで分解能を変えることが出来るので、スイッチを付けて普段は低分解能で測定しておき、必要になったら高分解能に切り替えるなんて事が出来ます。(まだやってませんけど)
SHT-71を使った湿度・温度計
ストロベリーリナックスでお買い物・温度湿度センサSHT-71
SHT-11にリード線がついたものです。デジタルでデータが読み取れるので便利なのですが、
SHT-11の説明ページには
■I2Cバスでマイコンに簡単に接続できます。I2Cバスがあるマイコンならより簡単!
と書いてあるのですが、I2Cとコンパチでありません。
説明ページで引用してあるデータシートにも
The serial interface of the SHTxx is optimized for sensor readout and power consumption and is not compatible with I2C interfaces
と書いてあるんですが・・・・。
幸いにもエレキジャックの2線式 温・湿度センサSHT11 アーカイブを見つけ制御の方法がわかりましたので、PSoCで試してみました。
CY-3210-PSoCEVAL1のブレッドボードに差し込みますが、リード間隔が1.27mmなので1本おきに曲げて差し込み、曲げたピンにはケーブルを半田付けしました。
プログラムは先のエレキジャックの記事が大変参考になりました、というかほとんどパクリです(汗
とりあえず、何とか表示にこぎつけました。
下は温度を表示しているのですtが、printfの桁制御が出来ないようなので、上の湿度表示では自前のルーチンで表示しています。
さらに手を入れて何とかましな表示になりました。
でも温度がどうにも高めにでます。
センシリオン株式会社からのデータシートによると
重要:自己加熱を0.1℃ 未満に抑えるため、SHT7xを使用する全時間帯の中で実際にデバイスが動作する時間が10% を超えないようにしてください。たとえば、12 ビット精度の測定ならば最高でも毎秒1回の測定としてください。
とあります、今回は間隔を置かずに連続で測定していたので自己加熱によって温度か高めに出たと思います。
もうちょっといじってみます。
熱電対温度計・リニアライズ2
例によって熱電対の起電力表を参照している。
0℃から-100℃までのデータをエクセルに打ち込み、二次の近似式を当てはめてみた。
起電力をV(mV)、温度をT(℃)とするとき、
T=-0.945V^2+24.698V
と近似できる。
これを元にプログラムし、台所の冷凍庫の温度を測ってみた。
-23℃、こんなもんでしょうか、家庭用冷蔵庫の冷凍庫は。
7セグメントLCDを2線だけで制御する
この記事の元ネタはEDN japanの記事なのだけどLCDの反応の遅さを利用して出力にラッチのないHC164でうまく処理している。
実は手持ちに7セグメントのLCDを持っているので、早速に試してみようかと思っている。
これをPSoCで制御したいわけだ。
ポートを2つ用意する、データ用とクロック用だ。これをソフトでオンオフしてやればいいわけだが、PSoCなんだからユーザーモジュールで何とかならないかと調べたら、SPIMがまさにどんぴしゃで使える。
このSPIM中身はシフトレジスタにコントロール回路があって、クロックを自動で出してくれるし、LSBから送るかMSBから送るかの選択も出来る等便利なのだ。
APIで送信可能かチェックして、OKなら送信データをAPIに渡せばいい。