入力装置: 1wireデジタル温度センサー DS18B20+ ‐55℃から+125℃
出力装置: 超小型LCDキャラクタディスプレイモジュール
演算装置: PIC16F88
ポイント:
ハード設計
【デジタル温度センサー DS18B20+】
データの送受信はRA1で行う
パラサイト(p5図4)で使用しCONVERTT時の電流補充(p5 1.5mA)はRA2より供給
【超小型LCDキャラクタディスプレイモジュール】
【電源sw、電源ランプ】上下の電源ラインを接続する
【完成例】
ソフト設計:もちろん全部自分で設計してもOK
MPLAB IDEでビルド済みのデータはこちら
【LCD関連】今回は作成済を使用する。 ビルド済みデータ内の(lcd_rb_h.cとlcd.h)参照
メインフローを考える
DS18B20のマニュアルp12図11ROMコマンド・フローチャートとp13図12機能コマンド・フローチャートを参考に以下の条件で検討。
条件:①DSは1個のみ②分解能はデフォルトの12bit(p3)③データの読込み(READ SCRATCHPAD)では温度データ(Byte0,1)を読む(p11、p7図7)
図11と図12 流れを色鉛筆などでなぞってみる。
![]() |
2.温度測定の流れ
①温度センサーのリセット 何度も使うので関数w1inisub()とでもしよう
②スキップROMコマンドの実行 p10スキップROMコマンド値0xccをDSに書込む
関数w1sendbyte()としよう
③温度データ変換指示コマンドの実行 0x44の書込み、p5変換中の電流1.5mA確保
④変換時間 p7表2 750ms以上なので約1秒に
⑤変換中の電流1.5mAを元に戻す
⑥温度センサーのリセット 図12最下部図11に戻ってください
⑦スキップROMコマンドの実行
⑧リードスクラッチコマンドの実行 p11 READ SCRATCHPAD 0xbeの書き込み
⑨Byte0,1を読み込む 関数w1readbyte()としよう
⑩温度センサーのリセット p11 Byte2~読込まずに読込み終了
⑪データから符号・温度計算 関数keisansub()としよう
LCDへの表示関数lcdsub()は作成ずみ
3.関数(サブルーチン)を考える
3-1.温度センサーのリセット
p14図13初期化のタイミング参照
この図の意味:
実際の記述例:
w1inisub() //関数の名前、後ろに;は要らない
{
TRISA1 = 0; //RA1を出力に
RA1=1; //RA1を1に
RA1=0; //RA1を0に
__delay_us(500); // 480us以上LOWを維持
TRISA1 = 1; //RA1を入力に
__delay_us(100); //60us>でDSのLOWをチェック
__delay_us(400); // 100+400=480us以上待機、まとめて500usでも可
}
3-2.読み込み・書き込みも同様
書き込みは例:スキップROM 0xccをDSに送信する
読込みの考え方
温度データはp7図7のByte0とByte1に格納されp10のREAD SCRATCHPADの説明によりByte0の下位bitから始まりByte8まで続くがリセットを出すことにより終了させることができる。
そこで
1bitの読込み:
図14に従い読込みbit15に代入する
①値が1ならbit15のみを1に temp |= 0x8000;
②値が0ならbit15のみを0に temp &= ~0x8000;
3-3.計算
p4表1のように温度が-の時には補数で表示される。具体的にはデジタル出力上位にbit11からbit15が1で出力される。
①デジタル出力が負か正かを調べる if (temp>0x8000) 少なくともbit15は1
②負なら符号判定変数に値を変更 fugou=1;
③負ならデジタル出力値を補数から戻す temp=(~temp)+1; 初級シスアド講座 10進数と2進数の相互変換参照
④整数部計算用変数thにデジタル出力値セット th=temp;
⑤整数部bit4~bit10以外を0に th &= ~0xf80f;
⑥thの値を温度に換算する th=th/16; p4表1のデジタル出力値と温度を比較
⑦小数部計算用変数tllにデジタル出力値セット tll=temp;
⑧小数部bit0~bit3以外を0に tll &= ~0xfff0;
⑨小数点部の2桁を整数化し温度に tll=tll*100/16;
プログラムが正常に動いたら16進数や2進数配置など色々な形式でLCDに
表示してみよう。
参考:MPLAB IDE 8.73a 書き込 PicKit3
・Project Wizard
Device画面
Toolsuite
Add existin files maincとlcd_rb_h.cとlcd.hを追加する。
完了後の画面
Picへの書き込みPicKit3を選択し電源を設定し書込む。
以上