PICマイコンを使って測定ツールを作ってみよう(5) ―― ネットワークとA-Dコンバータを利用してさまざまな場所の温度を測る
前回までの記事で,PICマイコン基板を4台接続して,簡易ネットワークを構築した.今回は,この基板に温度センサを接続し,測定値をパソコンに送り,収集したデータをグラフで表示する.温度を測定することは,家庭内の電力消費の低減に役立ち,これと空調機器や暖房機器の運転を連携できれば,個人ごとに快適な環境を作り出すことができる.省電力生活の基本は,必要のない電力の使用をやめることである.温度のこまやかな制御は,重要なものとなる.
エレキ系DIY・連載「PICマイコンを使って測定ツールを作ってみよう」 バック・ナンバ
第1回 クロック周波数やモータの回転数を測れるカウンタを作る(前編)
第2回 クロック周波数やモータの回転数を測れるカウンタを作る(後編)
第3回 Visual BasicでPICマイコンを制御する
第4回 ネットワークでセンサ・データを集めて省電力生活を目指す
最初に,今回,使用するPICマイコンのA-D変換機能,および温度センサについて説明します.
●設定できるアナログ入力ピンの組み合わせに制約がある
ここで使用している米国Microchip Technology社のPICマイコン「PIC18F2550」には,13チャネルの入力を持つA-Dコンバータ(ADC)が1個搭載されています.同時に測定できるアナログ入力は1チャネルだけですが,チャネルの切り替えにより,多数の入力をほぼ同時に測定しているようにみせかけることができます.A-Dコンバータの変換時間が最小6.4μsなので,10μsごとにチャネルを切り替えて測定しても130μsとなり,1秒間に約7,000回程度も測定できることになります.ただし,CPUのクロック速度が速いと,それだけA-D変換の処理時間を待つためのクロック数が多くなります.ここで使用している48MHzというクロック周波数では,クロック数が不足します.
PIC18F2455シリーズのデータシートのTable 21-1に各クロック周波数ごとのA-D変換に必要なクロック数がまとめられています.40MHzでは64クロックが必要となり,48MHzではそれ以上が必要となります.このクロック数は,A-D変換が実行される前にADCON2レジスタに設定される必要があり,残念ながら40MHzが最大値となっています.ただし,実際には48MHzで使っていても,それほど誤差が増えることはありません.
設定レジスタとしては,ADCON0,ADCON1,ADCON2の3個のレジスタがあり,ADCON0でチャネル選択,A-D変換開始,A-D変換機能イネーブルを設定できます.ADCON1では,変換チャネルのコンフィグレーション,参照電圧ピンを設定できます.ADCON2では,A-D変換クロック,変換クロック数を設定できます.いっぱい設定する項目があり,最初はとまどいますが,すぐに慣れてきます.
A-D変換は,ADCON0レジスタのGOビットをONすることにより始まります.変換が終了すると,このGOビットが0に変わるので,割り込みを使わない場合は,ずっとこのビットを監視していればいつ変換が終了したのかが分かります.
変換前にSLEEPモードに入り,変換が終了すると割り込みで目覚めさせ,消費電流を抑えることも可能です.電池駆動時には有効な方法です.
13本もあるアナログ入力ピンのコンフィグレーションは,かなり組み合わせを限定しているので,13本の中の1本だけをアナログ入力に使いたい場合,設定できないこともあります.最近のPICマイコンではこの設定方法が変更され,チャネルごとにアナログ入力として使うか,GPIOとして使うかを設定できるようにしてあり,この使いにくさは解消されています.各制御レジスタの詳細を図1に示します.Microchip Technology社のPIC18F2455のデータシートからの転載です.各レジスタの動きを知りたい方は,直接データシートのPDFを入手してください.
今回のPICマイコン基板では,アナログ入力としてAN0,AN1のピンを使用していて,ほかのピンはすべてGPIOとして使っています.マルチパーパス・コネクタ(SV2)には,主にUARTとI2CとSPIで使われるピンが集められていますが,この中のRA5,RB0,RB1はそれぞれ,アナログ入力AN4,AN12,AN10として設定できます.ただし,コンフィグレーションにおける設定の組み合わせには制約があるので,設定できないケースもあります.
これは図1(b)のADCON1のコンフィグレーションの組み合わせを確認していただくと分かります.GPIOで使っているものをA-Dコンバータの入力に設定すると,動作しなくなります.LCD制御にはRB2-7を使っているので,これがA-Dコンバータに割り付けられるとLCD表示ができなくなります.つまり,ADCON1のPCFGを8以上にしなければなりません.