|
【TI首届低功耗设计大赛】07611128 温度传感器tmp123数据转换问题
[复制链接]
https://bbs.eeworld.com.cn/thread-447702-1-2.html
这个是我以前发的帖子,现在新开一个。这次的主题是关于温度传感器TMP123的。
目前遇到了这样一个困惑。在读取时序的过程中,可以很正常的读取。他的时序图如下:
一共是读取13位数据。根据datasheet来看,他的低位BIT2为1,BIT1,BIT0为高阻态,那我应该怎么样去计算?需要把这个读出来的13位向左移三位么?
在资料里面提供的数据来看,他最高应该有16位的,到底该怎么算,并且,上图BIT2=1,下图中BIT2=0,到底是那个……
我试验了一下,当我把这个数据向左移3位的时候,经过换算,大约是240度左右(肯定是错的)。当我直接用13位数据去转换,感觉是正确的,符合室温,拿到手里面温度也是变化的,放到电脑出风口,温度也是ok的。这是串口发送的一组数据:27.1250
27.0625
27.0625
27.0625
27.0625
27.1250
27.4375
27.6250
27.8125
28.0000
28.1250
28.3125
28.5000
28.6875
28.8125
29.0000
29.0625
29.3125
29.5000
29.6875
29.8125
30.0000
30.1250
30.3125
30.4375
30.6250
30.7500
30.8125
我只是短暂的手动(调试界面)让他发送了一下数据。可以看到,他在不断地升温中,到最后升温到38度左右,
因此感觉不需要移位就是正确的,现在问题来了,他的后三位是干嘛的??求指教。
程序如下:
#define TMP123_CS_1 (P1OUT |= BIT4)
#define TMP123_CS_0 (P1OUT &=~BIT4)
#define TMP123_CLK_1 (P1OUT |= BIT5)
#define TMP123_CLK_0 (P1OUT &=~BIT5)
#define TMP123_data P1IN&BIT3
void Delayus()
{ unsigned char i;
for (i=0;i<100;i++)
_NOP(); _NOP();
}
void TMP_Init()
{
P1DIR&=~BIT3;
P1DIR=BIT4+BIT5; //P5.2、4、5、6=in,P5.0、1、3、7=out
PM5CTL0 &= ~LOCKLPM5;
}
//温度读取
unsigned int ReadOp(void)
{
unsigned int dat=0;
unsigned int TEMPTMP=0;
char num=13;
TMP123_CS_1;
TMP123_CLK_1;
Delayus();
TMP123_CS_0;
Delayus();
while(num)
{
TMP123_CLK_0;
dat=dat<<1;
Delayus();
TEMPTMP=TMP123_data;
Delayus();
dat|=TEMPTMP;
TMP123_CLK_1;
Delayus();
num--;
}
TMP123_CS_1;
// dat=dat<<3;
return dat;
}
Ps:他的温度转换每0.5s转换一次,楼主的串口发送太快,在调试的时候还以为,他为什么就不工作了!!好吧,当做笑话来看好了,使用的时候注意下了
|
|