画像をクリックすると拡大表示されます。
拡大画像からはブラウザの「←戻る」ボタンで戻ってください。
前回、4CH温度記録計をUPしましたが、内容に不満があったので作り直しました。
ハードウエア、ファームウエア、ウインドウズアプリケーションは作り直しましたがケースは流用したので
装置の外観は同じです。
主な変更点は計測時の消費電流を1/3程度に減らしたことです。
計測数は800点/CHと少し増えましたが、さらにインターバルを変える事により1週間以上の連続記録が出来るように
なりました。
最長のインターバル15分ですが、温室内の温度記録としては十分だと思います。
計測数を固定にしたのはデータの後処理を簡単にするためです。
その他、基本的な事は前作と同じです。
CH数 | 4CH |
---|---|
温度センサー | 103ATサーミスタ |
表示温度範囲 | −5℃〜45℃(0.1℃ステップ) |
インターバル | 2分、3分、4分、5分、6分、10分、12分、15分 |
計測時間 | 26.7時間 〜 8.3日 |
計測件数 | 800件/CH |
PCとの接続 | RS232C 19.2Kbps |
メニュー項目 | ヒョウジ、ケイソク、ヨミダシ、ソウシンH、ソウシンD、ショウキョ、ジカンセット、カレンダー、 インターバル、カイシジカン |
電源 | 単三電池2本(アルカリ、ニッケル水素) |
消費電流 | 電池電圧2.4Vの時、メニュー選択時8mA、温度表示中16mA、記録中平均2.4mA、 送信中25〜30mA |
表示温度範囲ですが、サーミスタを−5℃〜45℃の50℃のスパンでリニアライズしていますので、この範囲外では精度が
急激に悪化します。
従って−5℃以下を−5℃、45℃以上を45℃と表示しています。
メニュー項目ですが、ヒョウジ〜ショウキョまでは前回と同じです。
ジカンセットは時計の時間合わせで、年、月、日、曜日、時間、分を入力します。
カレンダーは現在時間(年、月、日、曜日、時間、分、秒)を表示します。
インターバルは記録の間隔を設定します。
上記の2分〜15分の中から選択します。
このインターバルは設定値としてPIC内部のEEPROMに配列のインデックスが記憶されます。
記録時のインターバルは外付けの24LC256に数値として記録され、PCに送信されます。
カイシジカンは記録開始のタイミングを選択します。
直ちに開始するか、0時0分に開始するかを選択します。
回路図をクリックすると拡大表示されます。
拡大図から本文に戻るにはブラウザの←戻る釦を使用してください。
前作との大きな違いはリアルタイムクロック(RTC)ユニットを使用したことです。
今回はインターバルを切り換えるのですが、RTCのレジスタ1つに設定値をセットするだけで済みます。
計測を午前0時に開始することも出来るようになりました。
毎回の計測タイミングをRTCの割り込みで開始する事が出来ます。
それによりPICは短時間の計測以外はスリープする事が出来、消費電流が大幅に減りました。
リファレンス電圧とRS232Cドライバは不要な時に電源を切るようにしています。
スリープ時の消費電流の殆どは液晶表示器のもので1mA以下ですが電池電圧を昇圧している関係で2倍〜3倍になります。
実際には電池電圧3Vの時1.8mA程度、電池電圧2.4Vの時2.4mAでしたので連続で使用しても1ヶ月以上は
電池が保つのではないかと思います。
プログラムはC18コンパイラを使用しています。
評価版のためメモリの使用量が多くなっています。
最初、メモリオーバーでリンク出来ませんでしたが最適化により何とかリンク出来ました。
評価版でも多少は最適化が出来るようです。
ディレー関数以外のライブラリー関数は使っていません。
ディレー関数も引数が255までしかとれず、サイクルタイムの整数倍という記述になるので使いづらい為、delay_ms(int)の
形に組み直しています。
adconv.c
A/D 変換に関する関数です。
C18のライブラリーは使用していません。
cnf2420.c
PIC18F2420 のコンフィギュレーションが書かれています。
記述内容と設定方法はMPLABのヘルプファイルの Topics > C18 config setting に記述されています。
i2func.c
I2Cの基本関数です。
C18のライブラリーは使用していません。
PICのハードウエアを使用しています。
メインクロックの周波数が低いのでボーレートは100KHzに設定しています。
バスの衝突検出やエラー処理はしていません。
interrupt.c
割り込み関数です。
処理内容は以下...
・ タイマー0割り込み(入力SWのチャッタ取り)
・ CCP1割り込み(ソフトウエアタイマーの基準クロック1mS)
・ RS232C受信割り込み
・ INT0割り込み(RTCよりの計測開始信号)
・ MSSP割り込み(I2C)
尚、MSSP割り込みでは割り込みフラグのコピーをセットし、割り込みフラグ自体は即クリアしています。
lcdlib4s.c
キャラクタ液晶のライブラリーです。
main.c
メインルーチンです。
measure.c
表示、計測、消去、読み出し、EEPROM の読み書きが書かれています。
serial.c
PCとの通信処理です。
自作PC側ソフト用とターミナルソフト(エクセル)用、2種類の形式があります。
C18のRS232Cライブラリーは使用していません。
timer.c
ソフトウエアタイマーです。
ディレーと違い、スタート後、他の処理が出来ます。
タイムアップはポーリングでチェックします。
clock.c
今回、追加したRTC関係の関数が記述されています。
eeprom.c
PIC内部のEEPROMの読み書き関数で、これも今回追加されたものです。
global.h
ファイル数が増える為、ヘッダ ファイルを一つに纏めています。
その他、組み込みのリンカースクリプトを追加する必要があります。
ファームウエアのダウンロード (ZIP圧縮されています。)
プロジェクトファイルは削除して新規にプロジェクトを作る方が良いと思います。
まだ、細かいバグが取り切れていない可能性があります。
4CH温度記録計 | 内部 |
ケースは前回のものを流用しました。
電源を入れると作業選択画面が表示されます。
最初は「ヒョウジ」が選択されていますが、DOWN釦とUP釦で項目を移動し、ENT釦の長押しで実行します。
項目は「ヒョウジ」、「ケイソク」、「ヨミダシ」、「ソウシンH」、「ソウシンD」、「ショウキョ」、「ジカンセット」
「カレンダー」、「インターバル」、「カイシジカン」の10個です。
「ヒョウジ」を実行すると現在の温度を繰り返し表示しますが、1分経過すると項目選択画面に戻ります。
1分以内に打ち切りたい時はMODE釦を押せば項目選択画面に戻ります。
画面左上の「15」は現在の時刻15時、左下の「39」は分を示します。
16文字2桁の表示器では表示情報が不足します。
温度記録を実行する前にインターバルと開始時間の設定をする必要があります。
「インターバル」を実行すると現在の設定値が表示されるのでDOWN又はUPボタンで数値を変更し、ENTボタンで
書き込みます。
MODEボタンを押すと書き込まないでメニューに戻ります。
書き込んだ値はPICのEEPROMに書き込まれるので電源が落ちても消えません。
「カイシジカン」を実行すると計測開始方法が選択されます。
直ちに開始する(START NOW)か午前0時にスタートする(START0:00)かを選択します。
これもEEPROMに書き込まれます。
温度データを24LC256に記録します。
実行すると最初に記録条件の確認画面が出るのでOKならもう一度ENTボタンを押します。
上の写真は計測が午前0時に開始され、インターバルが2分であることを示しています。
こちらは直ちに計測を開始し、インターバルが15分であることを示します。
条件を変えたい場合、一旦、MODEボタンで抜け、設定を変更してから再度実行します。
記録が開始されると電源スイッチを切る以外、停止する方法はありません。
午前0時に記録を開始する場合、開始までは下の画面が表示されます。
計測値はインターバル毎に更新されますが24LC256には書き込まれません。
計測がスタートすると計測回数が表示され24LC256にデータが書き込まれます。
左端のWは書き込みを表し、スペースの関係で計測回数を2行にわたって表示します。
前作では計測回数を点滅させたのですが、今回はCPUがスリープしている関係で省きました。
「ヨミダシ」では記録した内容を読み出す事が出来ます。
実行すると最初に、計測開始日とインターバルを5秒間表示します。
その後、計測データの表示画面に移ります。
上の写真でRは読み出しを表し、271件目の値が表示されています。
件数位置はUP釦、DOWN釦で移動します。
押し続けるとスキャンスピードが上がり、800件を64秒でスキャンします。
MODE釦で項目選択画面に戻ります。
「ショウキョ」は計測した内容を消去するものです。
一応、確認画面が出るので、もう一度ENTボタンを押すと消去が実行されます。
他のボタンを押すと何もしないで項目選択画面に戻ります。
消去と言っても全データに0.0℃を書き込むだけです。
計測値は上書きされるので消去の必要は無いですが、読み出し、書き込みのデバッグには必要です。
「ソウシンH」は記録したデータを読み出し、RS232CでPCに送信します。
ここではPC側の自作プログラムにデータを送ります。
記録計とPCをRS232Cケーブルで接続し、「ソウシンH」を実行すると
PCからのコマンドを待ちます。
ウインドウズ自作プログラムを起動し、ファイルメニューのデータ受信をクリックするとデータを送り返します。
フォーマットは1バイトの温度データをヘキサ文字3文字で連続して800件×4CH分送り、次に計測開始日時とインターバル
を送信し、最後に”¥r¥n”を送ります。
受け取ったPC側ではデータを取り出して数値に変換し、配列に格納します。
「ソウシンD」もPCに計測値を送りますが、こちらは10進文字列で送ります。
ターミナルソフトでデータを受信します。
フォーマットは計測件数(位置)、CH1〜4の温度データ、”¥r¥n”で、各項目はスペース(0x20)で区切ります。
その後、計測開始日時とインターバルを送ります。
まず、RS232ケーブルで記録計とPCを接続します。
ターミナルソフトを立ち上げ、ボーレートを19.2Kにしておきます。
記録計で「ソウシンD」を実行し、PCからのコマンド待ち状態にします。
ターミナルソフトからコマンド”THL21”を送ると記録計がデータを送り返します。
「ソウシンH」と内容は同じですがフォーマットが異なります。
ターミナル側でテキストファイルとして保存し、エクセルで読みとれば簡単にグラフにすることが出来ます。
RTCを実装したので時間合わせの機能が必要になりました。
実行すると年、月、日、曜日、時、分の順に設定画面が表示されます。
変更する場合はDOWNボタン、UPボタンで値を修正し、変更しない場合は、そのままENTボタンを押せば次の項目
に移ります。
「カレンダー」を実行すると現在の日時を表示します。
1分間でメニュー選択画面に戻ります。
今回、諸般の理由でソフトウエアで電源を落とすことが出来ませんでした。
メニュー選択画面で6分間放置した場合とか計測終了後はスリープさせ、消費電流を抑えています。
そのとき上の画面が表示されています。
この状態でも1.8mA〜2.5mAの電流を消費しているので、早めに電源スイッチを切る必要があります。
再度、動作させる場合も一旦、電源スイッチを切る必要があります。
テキストファイルを作成出来るターミナルソフトを用意します。
ここではテラタームを使用しましたが、他にも使えるものがあると思います。
PCと記録計をRS232Cケーブルで接続します。
テラタームを起動するとダイアログが出るのでシリアルポートにチェックを入れます。
次に設定メニューからシリアルポートを選択します。
ダイアログが出るのでボーレートを19.2Kに変更します。
記録計の電源を入れ「ソウシンD」を実行し「RS232C コマンドマチ」にしておきます。
ターミナルにコマンド”THL21”を入力し、リターンキーを押します。
記録計からデータが返送されターミナルに表示されます。
テラタームでもテキストファイルを作成できますが、私はクリップボートにコピーして他のテキストエディタに貼り付けて
います。
編集メニューから「全てを選択」を選びます。
背景が反転されます。
上図で800件のデータの次は記録開始分、記録開始時、記録開始日、記録開始週、記録開始月、記録開始年、インターバル
となっています。
この状態で再び編集メニューから「コピー」を選択してクリップボードにコピーします。
後は適当なテキストエディタに貼り付けてテキストファイルにしています。
サンプルデータファイル (ZIP圧縮されています。)
このファイルは、そのままエクセルに読み込めます。
後はエクセルでグラフを作成します。
グラフ作成は多少、手間が掛かりますが、目盛り範囲を細かく調整出来るのが利点です。
データをグラフ表示するのとファイルとして保存する目的でアプリケーションを作成しました。
前回のアプリケーションとデータのフォーマットは同じですが、記録開始日時やインターバルのデータが追加されたので複雑に
なった部分があります。
ウインドウの構造は今回、簡略化しました。
前回はメインウインドウにグラフ表示用ウインドウを貼り付けたのですが、メインウインドウ=グラフ表示用ウインドウと
しました。
通信ポートは自動で選択するようにしたので選択用のダイアログは廃止しました。
代わりに任意のデータ位置のデータを表示するダイアログを追加しました。
前回、エディットに表示される数字を拡大していたのですが表示ヶ所が増えたので省略しました。
もしフォント拡大する場合、手順として
・ 新しいフォントを作成し、ハンドルを求める。
・ 各エディットのIDからハンドルを求める。
・ これらのハンドルを使い各エディットにフォントを変更するメッセージを送る。
数値表示のエディットは2つのダイアログに40個あるので結構面倒です。
ハンドルは配列変数にし、IDも配列定数に組み直します。
画像をクリックすると原寸大になります。
(ブラウザの「戻る」ボタンで戻ってください。)
メインウインドウは全エリアがグラフ表示用となっています。
他の情報はダイアログを出して入力/表示します。
メニュー下のエディット窓は通信時に取得したCOMポートの番号を表示します。
「データ受信」は記録計のデータを読みとります。
RS232Cケーブルを接続し、記録計で「ソウシンH」を実行し、コマンド待ち状態にしておきます。
「データ受信」メニューをクリックすれば、データを受信します。
実際に使用する時はターミナルソフトは不要ですが、記録計のデバッグ時にはアプリケーションは未完成でしたので
ターミナルソフトを使ってデータの送信具合を確認しました。
ターミナルから送信要求コマンド”THL22¥r”を送ればデータを返送します。
<参考> データフォーマット
サンプルデータファイル (ZIP圧縮されています。)
「名前を付けて保存」は受信データをファイルにして保存します。
「開く」は保存したファイルを読み込んでグラフ、その他のデータを再現します。
これらを実行するとウインドウズの標準ダイアログが出ます。
拡張子は.thdです。
「テキスト入力」はデータに説明文書の書き込み/表示が出来、データと共にファイルに
保存/読み出しが可能です。
「データ消去」は読み込んだデータを消去します。
「データ表示」は任意も位置のデータを数値表示します。
「最高/最低温度」計測温度の最大値、最小値と、その計測位置を数値表示します。
VC6プロジェクトのダウンロード (ZIP圧縮されています。)
XPとW7で動作を確認していますが、今のところW8以降のPCは自宅に無いため動作するかは分かりません。
使い込んでいないのでバグが残っている可能性があります。