一、实验目的
学习I2C总线通信协议,完成基于I2C硬件协议的AHT20温湿度传感器的数据采集,并将采集的温度-湿度值通过串口输出。具体任务:
1)解释什么是“软件I2C”和“硬件I2C”?
2)阅读AHT20数据手册,编程实现:每隔2秒钟采集一次温湿度数据,并通过串口发送到上位机。
二、软件I2C和硬件I2C
1.软件I2C
所谓硬件I2C对应芯片上的I2C外设,有相应I2C驱动电路bai,其所使用的I2C管脚也是专用的;
2.硬件I2C
一般是用GPIO管脚,用软件控制管脚状态以模拟I2C通信波形。
3.两者对比
硬件I2C的效率要远高于软件的,而软件I2C由于不受管脚限制,接口比较灵活。
模拟I2C 是通过GPIO,软件模拟寄存器的工作方式,而硬件(固件)I2C是直接调用内部寄存器进行配置。如果要从具体硬件上来看,可以去看下芯片手册。因为固件I2C的端口是固定的,所以会有所区别。
三、AHT20
AHT20简介
AHT20是国内奥松生成的I2C接口的MEMS温湿度传感器,ADC位数为20Bit,具有体积小、精度高、成本低等优点。
由于AHT10/15/20 具有国产化、体积小、精度高、成本低等特点,可以替代
DHT11/DHT12/AM2320/SHT20/SHT30,单芯片价格在¥2~3,体积小巧很轻松嵌入到产品上
以下是AHT20的应用电路
四、实现代码
ATH20温湿度代码
/**************************************************
读取AHT20的状态寄存器
**************************************************/
uint8_t AHT20_Read_Status(void)
{
uint8_t Byte_first,flag;
IIC_Start();
IIC_Send_Byte(0x71);
flag=IIC_Wait_Ack();
Byte_first = IIC_Read_Byte(flag);
IIC_NAck();
IIC_Stop();
return Byte_first;
}
/**************************************************
向AHT20发送AC命令
**************************************************/
void AHT20_SendAC(void)
{
IIC_Start();
IIC_Send_Byte(0x70); //启动传输后发送的01110000
IIC_Wait_Ack();
IIC_Send_Byte(0xac);//0xAC采集命令 名称参数有两个字节,第一个为0x33,第二个字节为0x00
IIC_Wait_Ack();
IIC_Send_Byte(0x33);
IIC_Wait_Ack();
IIC_Send_Byte(0x00);
IIC_Wait_Ack()