Embedded PIC16F887的ADC读取LM35温度值时经常出现问题
我在AN1的模拟通道中连接了LM35温度传感器,然后通过PIC16F887中的串行RS232传输温度。我已经读取了温度值,但该值经常变化为31和32,而且当触摸LM35时,温度变化非常快,如32、33等。如何控制恒温值。这是我的密码,请任何人帮我Embedded PIC16F887的ADC读取LM35温度值时经常出现问题,embedded,Embedded,我在AN1的模拟通道中连接了LM35温度传感器,然后通过PIC16F887中的串行RS232传输温度。我已经读取了温度值,但该值经常变化为31和32,而且当触摸LM35时,温度变化非常快,如32、33等。如何控制恒温值。这是我的密码,请任何人帮我 #include <htc.h> void main(void) { TRISA1 = 1; ANS1 = 1; OSCCON = 0x78; // OSCILLATOR CONTROL REGISTER
#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;
}
#包括
真空总管(真空)
{
TRISA1=1;
ANS1=1;
OSCCON=0x78;//振荡器控制寄存器
TXSTA=0x26;
RCSTA=0x90;
SPBRG=10;
ADCON1=0x80;
无符号整数当前温度,初始温度=温度();
传输字符(初始温度);
flag=0;
而(1)
{
当前温度=温度();
如果((当前温度==(初始温度+1));(当前温度==(初始温度-1)))
{
flag=1;
}
如果(标志==1)
{
flag=0;
传输字符(当前温度);
初始温度=当前温度;
}
}
}
内部温度(空隙)
{
ADCON0=0xC5;
GODONE=1;
while(GODONE);
内部温度;
温度=(ADRESH执行此操作,
收集10个adc数据,
从该值中删除最小值和最大值。
将剩余的8个ADC值相加,然后将该值除以8。
这应该是连续的过程,平均每十个样品
注:采样和平均值应为…1至10,其次为2至11和3至12。每次读取时,您都会得到adc值。这里也会过滤突然的波动
希望这有帮助..祝你好运..有些变化是正常的。请阅读数据表并确保你的硬件是正确的(噪音等)。从描述中,我不认为这是软件问题。