TI小封装温湿度传感器HDC2010(附代码)

1、总体特性

  • 湿度范围0%-100%,误差2%;温度范围-40℃-85℃,误差0.2℃
  • 睡眠功耗50nA
  • 平均功耗(1s采样1次):仅测量湿度,11位输出,300nA;测量温度和湿度,550nA
  • 供电范围1.62V-3.6V
  • 采样速率:5Hz、2Hz、1Hz、0.2Hz、0.1Hz、1/60Hz、1/120Hz可设置
  • 湿度输出可配置为9bit、11bit、14bit;温度输出可配置为11bit、14bit
  • I2C接口

2、引脚以及封装

DSBGA (6-bump)    1.5 mm x 1.5 mm x 0.675 mm

I2C地址,根据设计可选,ADDR接到地为0x40,接VCC为0x41。

3、设备工作模式

睡眠模式和测量模式

上电后,设备处于睡眠模式,在这个模式下设置设备的转换时间、触发测量、设置ODR并读取测量值等。一旦接收到触发测量命令后进入测量模式,在测量模式下,HDC2010获取配置的测量值并设置DRDY/INT引脚。完成测量后进入睡眠模式。

4、寄存器列表

5、寄存器以及设置参数定义

#define   HDC2010_TEMPERATURE_LOW	          0x00        //0
#define   HDC2010_TEMPERATURE_HIGH	          0x01
#define   HDC2010_HUMIDITY_LOW                    0x02
#define   HDC2010_HUMIDITY_HIGH                   0x03

#define   HDC2010_INTERRUPT_DRDY                  0x04
            //bit[7]:DataReady bit status
       #define  DRDY_STATUS_NOT_READAY      0x00
       #define  DRDY_STATUS_READAY          0x80  
            //bit[6]:Temperature threshold HIGH Interrupt status
       #define  HH_STATUS_NO_INT            0x00
       #define  HH_STATUS_INT               0x40
            //bit[5]:Temperature threshold LOW Interrupt status
       #define  HL_STATUS_NO_INT            0x00
       #define  HL_STATUS_INT               0x20
            //bit[4]:Humidity threshold HIGH Interrupt status
       #define  TH_STATUS_NO_INT            0x00
       #define  TH_STATUS_INT               0x10
            //bit[3]:Humidity threshold LOW Interrupt status
       #define  TL_STATUS_NO_INT            0x00
       #define  TL_STATUS_INT               0x08

#define   HDC2010_TEMPERATURE_MAX                 0x05
#define   HDC2010_HUMIDITY_MAX                    0x06

#define   HDC2010_INTERRUPT_MASK                  0x07
            //bit[7]:DataReady Interrupt mask
       #define  DRDY_MASK_ENABLE            0x80 
       #define  DRDY_MASK_DISABLE           0x00
            //bit[6]:Temperature threshold HIGH Interrupt mask
       #define  TH_MASK_ENABLE              0x00
       #define  TH_MASK_DISABLE             0x40
            //bit[5]:Temperature threshold LOW Interrupt mask
       #define  TL_MASK_ENABLE              0x00
       #define  TL_MASK_DISABLE             0x20
            //bit[4]:Humidity threshold HIGH Interrupt mask
       #define  HH_MASK_ENABLE              0x00
       #define  HH_MASK_DISABLE             0x10
            //bit[3]:Humidity threshold HIGH Interrupt mask
       #define  HL_MASK_ENABLE              0x00
       #define  HL_MASK_DISABLE             0x08

#define   HDC2010_TEMP_OFFSET_ADJUST              0x08
#define   HDC2010_HUM_OFFSET_ADJUST               0x09
#define   HDC2010_TEMP_THR_L                      0x0A   //0xFF
#define   HDC2010_TEMP_THR_H                      0x0B
#define   HDC2010_RH_THR_L                        0x0C   //0xFF
#define   HDC2010_RH_THR_H                        0x0D

