[ミニLCDのコントロール]の続き、温度センサーの追加です。
8:遊んでいるセンサーを付ける。
9:調整が大事
10:アラーム
11:今回の各DATA
8: 遊んでいるセンサーを付ける。
エレキジャック付属センサーがそのままになっていたので「使わないともったいない」という事でまだ「ROMに余裕があるので動かせるだろう」と思い出して来ました。
色々と試しながら作動し始めましたので、ここにレポートしておきます。I2C式のLCDを使ったのでほぼ同じコマンドで作動します。資料によりますと2.7Vから5.5Vとなっているので乾電池2本では少し厳しいかもしれないと、少し不安を持っていました。
コマンドはアドレスが異なる程度で、かなり共用出来ますが汎用化するとメモリーを食うので専用として分けました。LCDの関係でI2Cの端子ですが、少しインピーダンスを高くしたので動くか心配しましたが、今の所問題なく作動しています。
考え方
1.温度]に付いては14bitで0.03125℃まで分解出来ますが、あまり細かくしても精度が+-1.5℃とあったので補正など面倒なので、動作は11bitで変換スピード14mSec(Max)を使う事にしました。
これでも、0.25℃までの精度があります。
2.表示]0.5℃単位の表示としそれ以下は使わない事にしました。
3.動作電圧]2.7-5.5Vとありますが、普通10%程度のマージンがありますので「たぶん動くだろう」という安易な判断で進めました。
4.アラート]温度比較の注意表示用に使えますが、今回は使わない事にしました。
5.温度範囲]-20〜150℃とありますが、室温の0〜50℃程度としました。マイナス表示は略しました。
LM73CIMK-1ですがカタログを見ると、同じものでLM73CIMK-0があります。これは単に作動アドレスが異なるだけです。新規購入は価格が安い方で良いと思います。
ハード
基本的にI2Cですから2本の線、電源を含めて4本の接続線で作動するはずです。
ソケットとして8ピンのICソケットを使いました。4本以外は遊びです、ALERT・ADDRを使わないのですがICピンに出ているので6ピンを接続しています(図はICと同じピン配置になっています)。
DATA1 Sign 128 64 32 16 8 4 2 DATA2 1 0.5 0.25 0 0 0 0 0
ソフト
室温表示ですから、常時測定の必要はなくONE SHOT式にして節電をしています。
10秒おきに測定し、表示をさせていますがこれで十分実用になります。温度は急に変化しません。手 順
1.毎9秒に測定(ONE SHOTの設定、11bitなので14mSec必要)。
2.10秒の桁上げ時にDATAを読み出す。
3.DATAを10進数に変換する。
4.作ったDATAをLCDに転送する(表示)。結 果
1:通常のPIC12F629+LCDで0.56mA、+LM73で0.83mAになりました。(2.6Vの電池:NI-MH)
2:LM73をONE SHOTにすると全体で約0.66mAです(0.65-0.67mAまで振れる)。
9: 調整が大事
A: LCDのコントラスト
このI2CタイプのLCDは、Soft設定でコントラストが設定出来ます。ハード的には出来ませんので必要なら一度ハードをA/D変換などDATAにしてコントロールする必要があります。
使う電圧によって変わるので、電池使用の場合電圧が減るので注意が必要です(電圧が下がると薄くなる)。B. Timer
クロック調整をしないと誤差が大きくなります。「実測して1/500ぐらいになれば良い」でしよう。1時間動作させ、誤差を算出して1秒(1000)の待ち時間を修正して合わせます。
ループに色々なプログラムが入っているので変更するたびに多少変化します。
でも温度や電源電圧により変化するので合わせこんでも意味がありません(後で変わる)。
細かく合わせたい場合、水晶を使うなどして自己発振を止める必要があります。C. LM73
温度センサICは多少のバラツキがある様で1℃前後の誤差があり、本来は修正する必要があります。今回の物は面倒なので再調整はしませんでした。D. 電圧を下げる
電池で動かしているので電圧が2.4V以下になる事があります。この時の状態を調べてみました。
その結果、PIC12F629とLM73は適当に作動しています。
2.4Vの時14.0℃、2.1Vで13.5℃、2.0Vで12.5℃と表示され、再び電圧を戻すと又元の14.0℃まで戻りました。2.4V以下で不安定になっています。PICは良いとして、温度センサは表示が急に下がってしまうようです。0.1Vまで表示する場合この辺は要注意です。写真の様に「アルコールの温度計とほぼ同じ(16.5℃)になっていた」ので補正はしませんでした。以前アナログセンサを使った時、1℃狂っていてこれは使えないと思った事がありました(今考えれば、補正すればよかった!)。
10:アラーム
当初「パソコンに夢中になり、時間を忘れ深夜になるのを避ける」為に作りました。これでも初期の目的は達成出来ましたが、Romエリアに少しスペースがあったので音をアラームとして出す事にしました。
30分置きに出すことにしました。3KHzの音を0.3秒とし全体の幅を2秒にし、音は手持ちの圧電ブザーにしました。箱に入れないと音は小さく、現在はプラケースに入れています。Soft
3KHzのON-OFFで休みを含め0.33秒とし6回ならし、カウント処理として2秒を加算しています(見ているとこの時間表示はStopして急に2秒加算されて続けます)。
これによって時間は狂いません。
11: 今回の各DATA
A: サブルーチンなど コマンド 説 明 Interrupt() 割り込み処理、SW入力で動作。Startと再Startの動作 Lcd_Comd() LCDにコマンドを送る。 Lcd_Data() LCDにDATAを送る。 Lcd_I2C_Set() LCDの初期設定 Lcd_Pos() LCDに文字列を送る。 CustomChar() LCDに特殊キャラクタを作りRamに保存する。 LM73_Set() 温度センサにコマンドを送る。 LM73_read() 温度センサから温度DATAを読み出し、LCDに転送する。 Sound_Pee() 30分ごとに音を出して知らせる。音は3KHzの点滅 Main() 初期設定とタイマ・SWが押されたらSleep、そして再度押されるとスタートする。
タイマーは時・分・秒を表示し秒は[●]をその都度表し動いているのを知らせる
温度は10秒に1回の測定表示。
B: LM73 ピン 説 明 ピン 説 明 1 Address 6 SMBDAT(SDA) 2 GND 5 Not_ALERT 3 VDD 4 SMBCLK(SCL)
C: PIC12F629 ピン 説 明 ピン 説 明 1 VDD 8 GND 2 SDA 7 UN_USE 3 SCL 6 Sound 4 SW 5 to_Power LCD
情報
LM73はWebで調べると販売先が見つかりました。
IC自身が小さいので取り付けが面倒ですが、0.9mmぐらいのピッチなので手作業でも何とか対応出来そうです。
本にはTMP102が出てましたが、これのピッチは0.5mmぐらいで手作業では厳しいです、使う気にはなれません。
現在
Romスペースの関係でアイコン表示は使っていない(消している)。各部を整理して現在は[900/1024程度]消費している。余裕は10%ほどです、少し無いと修正が出来ません。[プログラム]はこれでROM 912使っています。「LCDが小さいので見難い」が本音です。もう少し大きいといいなー、文字数を半分にしても文字が大きい方が見やすく実用的かと思いますけど…。
2010/12/30 作成