24011|67

5310

帖子

453

TA的资源

五彩晶圆(高级)

楼主
 

MSP430F5739+TMP006温度传感器 [复制链接]

 
硬件资源
MSP-EXP430F5739学习板
TMP006基本电路(2层板)



硬件连接:SCL---P1。7
                  SDA--P1。6


[ 本帖最后由 蓝雨夜 于 2012-7-27 11:50 编辑 ]

006.JPG (63.31 KB, 下载次数: 3)

006.JPG

Picture 2.jpg (2.74 MB, 下载次数: 7)

Picture 2.jpg

最新回复

官网上买了一个TMP006的板子,上面有10个引脚,不知道怎么连接  详情 回复 发表于 2016-12-7 15:31
 
点赞 关注(1)

回复
举报

5310

帖子

453

TA的资源

五彩晶圆(高级)

推荐
 
//TMP006在I2C总线通讯时的地址
#define TMP006_ADDRESS                0x40        //7位串行总线从机地址

//TMP006含有5个16 bit的寄存器
//只有配置寄存器是,可读,可写的,其他都是只读的

#define VOBJECT_REG                        0x00        //传感器电压寄存器
#define TEMPERATURE_REG               0x01        //温度寄存器
#define CONF_REG                             0x02        //配置寄存器
#define Manufacturer_ID_REG            0xFE        //制造商ID寄存器        5449h
#define Device_ID_REG                      0xFF        //设备ID寄存器       0067h

[ 本帖最后由 蓝雨夜 于 2012-7-27 10:11 编辑 ]
 
 

回复

5310

帖子

453

TA的资源

五彩晶圆(高级)

板凳
 
//配置寄存器相关位的定义
//Bit [15] RST: Software reset bit
#define TMP006_NO        0<<15        //正常运作,此位自我清除
#define TMP006_SR        1<<15        //软件复位

//Bits [14:12] MOD[2:0]: Mode of operation
#define TMP006_PD        0<<12        //掉电
#define TMP006_MOD        7<<12        //传感器和环境的连续转换

//Bits [11:9] CR[2:0]: ADC conversion rate
#define TMP006_CONVERSION_RATE_4        0<<9        //转换速率
#define TMP006_CONVERSION_RATE_2        1<<9
#define TMP006_CONVERSION_RATE_1        2<<9
#define TMP006_CONVERSION_RATE_0_5        3<<9
#define TMP006_CONVERSION_RATE_0_25        4<<9

//Bit [8] EN: DRDY enable bit
#define TMP006_DRDY_D        0<<8        //DRDY禁用
#define TMP006_DRDY_E        1<<8        //DRDY使能

//Bit [7] DRDY: Data ready bit
#define TMP006_DRDY_P         0<<7        //忙
#define TMP006_DRDY_R        1<<7        //
 
 
 

回复

5310

帖子

453

TA的资源

五彩晶圆(高级)

4
 
//测试程序里用到了一份“MSP430_SWI2C_Master.c”库文件里MSP430的IO模拟的I2C函数

/****************************************************************************
* 函数名:
* 输入:
* 返回:
* 描述:
* ************************************************************************/
void Write_TMP006(unsigned char Reg_Address,unsigned char * data)
{
        unsigned char TxData[3];
       

        TxData[0]=Reg_Address;        //寄存器地址
        TxData[1]=data[0];                //寄存器值 MSB
        TxData[2]=data[1];                //寄存器值 LSB
       
        MSP430_SWI2CMST_writeBlock(TMP006_ADDRESS,3, 0,&TxData[0]);
         
}  
  /****************************************************************************
* 函数名:
* 输入:
* 返回:
* 描述:
* ************************************************************************/
void Read_TMP006(unsigned char Reg_Address,unsigned char *RxData )
{
        unsigned char TxData[2];  

        TxData[0]=Reg_Address;        //地址指针
        MSP430_SWI2CMST_writeBlock(TMP006_ADDRESS,1, 0,&TxData[0]);

        MSP430_SWI2CMST_readBlock(TMP006_ADDRESS,2, RxData);
}
 
 
 

回复

5310

帖子

453

