CC3200板子温度传感器如何使用
我想找一个例程 看如何对温度传感器进行配置使用
通过WIFI发给PC的服务器端显示
请下载CC3200SDK,温度传感器的例程在C:\ti\CC3200SDK_1.3.0\cc3200-sdk\example\out_of_box
您好,我参考了out of box这个例程
我自己修改了部分程序如下:
我把tmp006移植到 tcp_socket例程中的BsdTcpClient函数中
显示不出温度数据 请问下如何更改
参考I2C例程
void main()
{
int iRetVal;
// char acCmdStore[512];
//---------------------------------Test------------------------------
unsigned char ucData[2]; //测试读取TMP006 温度数据
unsigned char ucData_BMA[6];
ucData[0]=1;
ucData_BMA[0]=2;
//-------------------------------------------------------------------
//
// Initialize board configurations
//
BoardInit();
//
// Configure the pinmux settings for the peripherals exercised
//
PinMuxConfig();
//
// Configuring UART
//
InitTerm();
//
// I2C Init
//
I2C_IF_Open(I2C_MASTER_MODE_FST);
//
// Display the banner followed by the usage description
//
DisplayBanner(APP_NAME);
// DisplayUsage();
// I2C_IF_Write(0x41,&ucData[0],1,0); //地址指向温度寄存器
I2C_IF_Write(0x41,ucData,1,0); //或者直接用 均可 地址指向温度寄存器
I2C_IF_Write(0x18,&ucData_BMA[0],1,0);
while(FOREVER)
{
//-------------------------------------Test TMP006-IIC--OK-----------------------------------------------
// TMP006 Infrared Thermopile Sensor 红外非接触温度传感器 –40°C to +125°C
// TMP006的温度值用14位(15:2)补码表示,第15位为符号位-0正 1负 + 14:7位是8位整数部分 + 6:2位是5位小数部分
// 最小分辨率为2^-5=0.03125
iRetVal = I2C_IF_Read(0x41,&ucData[0],2); //读取温度数据,数据为2个
if(!iRetVal) //读取成功,处理温度值
{
unsigned short usTemp = (ucData[0]<<8) + ucData[1];
if(!(usTemp & 0x8000)) //处理正温度 1000 0000 0000 0000
{
Report("当前温度是:%d." , usTemp>>7); //显示整数部分 6 : 2 位
// Report("%02d℃\n\r" ,((usTemp&0x7f)*25)>>5); //显示小数部分(02d-两位) ---0111 11-11(0x7f)--- 先右移2位再除以2^5相当于*2^-5=0.03125 最后在*100取两位小数点数据
Report("%03d℃\n\r" ,((usTemp&0x7f)*250)>>5); //OK 显示小数点3位
// Report("%03d℃\n\r" ,(((usTemp&0x7f)>>2)>>5)*1000); //no OK 显示小数点3位 ((usTemp&0x7f)>>2)>>5)*100=(usTemp&0x7f)*25)>>5 化简后相等
}
}
MAP_UtilsDelay(8000000); //延时0.5s
//-------------------------------------------------------------------------------------------------------
//-------------------------------------Test BMA222-IIC--OK-----------------------------------------------
iRetVal = I2C_IF_Read(0x18,&ucData_BMA[0],6); //读取温度数据,数据为6个
if(!iRetVal) //读取成功,处理数据
{
Report("x: %03d ", ucData_BMA[1]); //显示x轴加速度
Report("y: %03d ", ucData_BMA[3]); //显示y轴加速度
Report("z: %03d\n\r", ucData_BMA[5]); //显示z轴加速度
}
MAP_UtilsDelay(8000000);
非常改写您的回答 我已解决获取温度的问题。但是我仍有一些疑问需要解答
1.在TMP006.c文件中提供的GetRegisterValue(unsigned char ucRegAddr, unsigned short *pusRegValue)中的
I2C_IF_ReadFrom(TMP006_DEV_ADDR, &ucRegAddr,1, &ucRegData[0], 2) 不是很明白这个函数的作用
2.用你的代码I2C_IF_Write(0x41,ucData,1,0); 为什么要写数据进去再读呢
地址指向温度寄存器