#define   HDC2010_RESET_DRDY_INT_CONF             0x0E
            //bit[7]:
       #define SOFT_RES_NORMAL             0x00
       #define SOFT_RES_SOFT               0x80
            //bit[6:4]:Output Data Rate
       #define ODR_NO                      0x00         //000
       #define ODR_1_120HZ                 0x10         //001
       #define ODR_1_60HZ                  0x20         //010
       #define ODR_0_1HZ                   0x30         //011
       #define ODR_0_2HZ                   0x40         //100
       #define ODR_1HZ                     0x50         //101
       #define ODR_2HZ                     0x60         //110
       #define ODR_5HZ                     0x70         //111
            //bit[3]:
       #define HEAT_EN_ON                  0x08
       #define HEAT_EN_OFF                 0x00
            //bit[2]:DRDY/INT_EN pin configuration
       #define DRDY_OR_INT_EN_ENABLE       0x04
       #define DRDY_OR_INT_EN_HIGH_Z       0x00
            //bit[1]:Interrupt polarity
       #define INT_POL_LOW                 0x00
       #define INT_POL_HIGH                0x02
            //bit[0]:Interrupt mode
       #define INT_MODE_LEVEL              0x00
       #define INT_MODE_COMPARAM           0x01

#define   HDC2010_MEASUREMENT_CONF                0x0F
            //bit[7:6]:Temperature resolution
       #define  TEM_RES_14BIT              0x00           //00
       #define  TEM_RES_11BIT              0x40           //01 
       #define  TEM_RES_9BIT               0x80           //10
            //bit[5:4]:Humidity resolution
       #define  HUM_RES_14BIT              0x00           //00
       #define  HUM_RES_11BIT              0x10           //01 
       #define  HUM_RES_9BIT               0x20           //10
          //bit[3]:res
          //bit[2:1]:Measurement configuration
       #define  MEAS_CONF_TEM_HUM       0x00              //00
       #define  MEAS_CONF_TEM_ONLY      0x02              //01
       #define  MEAS_CONF_HUM_ONLY      0x04              //10
          //bit[0]:Measurement trigger
       #define  MEAS_TRIG_START         0x01
       #define  MEAS_TRIG_NO_ACTION     0x00

#define   HDC2010_MANUFACTURER_ID_LOW             0xFC    //0x49
#define   HDC2010_MANUFACTURER_ID_HIGH            0xFD    //0x54
#define   HDC2010_DEVICE_ID_LOW                   0xFE    //0xD0
#define   HDC2010_DEVICE_ID_HIGH                  0xFF    //0x07

6、读取ID

分厂商ID和设备ID,都是固化在芯片里面的,均是16bit,其中厂商ID是0x5449,设备ID是0x07D0,随便读取一个就行,可以判断I2C通信的异常,也可以用于检测芯片是否存在。

bool CheckHDC2010Chip()
{
    Uint16_t device_id=0;    
					
    device_id = HDC2010_ReadRegU16(HDC2010_DEVICE_ID_LOW);

    if(device_id==0x07D0)
    {
	return true;
    }
    else	
    {
	return false;
    }
}

7、设置芯片的工作参数

void HDC2010Init(void)
{
   HDC2010_WriteRegU8(HDC2010_RESET_DRDY_INT_CONF,SOFT_RES_NORMAL|ODR_1_120HZ|HEAT_EN_OFF|DRDY_OR_INT_EN_HIGH_Z);  
//正常复位、1/120输出速率、DRDY/INT_EN 引脚输出为高阻,不中断
   HDC2010_WriteRegU8(HDC2010_INTERRUPT_MASK,DRDY_MASK_DISABLE|TH_MASK_DISABLE|TL_MASK_DISABLE|HH_MASK_DISABLE|HL_MASK_DISABLE);  
//中断掩码寄存器设置,所有的中断关

   HDC2010_WriteRegU8(HDC2010_MEASUREMENT_CONF,TEM_RES_14BIT|HUM_RES_14BIT|MEAS_CONF_TEM_HUM|MEAS_TRIG_START);  
//测量寄存器设置,温度14bit、湿度14bit、温度湿度均使用、并且启动测量
}

 8、读取数据

void HDC2010Read(void)
{
  uint16 temperture,humidity;   

while(HDC2010_ReadRegU8(HDC2010_INTERRUPT_DRDY)&DRDY_STATUS_READAY!=DRDY_STATUS_READAY);
//等待测量完成
  temperture=HDC2010_ReadRegU16(HDC2010_TEMPERATURE_LOW);
  humidity=HDC2010_ReadRegU16(HDC2010_HUMIDITY_LOW);
//temperture、humidity读出来是16bit的数字值,需要转化为实际值
}

注:通过以上发现HDC2010读寄存器的时候,可以自动移动到下一个地址。

 

 

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

freemote

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值