TA的资源

五彩晶圆(高级)

5
 
/****************************************************************************
* 函数名:
* 输入:
* 返回:
* 描述:
* ************************************************************************/
void Init_TMP006(void)
{
        unsigned char RxData[2],TxData[2];
        unsigned int confg=0;
        
        //写配置寄存器
        
        confg=                0x8000;
        TxData[0]=(unsigned char)(confg>>8);        //MSB
        TxData[1]=(unsigned char)confg;                        //LSB        
        Write_TMP006(CONF_REG,&TxData[0]);
        
         
        //读配置寄存器
        Read_TMP006(CONF_REG,&RxData[0]);
         
        
        //制造商ID寄存器        5449h
        Read_TMP006(Manufacturer_ID_REG,&RxData[0]);
        
        //写配置寄存器
        //MSB
        confg=                TMP006_MOD        |//传感器和环境的连续转换
                                TMP006_CONVERSION_RATE_0_25        |
                                TMP006_DRDY_D;        //DRDY禁用
        TxData[0]=(unsigned char)(confg>>8);
        //LSB                        
        TxData[1]=(unsigned char)confg;               
        Write_TMP006(CONF_REG,&TxData[0]);
        
        //读配置寄存器
        Read_TMP006(CONF_REG,&RxData[0]);
        
        //制造商ID寄存器        5449h
        Read_TMP006(Manufacturer_ID_REG,&RxData[0]);
        
        
        //设备ID寄存器       0067h    这里我读出来居然是0X07FF  奇怪!!!!!!!!     
       Read_TMP006(Device_ID_REG,&RxData[0]);
        
}
 
 
 

回复

5310

帖子

453

TA的资源

五彩晶圆(高级)

6
 
typedef union
{
        unsigned char ucdata[2];
        unsigned int  uidata;
}_ui2uc;
float Read_TMP(void)
{
        unsigned char RxData[2] ;
        _ui2uc ui2uc;
        float temp=0;
        //制造商ID寄存器        5449h
        Read_TMP006(Manufacturer_ID_REG,&RxData[0]);
       
        do
        {
                //读配置寄存器
                Read_TMP006(CONF_REG,&RxData[0]);
        }while((RxData[0]&0x08)!=0x08);
        //
        Read_TMP006(TEMPERATURE_REG,&RxData[0]);
        ui2uc.ucdata[1]=RxData[0];
        ui2uc.ucdata[0]=RxData[1];
         
       
        temp=(ui2uc.uidata>>2)*0.03125;
       
        return temp;
}

点评

