完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
一、温湿度采集传感器(HDC1080)
1.简要概述 HDC1080是一种集成温度传感器的数字湿度传感器,具有出色的测量精度和超低的功耗。其具有14位测量分辨率,相对湿度精度为±2%,温度精度为±0.2°C,工作时平均电流在0.7-1.3uA级。 传感器供电电压为2.7V至5.5V,具有较高的电压兼容性,通过单片机读取数据一般不再需要额外设置电平转换控制芯片。 图为传感器功能框图和典型应用 图为HDC1080传感器管脚图: HDC1080的管脚较为简单,为3*3mm小型器件封装,总共有6个管脚: SDA,SCL为IIC通信管脚,与单片机IIC接口相连,一般要求接上拉电阻,兼容5V和3.3V; VDD,GND为电源和地管脚,VCC可接5V或3.3V电源; NC为闲置管脚,一般悬浮或接地。 2.编程应用 HDC1080作为从设备通过IIC总线与主机通信,上电后至多15ms传感器便可进入工作状态。 读取传感器的数据需要访问HDC1080上的特定寄存器(寄存器地址为7位二进制数),将所需的寄存器地址值写入指针寄存器,寄存器字节首先发送MSB,然后是LSB。 如图为写命令时序图: 1.主机发出起始信号,发送7位从设备地址和写寄存器命令,从机接收后发出应答信号 2.主机发送8位寄存器地址,从机接收并发出应答信号 3.主机发送高八位数据,从机接收并发出应答信号 4.主机发送低八位数据,从机接收并发出应答信号,主机发出停止信号。 如图为读命令时序图: 1.主机发出起始信号,发送7位从设备地址和写寄存器命令,从机接收后发出应答信号 2.主机发送需要读取的寄存器地址,从机接收后返回应答信号 3.主机发出起始信号,发送7位从设备地址和读寄存器命令,从机接收发出应答信号 4.从机发送,主机接收高八位数据并发出应答信号 5.从机发送,主机接收低八位数据并发出应答信号,主机发出停止传输信号 如图为HDC1080寄存器地址及各寄存器作用表格,由此我们可以定义; # define HDC1080_TEMPERATURE 0x00 # define HDC1080_HUMIDITY 0x01 # define HDC1080_CONFIGURATION 0x02 # define HDC1080_MANUFACTURER_ID 0xFE # define HDC1080_DEVICE_ID 0xFF # define HDC1080_SERIAL_ID_FIRST 0xFB # define HDC1080_SERIAL_ID_MID 0xFC # define HDC1080_SERIAL_ID_LAST 0xFD 根据写寄存器时序可写: void HDC1080_WriteReg(u8 Addr,u16 Data) { unsigned char data[2]; data[0] = (uint8_t)((Data& 0xFF00) >> 8); //高八位 data[1] = (uint8_t)(Data & 0x00FF); //低八位 IIC_Start(); IIC_Send_Byte(0x80); //·地址为10000000 IIC_Wait_Ack(); //等待从机应答信号 IIC_Send_Byte(Addr); //写寄存器地址 IIC_Wait_Ack(); IIC_Send_Byte(data[0]); //发送高八位 IIC_Wait_Ack(); IIC_Send_Byte(data[1]); //发送低八位 IIC_Wait_Ack(); IIC_Stop(); //停止信号 } 根据读寄存器时序可写: u16 HDC1080_ReadReg(u8 Addr) { unsigned char data[2];; IIC_Start(); IIC_Send_Byte(0x80); //·地址为10000000 IIC_Wait_Ack(); IIC_Send_Byte(Addr); IIC_Wait_Ack(); IIC_Start(); IIC_Send_Byte(0x81); //·地址为10000001 IIC_Wait_Ack(); data[1]=IIC_Read_Byte(1); data[0]=IIC_Read_Byte(1); IIC_NAck(); IIC_Stop(); return data; } 温度和湿度寄存器为二进制格式的16位结果寄存器(2个LSB D1和D0始终为0)。采集结果始终为14位值。结果的准确性与选择的转换时间有关,计算公式如下: 其他更详尽的资料请自行参考数据手册。 |
|
|
|
只有小组成员才能发言,加入小组>>
3278 浏览 9 评论
2955 浏览 16 评论
3455 浏览 1 评论
8987 浏览 16 评论
4050 浏览 18 评论
1102浏览 3评论
570浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
568浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2301浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1857浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 00:56 , Processed in 1.010045 second(s), Total 50, Slave 40 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号