用模拟iic调试sht31,能正确读出温度,但是湿度一直都是100。
IIC_Start();
IIC_SendByte(SHT30W); //发送设备地址+写信号
while(IIC_wait_ACK()); //从机应答
IIC_SendByte(0x22); //命令高8位,0x2220,周期测量
while(IIC_wait_ACK());
IIC_SendByte(0x20); //命令低8位
while(IIC_wait_ACK());
//IIC_Stop(); //周期读取sht30数据,按照时序图,不需要发送停止命令
delay1ms(20); //此处延时必须要有,等待测量完成,才能读取数据
IIC_Start();
IIC_SendByte(SHT30W); //发送设备地址+写信号
while(IIC_wait_ACK()); //从机应答
IIC_SendByte(0xe0); //命令高8位,0xe000,准备读取数据模式
while(IIC_wait_ACK());
IIC_SendByte(0x00); //命令低8位
while(IIC_wait_ACK());
//IIC_Stop(); //周期读取sht30数据,按照时序图,不需要发送停止命令
IIC_Start();
IIC_SendByte(SHT30R); //发送设备地址+读信号
delay1ms(20);
while(IIC_wait_ACK());
BUFt[0] = IIC_ReadByte(1); //温度高
BUFt[1] = IIC_ReadByte(1); //温度低
BUFt[2] = IIC_ReadByte(1); //温度crc
BUFt[3] = IIC_ReadByte(1); //湿度高
BUFt[4] = IIC_ReadByte(1); //湿度低
BUFt[5] = IIC_ReadByte(0); //湿度crc
IIC_Stop();
temp = (BUFt[0]<<8) | BUFt[1];
humi = (BUFt[3]<<8) | BUFt[4];
tem = (175.0*(float)temp / 65535.0 - 45.0);
hum = (100.0*(float)humi / 65535.0);
delay1ms(500);
temp = 0;
humi = 0;
根据您提供的代码,SHT3x湿度传感器的读数异常可能是由以下原因之一引起的:
1.传感器故障或连接错误。
2.湿度寄存器的读取未按照规定的方式进行。
3.温度的读取正确,但湿度读取错误,可能是湿度寄存器的读取顺序错误或湿度计算公式错误。
建议您检查传感器是否正确连接,并尝试检查读取湿度寄存器的过程,以确保您的代码按照规定的方式读取湿度寄存器。另外,您也可以尝试手动计算湿度,以便进一步确定问题的根本原因。