楽々PIC

水田除草と言うブログを書いていますが、PIC関連の記事が意外に人気で驚いています。 PICを使った電子工作に興味を持つ方が多いことを知って、一緒にPICを学ぶブログを作りたいと思いました。 「楽々PIC」は教材と言うよりも少し実用性?のある楽しい道具を作りながら学ぶブログを目指します。

温度センサー

ディジタル温度センサー

RRP1320-1-04 温度誤差」に書いたように、A/D変換の基準電圧による測定誤差が大きい為、ディジタル温度センサーを試してみました。 センサーは Maxim の1wireデジタル温度センサー DS18B20+ で、-55~+125℃まで測定可能で、-10~+85℃は±0.5℃の精度と言うことです。 電源電圧は3.0~5.5Vで、1-Wire(GNDを加えて2本)だけで電源供給と双方向ディジタル通信が可能です。 基準電圧のような厄介なものは DS18B20 内部で解決し、ディジタル信号で高精度の測定結果を得られるのが魅力です。

1-Wire バス・プロトコルは初挑戦でしたが、ただ一つの DS18B20 とPICとの間で相互通信を行い、温度測定が出来るようになりました。 PIC18F1320 のポート( RB0 )を 4.7k プルアップして DS18B20 の DQ 端子に接続し、DS18B20 の VDD , GND の両端子を GND に接続するサテライト・パワーを使っています。

1-wire回路

DS18B20 を一つだけ接続し、「燻煙器」のような用途を想定している為、以下2通りの通信だけで実現しています。
1. 初期化 → SKIP ROM → CONVERT T → 1-Wireバス給電
DSC00245

2. 初期化 → SKIP ROM → READ SCRATCHPAD → 12bitだけ読み込み
DSC00246

今後、何回かに分けて詳細を紹介したいと思います。


以下は関連記事のインデックスです。


ディジタル温度センサー2 
 DS18B20+ を一つだけ接続して温度変換をさせ、値を読み出す際に使ったポート制御の定数は下図の通りです。

ディジタル温度センサー3 
 TIMER3 割り込みの都度指定されたプログラムを実行する為に、フック( HOOK )を使っています。 データ・メモリーとプログラム・メモリーが分かれている PIC の場合はフックと呼べないかも知れませんが、TIMER3 割り込み処理の先頭で所定のデータ・メモリー( 3byte )を参照して指定(予約)されたアドレスにジャンプします。

ディジタル温度センサー4 
 割り込み処理からフックで実行されるプログラムの内、DS18B20+ にコマンドを送信(書き込み)する部分と、温度データを読み出している部分のアセンブラソースを紹介します。 クロック周波数8MHzでの実施例です。


楽々PIC」は楽しい道具を作りながら学ぶブログを目指します。




RRP1320-1-04 温度誤差

RRP1320-1-04-2 を書き込んで PICkit3 無しの単独で動作確認していたところ、PICkit3 から電源供給していた時と比べて表示温度が5℃程も低くなることに気付きました。 LCD のバックライト用電流が大きいためか PICkit3 の供給電圧が低い(4.75V程度)と認識していましたが、25℃の5%なら1℃程度と漠然と考えていましたから、5℃も違うと原因を確かめる必要があります。

DSC00185

温度センサー LM60 の誤差は ±2℃@25℃ ですが、同じ(一つの)センサーで比較していますから無視します。 RRP1320-1-04 のA/D変換基準電圧(Vref)はPICの電源電圧を使っています。 電源電圧(5V)の変化に連れて入力電圧に対するA/D変換結果が変化します。 電源電圧を±5%振った時の電圧誤差と、温度換算結果は下図のようになると思います。 (厳密には間違った図ですが誤差範囲は同等です。)
温度換算の方法は「温度センサー4」で紹介しています。


vref

±5℃@25℃もの誤差が生じます。 これに LM60 の誤差が加わりますから、現状では温度表示値はあてに出来ません。 電源との組み合わせを固定し、誤差を確認して使うか電源電圧または基準電圧(Vref)を調整可能に作ります。 基準電圧端子は LCD に使っていますから、調整可能にする為には PICkit3 が使っている端子に LCD 出力を移す必要があります。


楽々PIC」は楽しい道具を作りながら学ぶブログを目指します。



温度センサー5 テーブル参照

 「温度センサー4」の続きです。 今回は、A/D変換結果を元にデータテーブルを参照してLCDに温度を表示します。 <PICデバイス=18F1320> 温度センサーはNational Semiconductor 製 LM60 で、AN4に接続しています。

下図は、データテーブル参照を行い、LCD に表示する為に仮想 V-RAM に ASCII コードを転送するサブルーチンのアセンブラ・ソース( scan.asm の一部)です。 メイン処理から500msec間隔でサブルーチン・コールされます。

他のメイン処理プログラム(RCサーボ用)が先に使っている為、サブルーチンの最初と最後にテーブル・アクセス用のアドレス・ポインター ( TBLPTRU , TBLPTRH , TBLPTRL ) の退避と復旧を行っていますが、他で使っていなければ退避と復旧は不要です。

