ディスプレイは何とかなったので [ソフト]
今度は、温度を測ってみる。
温度センサーは、いろいろな種類があって、
参考にさせてもらっている↑では、温度で抵抗が変化するものを使い、
発信回路の周波数をカウントして、温度に変換しているが、
私は、精度は落ちるかもしれないが簡単な、温度で電圧が変化する
National Semiconductor のLM61CIZにした。
測定範囲:-30℃~100℃、温度係数:+10mV/℃ 、動作電圧範囲:+2.7~+10V。
つまり、ある程度の電圧をかけてあげると、温度に応じた電圧を出力してくれるというもの。
この電圧をPICでA/D変換して、温度に換算する。
A/D変換では、PICは電圧を基準電圧の1024分率で出力するので、
電圧=A/D変換の結果/1024×基準電圧。0℃が0.6V、1℃あたり0.01Vずつ増えるので、
温度=(電圧-0.6)/0.01になる。
というわけで
TRISC = 0x01; // 入出力設定
OpenADC( // ADC初期化
ADC_FOSC_4 & // AD変換クロック指定
ADC_RIGHT_JUST & // 右詰め出力
ADC_12_TAD, // チャージ時間
ADC_CH4 & // アナログ入力チャネル
ADC_INT_OFF, // 割込みは行わない
ADC_REF_VDD_VDD & // 正基準電圧
ADC_REF_VDD_VSS, // 負基準電圧
ADC_0ANA ); // すべてデジタル入力に設定
ANSELbits.ANS4 = 1; // AN4はアナログ入力に設定
ConvertADC(); // AD変換開始
while(BusyADC()); // AD変換終了待ち
tempw = ADRESH * 256 + ADRESL;
temp = tempw*3.22-600; // AD変換結果=>温度
itoa(temp,tempc); //2進=>文字
で、温度×10をLCDに表示してみたけど、”.”を出した方が感じが出るかなと
for(i=0;i<5;i++){
if(tempc[i]==0x00){
tempc[i+1]=tempc[i];
tempc[i]=tempc[i-1];
tempc[i-1]=dot;
break;
}
}
を追加。”.”ごときで結構大変。
正確な温度計が、家にないので校正ができない。
暑いか寒いか程度の話なので、正確な温度も必要ないので、
後は、体で決めるしかないね。
コメント 0