-1
LM35温度センサをAN1のアナログチャネルに接続し、PIC16F887のシリアルRS232を通して温度を送信しました。私は温度値を読み取っているが、値はしばしば31と32のように変化し、またLM35の温度が32,33などのように非常に急激に変化するときに一定の温度値を制御する方法。ここに私のコードは、誰でも助けてください。PIC16F887のADCの問題LM35の温度値が頻繁に変化する
#include <htc.h>
void main(void)
{
TRISA1 = 1;
ANS1 = 1;
OSCCON = 0x78; // OSCILLATOR CONTROL REGISTER
TXSTA = 0x26;
RCSTA = 0x90;
SPBRG = 10;
ADCON1 = 0x80;
unsigned int current_temp, initial_temp = temperature();
transmit_char(initial_temp);
flag = 0;
while (1)
{
current_temp = temperature();
if((current_temp == (initial_temp + 1)) || (current_temp == (initial_temp - 1)))
{
flag = 1;
}
if(flag == 1)
{
flag = 0;
transmit_char(current_temp);
initial_temp = current_temp;
}
}
}
int temperature(void)
{
ADCON0 = 0xC5;
GODONE = 1;
while(GODONE);
int temp;
temp = (ADRESH << 8) + ADRESL;
temp = temp/2;
return temp;
}
いくつかのバリエーションは正常です。データシートを読み、ハードウェアが正しいことを確認してください(ノイズなど)。説明から、これはソフトウェアの問題ではありません。 – Olaf