PIC16F84電子遊戯(66)
最終更新日:2002年3月16日
サーミスター温度計 (1ページ)へ (2ページ) (3ページ)へ

サーミスター温度計の基本仕様
1)計測可能温度範囲は−20℃〜99℃とします。
2)計測精度は−20℃〜60℃までは±1℃、60℃から80℃までは±2℃、80℃以上は±3℃を目標とします。
3)精度のよくない温度範囲についての表示は2℃刻み又は3℃刻みとなります。
4)温度表示は0.5秒程度ごとに更新することとします。
5)温度表示は16ドットのマトリックスLED仕様とします。
サーミスター温度計のポート割付
ポート名 入出力 機能
RA0 OUT 74HC154駆動(A)
RA1 OUT 74HC154駆動(B)
RA2 OUT 74HC154駆動(C)
RA3 OUT 74HC154駆動(D)
RA4 OUT 74HC154制御
RB0 OUT シフトレジスタクロック
RB1 OUT シフトレジスタデータ
RB2 OUT LEDデータラッチ
RB3 OUT NC
RB4 OUT コンデンサ充放電制御
RB5 OUT NC
RB6 OUT NC
RB7 IN OPアンプ出力より
サーミスター温度計の時間計測
サーミスターの抵抗値の違いによるコンデンサ充電時間の計測の概略は次の通りです。
タイマー割り込みでインクリメントされるカウンタをクリアする
RB4ポートをHにする(コンデンサの放電)
時間待ち
RB4ポートをLにする(コンデンサの充電スタート)
タイマー割り込みを有効にする
RB7がLになるまで待つ
タイマー割り込みを禁止する
上記の処理により、タイマー割り込みでインクリメントされるカウンターの値が充電時間と比例関係を取ることが可能になります。
count タイマー割り込みでインクリメントされるカウンタ
ではタイマー割り込みの間隔をどれほどの時間に設定すれば適切なカウントが出来るのでしょうか。「count」を8bitカウンタに決めると255までのカウントが可能になります。
前回のシミュレーションから高温側に振ったときの計測時間は約12.9msecですからタイマー割り込みの時間を64usecに設定すると 12.9÷0.064=201 となり計測時間が長くても8bitカウンタで収まる計算になります。
最終的にはこのカウンタを値を温度のデータに変換して表示することになります。
サーミスター温度計のLED画面構成
ここでドットマトリックスLEDにどのように数字を配置するか考えましょう。
符号も含めて次のようにしてみました。
上図のように2〜4列目は符号表示、6〜10列目は10℃の桁の数字表示、12〜16列目は1℃の桁の数字表示とします。
1列目、5列目、11列目はスペースを取るために何も表示を行いません。
LED画面は次のようにRAMを割り付けて表示を行います。
LED表示はこのRAMのデータを表示しています。表示に変化があるときはこのRAMを書き換えているだけです。
左側から表示する部分のみ8ドットごとにRAMを割り付けています。
2列目の表示を例に動作を簡単に説明します。
2列目を指定するデータを74HC154に出力
シフトレジスタのストローブをHにする
line10のデータを出力
line11のデータを出力
シフトレジスタのストローブをLにしてデータラッチ
74HC154をアクティブにする(2列目LED点灯)
時間待ち
74HC154をノンアクティブにする(2列目LED消灯)
上記の社業を列と表示元のデータを変えながら全て表示します。
ソース自体は凝らずにベタ書きにしています。(すいません、手抜きです。)
16ドットマトリックスの表示については
PIC16F84電子遊戯(49)を参照お願いいたします。
サーミスター温度計の温度校正
ここまできたら一度ハードを組み立てて計測系の校正をします。
コンデンサの充電時間を利用して計測したカウント値をLED表示に直接表示するプログラムを用意しましたので、これを使用して校正データを収集しましょう。
コンデンサの充電時間を利用していますので、このコンデンサ(0.1uF)は温度誤差の少ないものを使用して下さい。私はマイラーコンデンサを使用しました。コンデンサに直列に入っている抵抗(200kΩ)も誤差の少ないものを使用しましょう。
サーミスターは外部に出すのでモノラルタイプのジャックで接続するようにしました。
校正用データ収集プログラムはこちらです。圧縮しています。展開するとHEXが生成されますので、そのままPICに書き込んでください。
上の表はエクセルで作成したものです。サーミスターの抵抗値からOPアンプに入る電圧を計算した値をもとにコンデンサの充電に掛かる時間を導きカウント値を出したものです。
表は温度範囲ごとに6ブロックに分かれています。本当はひとつの表でいいのですが、低温から高温まで全て同じ条件で計算するとどちらかの誤差が大きくなります。
そこで細かく分けて計算することによって全体的な誤差を少なくしようとしています。
次に標準抵抗を用意して下さい。上図で黄色に塗ってある抵抗を用意します。出来るだけ誤差の小さいものを用意して下さい。
その抵抗をサーミスターの替わりに接続してカウント値を読み取ります。そのカウント値がピンクで表示した部分です。
ここに書き込むデータは多分計算した値と少し違うはずです。6ブロックごとに充電のコンデンサと抵抗の値を変更出来るようにしていますので(表の上部のCR=**の部分です。)ここを徐々に変えながら標準抵抗で測定した値と同じになるように調整します。
CR=**の値を変えて行くとHEXの表示データがその都度計算されて変わっていくはずです。全体を通して標準抵抗での測定値と同じになるようにしましょう。
調整が終われば温度に対するHEXの値が決定されました。ここからは皆さんの力ずくの作業になるのですが、PICのソースを書き込む時に調整した値が反映されるように各自で修正してください。
校正用計算エクセルデータはこちらです。
かなりややこしくなってきましたが、今回はここまでとしましょう。
これからも益々面白くなる「PIC16F84電子遊戯」をよろしくお願いいたします。

不明点などあればメールお願いいたします。nonchansoft@nifty.com