« PICのお勉強(30) C言語編 AD変換の結果をLCDに表示する | トップページ | PICのお勉強(32) C言語編 LM35DZで測った温度を7セグLEDに表示する »

2012年7月14日 (土)

PICのお勉強(31) C言語編 LM35DZで温度計

Lm35dz 温度センサLM35DZを使って温度計にしてみました。
 LM35DZは,0℃~100℃を0mV~1000mVでリニアに出力してくれますから,PICに直接つないで簡単に温度表示させることができます。
基準電圧はVddの5Vを使っていますから,分解能は約4.88mVです。A/D変換された値に4.88を掛ければ,温度センサが出力する電圧がmVの単位で得られますから,整数部分と小数部分に分けてLCDに送れば温度表示ができるわけです。こりゃ楽しいですなあ
ソースはこれ→lesson31.c

/************************************
16F88 HI-TECH C v.9.83
温度計 LM35DZをRA0(AN0)に接続 LCD表示
************************************/

#define _LEGACY_HEADERS
#include "pic.h"
#include "stdlib.h"
#include "lcd.h"
#define _XTAL_FREQ 4000000
__CONFIG(DEBUGDIS & LVPDIS & BORDIS & MCLRDIS & PWRTEN & WDTDIS & INTIO);
__CONFIG(FCMDIS & IESODIS);

unsigned int adconv(),tmp,tmp1,tmp2;
char str[7],str1[7],str2[7];

void main()
{
OSCCON = 0b0110000; // 内蔵OSC 4MHz
ADCS2 = 0; //AD変換クロック値設定
ADCS1 = 0;
ADCS0 = 1;
ADFM = 1; // AD変換結果は右詰めで格納
VCFG1 = 0; // 基準電圧はVddとVss
VCFG0 = 0;
ANSEL = 0b00000001; // RA0(AN0)はアナログ
TRISA = 0b00000001; // RA0(AN0)入力
TRISB = 0b00000000; // すべて出力
PORTA = 0b00000000;
PORTB = 0b00000000;

lcd_init(); //SD1602の初期化
while (1)
{
tmp =adconv()*4.88;
tmp1=tmp/10;
tmp2=tmp-tmp1*10;
itoa(str1,tmp1,10);
itoa(str2,tmp2,10);

lcd_goto(0); //カーソルを0行目の先頭に移動する
lcd_puts("キオン ");
lcd_puts(str1);
lcd_puts(".");
lcd_puts(str2);
lcd_putch(0xDF);
lcd_puts("C");
__delay_ms(100); //100msの時間待ち
}
}

unsigned int adconv()
{
CHS2 = 0; //AD変換ポート設定 RA0(AN0)
CHS1 = 0;
CHS0 = 0;
ADON = 1; //AD変換ON
__delay_us(20); //アクィジション時間 20us
GODONE = 1; //AD変換開始
while(GODONE); //変換完了待ち
return (ADRESH<<8) + ADRESL;
}

| |

« PICのお勉強(30) C言語編 AD変換の結果をLCDに表示する | トップページ | PICのお勉強(32) C言語編 LM35DZで測った温度を7セグLEDに表示する »

PICマイコン」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック


この記事へのトラックバック一覧です: PICのお勉強(31) C言語編 LM35DZで温度計:

« PICのお勉強(30) C言語編 AD変換の結果をLCDに表示する | トップページ | PICのお勉強(32) C言語編 LM35DZで測った温度を7セグLEDに表示する »