do { //读配置寄存器 Read_TMP006(CONF_REG,&RxData[0]); }while((RxData[0]&0x08)!=0x08); 程序中 ((  详情 回复 发表于 2014-1-26 00:28
 
 
 

回复

5310

帖子

453

TA的资源

五彩晶圆(高级)

7
 
测试了下 室温大概也就30左右,采集过来也差不多

不知道如何知道距离远近和温度偏差大小!!!!


[ 本帖最后由 蓝雨夜 于 2012-7-27 10:23 编辑 ]
 
 
 

回复

5310

帖子

453

TA的资源

五彩晶圆(高级)

8
 
有使用TMP006的朋友可以交流交流!如何使它测量温度准确些呀!

[ 本帖最后由 蓝雨夜 于 2012-7-27 23:54 编辑 ]
 
 
 

回复

12

帖子

0

TA的资源

一粒金砂(中级)

9
 

你好,我也在调试这个TMP006有问题请教!

我今天调试这个芯片的时候发现我发送器件地址的时候TMP006有应答,但是再发送寄存器地址的时候就没有应答了,读出的数据都是FF。想请教一下,您是怎么做的,我很急,希望您能帮我一下!

点评

//写配置寄存器 confg= 0x8000; TxData[0]=(unsigned char)(confg>>8); //MSB TxData[1]=(unsigned char)confg; //LSB  详情 回复 发表于 2012-9-6 08:25
 
 
 

回复

5276

帖子

5

TA的资源

裸片初长成(中级)

10
 
程序接口都能知道了,没看文档呀?

小板子自己做的?我要是有这个器件,就做小一点,装在一个笔状的外壳里,这样是不是好在不同的环境位置测试?

[ 本帖最后由 wangfuchong 于 2012-9-6 06:33 编辑 ]

点评

看了,没看懂,现在读出来的都是0x7ff。头大啊!  详情 回复 发表于 2012-9-6 15:28
 
个人签名没工作,没女人老婆,没宽带 ,  没钱
 
 

回复

5310

帖子

453

TA的资源

五彩晶圆(高级)

11
 

回复 9楼 孤鹜454 的帖子

//写配置寄存器
        
        confg=                0x8000;
        TxData[0]=(unsigned char)(confg>>8);        //MSB
        TxData[1]=(unsigned char)confg;                        //LSB        
        Write_TMP006(CONF_REG,&TxData[0]);
        
         
        //读配置寄存器
        Read_TMP006(CONF_REG,&RxData[0]);
         
        
        //制造商ID寄存器        5449h
        Read_TMP006(Manufacturer_ID_REG,&RxData[0]);
        
        //写配置寄存器
        //MSB
        confg=                TMP006_MOD        |//传感器和环境的连续转换
                                TMP006_CONVERSION_RATE_0_25        |
                                TMP006_DRDY_D;        //DRDY禁用
        TxData[0]=(unsigned char)(confg>>8);
        //LSB                        
        TxData[1]=(unsigned char)confg;               
        Write_TMP006(CONF_REG,&TxData[0]);
        
        //读配置寄存器
        Read_TMP006(CONF_REG,&RxData[0]);
        
        //制造商ID寄存器        5449h
        Read_TMP006(Manufacturer_ID_REG,&RxData[0]);
 
 
 

回复

5310

帖子

453

TA的资源

五彩晶圆(高级)

12
 
先复位下看呢!

点评

读制造商ID也要先复位吗?  详情 回复 发表于 2012-9-6 20:55
 
 
 

回复

12

帖子

0

TA的资源

一粒金砂(中级)

13
 

回复 10楼 wangfuchong 的帖子

看了,没看懂,现在读出来的都是0x7ff。头大啊!
 
 
 

回复

12

帖子

0

TA的资源

一粒金砂(中级)

14
 

回复 12楼 蓝雨夜 的帖子

读制造商ID也要先复位吗?

点评

我就上点后,初始化时,程序对它复位下,然后在进行读写的  详情 回复 发表于 2012-9-6 21:21
 
 
 

回复

5310

帖子

453

TA的资源

五彩晶圆(高级)

15
 

回复 14楼 孤鹜454 的帖子

我就上点后,初始化时,程序对它复位下,然后在进行读写的

点评

大哥,谢谢你的帮助,我现在已经能够读出TMP006里面的温度了,但是我有个问题是,单片机怎么计算出物体温度呢?我发现读出来的Vobj转换成电压的时候已经变成0了, vObjcorr = ((long double)(v0bj)) * .0000001562  详情 回复 发表于 2012-9-9 20:45
我上电后,在配置里面直接写了0x8000,复位,然后按照手册上的时序写入地址和指针,都成功,但是到最后读出的数据都是0xFF, SCL_out; SDA_out; SCL_H; SDA_H; __delay_cycles(50)  详情 回复 发表于 2012-9-7 08:34
 
 
 

回复

12

帖子

0

TA的资源

一粒金砂(中级)

16
 

回复 15楼 蓝雨夜 的帖子

我上电后,在配置里面直接写了0x8000,复位,然后按照手册上的时序写入地址和指针,都成功,但是到最后读出的数据都是0xFF,
SCL_out;
        SDA_out;
        SCL_H;
        
        SDA_H;
        __delay_cycles(50);
        SDA_L;
        __delay_cycles(50);
        SCL_L;
        __delay_cycles(50);
        
        uchar wdata[2]={0x80,0xfe,};
        for(int n=0;n<2;n++)
        {
        for(uint ii = 8;ii > 0;ii--)
        {
          if(wdata[n] & 0x80)SDA_H; else SDA_L;
        __delay_cycles(20);
        SCL_H;
        __delay_cycles(50);
        SCL_L;                               
        wdata[n] <<= 1;
        }
       //检测ACK
        __delay_cycles(50);
        SCL_H;
       
        SDA_in;
        __delay_cycles(50);
        while(0 != SDA_val);
        __delay_cycles(50);
        SCL_L;
        SDA_out;
        }
        //上面有效!第二次开始信号
        
         SCL_out;
        SDA_out;
        SCL_H;
        
        SDA_H;
        __delay_cycles(50);
        SDA_L;
        __delay_cycles(50);
        SCL_L;
        __delay_cycles(50);
        
        uchar wdata1=0x81;
      
        for(uint ii = 8;ii > 0;ii--)
        {
          if(wdata1 & 0x80)SDA_H; else SDA_L;
        __delay_cycles(20);
        SCL_H;
        __delay_cycles(50);
        SCL_L;                               
        wdata1 <<= 1;
        }
       //检测ACK
        __delay_cycles(50);
        SCL_H;
       
        SDA_in;
        __delay_cycles(50);
        while(0 != SDA_val);
        __delay_cycles(50);
        SCL_L;
        SDA_out;
        SDA_L;
        
        //以上是发送地址,下面是接收数据
        
        uchar  rdata = 0x00;
      //  uchar flag;
    uchar iii;
    SCL_out;
        for(iii = 0;iii < 8;iii++)
        {
               
                SCL_H;
                SDA_in;
                __delay_cycles(50);
                rdata<<=1;
                if(SDA_val) rdata|=0x01;
               
               
        
       // __delay_cycles(20);
                SCL_L;
                __delay_cycles(50);
        }
SDA_out;
这是我的一个读TMP006的代码。麻烦您帮我看看有问题吗?

点评

我是直接用到了一份“MSP430_SWI2C_Master.c”库文件里MSP430的IO模拟的I2C函数 你把I2C的速率加慢试过吗?  详情 回复 发表于 2012-9-7 08:56
 
 
 

回复

5310

帖子

453

TA的资源

五彩晶圆(高级)

17
 

回复 16楼 孤鹜454 的帖子

我是直接用到了一份“MSP430_SWI2C_Master.c”库文件里MSP430的IO模拟的I2C函数

你把I2C的速率加慢试过吗?

点评

已经减的很低了,你能不能把你的那个MSP430_SWI2C_Master.c发一份给我,我没找到这个库文件啊!或这麻烦你告诉我到哪里找  详情 回复 发表于 2012-9-8 19:03
 
 
 

回复

12

帖子

0

TA的资源

一粒金砂(中级)

18
 

回复 17楼 蓝雨夜 的帖子

已经减的很低了,你能不能把你的那个MSP430_SWI2C_Master.c发一份给我,我没找到这个库文件啊!或这麻烦你告诉我到哪里找

点评

好的! [ 本帖最后由 蓝雨夜 于 2012-9-8 23:16 编辑 ]  详情 回复 发表于 2012-9-8 23:14
 
 
 

回复

5310

帖子

453

TA的资源

五彩晶圆(高级)

19
 

回复 18楼 孤鹜454 的帖子

好的!

[ 本帖最后由 蓝雨夜 于 2012-9-8 23:16 编辑 ]

MSP430_SWI2C_Master.c

7.08 KB, 下载次数: 95

MSP430_SWI2C_Master.h

2.81 KB, 下载次数: 91

点评

大哥,我用那个函数,在我板子上跑,MCU的引脚更本没有输出,求教会是什么问题  详情 回复 发表于 2012-9-9 13:28
谢谢!请教您一个弱弱的问题,这个lib是不是所有的msp430都可以使用啊?例如我的msp430F415  详情 回复 发表于 2012-9-9 12:37
 
 
 

回复

12

帖子

0

TA的资源

一粒金砂(中级)

20
 

回复 19楼 蓝雨夜 的帖子

谢谢!请教您一个弱弱的问题,这个lib是不是所有的msp430都可以使用啊?例如我的msp430F415

点评

恩,修改下H文件就可以了!  详情 回复 发表于 2012-9-9 21:16
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表