23~28行目でテーブル・アクセス用のアドレス・ポインターを「温度センサー4」で紹介したデータ・テーブルの先頭に指定します。 A/D変換結果の下位 8bit とデータテーブルのレコード長( 4byte )を掛け算した値を加えて、読み出すべきデータの先頭にアドレス・ポインターを移します。

scan_tmpslcd

39~44行目でLCDの3行目に相当する仮想 V-RAM に、温度を示す ASCII コード 3byte を並べて、終了です。 LCDに転送する作業は「LCDに自動転送」で紹介したプログラムが担当してくれます。

以上で、温度センサーの説明を終わります。


以下で、一連の記事で紹介したソース・ファイル(プロジェクト)をダウンロード出来ます。
LHA書庫です。
 http://jyosou-robot.livedoor.biz/pic/RRP1320-0/RRP1320-0-5.lzh


温度センサー関連記事のインデックスはこちら → 温度センサー 


楽々PIC」は楽しい道具を作りながら学ぶブログを目指します。



温度センサー3

 「温度センサー2」の続きです。 50msec 間隔で発生する TIMER0 割り込みの都度行う、A/Dコンバーターのサンプリングについて説明します。 <PICデバイス=18F1320> 温度センサーはNational Semiconductor 製 LM60 で、AN4に接続しています。

下図は、TIMER0 割り込み処理のアセンブラ・ソース(intlow.asm の一部)です。
69行目の CALL scanss で温度センサーをサンプリングしています。 71行目 BRA intlz の先ではレジスタ復旧して割り込み処理を抜けます。

intlow_TIMER0

入力走査のサブルーチン scanss を下図( scan.asm の一部)に示します。 先に発生した TIMER0 割り込みでA/D変換開始した変換結果を読み出して、tmpsh , tmpsl に転送し、次回サンプリングに備えて AN4 のA/D変換開始を指示して終了です。
A/D変換に要する時間は、クロック周波数と「温度センサー2」で紹介した ADCON2 の設定で決まり、Fosc=8MHzでは 38usec です。 50msec後には確実に変換が終了しているはずなので変換終了のチェックを省略しています。

scan_scanss

上図13行目の設定は、下図に示すデータシートに従って、AVDD-AVSS をリファレンス電圧として、AN4 チャンネルを変換開始しています。

18F1320_ADCON0



温度センサー関連記事のインデックスはこちら → 温度センサー 


楽々PIC」は楽しい道具を作りながら学ぶブログを目指します。




温度センサー

だいぶ役者(周辺部品とプログラム)が揃ってきましたが、温度センサーにも挑戦です。 温度センサーは National Semiconductor 製 LM60 で、-40~125℃を測定可能、±2℃の精度です。 A/D変換値を元にテーブル参照で文字列に変換して、LCDの3行目に温度を表示するプログラムです。

DSC00078

50msec 間隔で発生させた TIMER0 割り込みでサンプリングしています。

いつもお世話になっている参考書の記述と PIC18F1320 データシートに食い違いが見られた為、データシートの一部を紹介しながら数回に分けて説明する予定です。


以下は温度センサー関連記事のインデックスにします。

温度センサー2 
 A/Dコンバーターの設定を行います。 動作がおかしいと思った時はデータシートを確認することも大切ですね。

温度センサー3 
 50msec 間隔で発生する TIMER0 割り込みの都度行う、A/Dコンバーターのサンプリングについて説明します。

温度センサー4 
 A/Dコンバーターからのサンプリング結果を温度(℃)に変換するデータテーブルを作ります。

温度センサー5 テーブル参照 
 A/D変換結果を元にデータテーブルを参照してLCDに温度を表示します。 一連の記事で紹介したソース・ファイル(プロジェクト)をダウンロード出来ます。

RRP1320-1-04 概要 
 RRP1320-1-03 に温度制御機能を追加しました。 パン作りのイースト発酵などに応用出来そうです。

RRP1320-1-04 温度誤差 
 A/D変換基準電圧(Vref)にPICの電源電圧を使っています。 電源電圧(5V)の変化に連れて入力電圧に対するA/D変換結果が変化します。

ディジタル温度センサー 
 A/D変換の基準電圧による測定誤差が大きい為、ディジタル温度センサーを試してみました。 センサーは Maxim の1wireデジタル温度センサー DS18B20+


楽々PIC」は楽しい道具を作りながら学ぶブログを目指します。






ダウンロードコーナー
記事検索
アンケートに御協力下さい


アーカイブ
楽々PIC 宛てBlogMail


--- ご了承下さい ---

注意して記事を書いていますが、記事及びリンク先の情報による不利益について、一切責任を負い(負え)ません。
QRコード
QRコード
アクセスカウンター

    Atsuhiro Imai

    バナーを作成


    プロフィール

    jyosou_robot

    • ライブドアブログ