1712|1

26

帖子

1

TA的资源

一粒金砂(中级)

楼主
 

【平头哥RVB2601创意应用开发】+AHT10温湿度传感器 [复制链接]

 

一、概述

AHT10 是一款高精度,完全校准,贴片封装的温湿度传感器。AHT10 通信方式采用标准 IIC 通信方式,支持较宽的工作电源电压范围,温湿度传感器均在高精度的恒温恒湿腔室中进行出厂校准,直接输出经温度补偿后的湿度、温度等信息,用户无需要对湿度进行温度补偿,便可得到准确的温湿度信息。
AHT10特点如下:

供电范围:1.8-3.6V

湿度测量范围:0~99.9%RH

湿度测量精度:±3%RH

温度测量范围:-40~+85℃

温度测量精度:±0.5℃

数字输出,IIC接口

二、硬件连接

由AHT10产品手册可知,AHT10与设备通信时一般作为从机使用,如图所示

此时,RVB2601作为主机使用,需要使用RVB2601上的IIC接口与其通信。通过RVB2601原理图可知,板载的IIC接口为PA8和PA9,分别为SCL和SDA,默认与板载ADC和DAC芯片连接,将跳线帽取下用杜邦线将其与AHT10连接,如图所示。

三、驱动代码

通过AHT10产品手册可得AHT10的地址为0x70,且传感器读取流程如图所示

AHT10初始化函数如下

void AHT10_Init(void)
{
	static csi_iic iic_struct;
	csi_pin_set_mux(PA8,PA8_IIC0_SCL);
	csi_pin_set_mux(PA9,PA9_IIC0_SDA);
	
	csi_iic_init(&iic_struct,0);
	csi_iic_mode(&iic_struct,IIC_MODE_MASTER);
	csi_iic_addr_mode(&iic_struct,IIC_ADDRESS_7BIT);
	csi_iic_speed(&iic_struct,IIC_BUS_SPEED_STANDARD);
}

将PA8和PA9分别设置为IIC0的SCL和SDA引脚,

csi_error_t csi_iic_init(csi_iic_t *iic, uint32_t idx);用于通过设备ID初始化对应的IIC接口,

csi_error_t csi_iic_mode(csi_iic_t *iic, csi_iic_mode_t mode);用于配置IIC接口为主机模式或从机模式,

csi_error_t csi_iic_addr_mode(csi_iic_t *iic, csi_iic_addr_mode_t addr_mode);用于设置地址模式,

csi_error_t csi_iic_speed(csi_iic_t *iic, csi_iic_speed_t speed);用于设置IIC接口的传输速度。

获取具体温湿度值代码如下

u8 AHT10_ReadData(float *temperature,float *humidity)
{
	u32 ack;
	u32 SRH=0,ST=0;
	u8 databuff[6];
	//触发测量
	csi_iic_master_send(&iic_struct,AHT10_ADDRESS,AHT10_WRITE,1,1000);
	csi_iic_master_send(&iic_struct,AHT10_ADDRESS,0xac,1,1000);
	csi_iic_master_send(&iic_struct,AHT10_ADDRESS,0x33,1,1000);
	csi_iic_master_send(&iic_struct,AHT10_ADDRESS,0x00,1,80);
	csi_iic_master_send(&iic_struct,AHT10_ADDRESS,AHT10_READ,1,1000);
	
	ack=csi_iic_master_receive(&iic_struct,AHT10_ADDRESS,AHT10_READ,1,1000);
	if((ack&0x08)==0)
	{
		AHT10_Init();
	}
	if((ack&0x80)==0)
	{
		databuff[0]=csi_iic_master_receive(&iic_struct,AHT10_ADDRESS,0x01,1,10);
		databuff[1]=csi_iic_master_receive(&iic_struct,AHT10_ADDRESS,0x01,1,10);
		databuff[2]=csi_iic_master_receive(&iic_struct,AHT10_ADDRESS,0x01,1,10);
		databuff[3]=csi_iic_master_receive(&iic_struct,AHT10_ADDRESS,0x01,1,10);
		databuff[4]=csi_iic_master_receive(&iic_struct,AHT10_ADDRESS,0x00,1,10);
		SRH=(databuff[0]<<12)+(databuff[1]<<4)+(databuff[2]>>4);
		ST=((databuff[2]&0x0f)<<16)+(databuff[3]<<8)+(databuff[4]);
		*humidity=(int)(SRH*100.0/1024/1024+0.5);//
		*temperature=((int)(ST*2000.0/1024/1024+0.5))/10.0-50;
		return 0;
	}
	return 1;
}

int32_t csi_iic_master_send(csi_iic_t *iic, uint32_t devaddr, const void *data, uint32_t size, uint32_t timeout);用于主机模式下,IIC接口以同步模式发送数据,

int32_t csi_iic_master_receive(csi_iic_t *iic, uint32_t devaddr, void *data, uint32_t size, uint32_t timeout);用于主机模式下,IIC接口以同步模式进行数据接受。

通过串口打印输出结果如图所示。

正常情况下,温度在31.5℃左右,湿度在50.5RH,用手触摸AHT10后,温湿度值增加。

后续可通过OLED进行温湿度值的实时显示。

对于IIC接口的具体API用法可通过此文档查阅IIC函数说明

最新回复

目前都已经到AHT21了吧,AHT2X系列封装更小   详情 回复 发表于 2022-6-27 09:30
点赞 关注
 
 

回复
举报

145

帖子

0

TA的资源

一粒金砂(高级)

沙发
 

目前都已经到AHT21了吧,AHT2X系列封装更小

 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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