PICのお勉強(31) C言語編 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;
}
| 固定リンク | 0
「PICマイコン」カテゴリの記事
- ZK-80で足し算(2020.07.23)
- TK-80互換機 ZK-80のキット(2020.07.21)
- PICのお勉強(37) C言語編 12F683でA/D変換(2015.06.02)
- UVレジンでLEDイルミネーション (2)(2015.05.15)
- PICのお勉強(35) C言語編 PWMでサーボモータを動かす(2014.10.05)
コメント