打印

使用PSOC I2C获取SHT20温湿度

[复制链接]
2629|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
在做一个项目时用到了一个温湿度传感器SHT20,这颗芯片有着非常高的精度0.3%,业界普遍认同它。
因为之前单片机开发用到过SHT11,所以一想原理差不多,都是基于I2C通讯,如果使用软件I2C移植就相对简单,不如利用PSOC的特性,直接使用它的I2C组件来完成。
之前没有使用过I2C的组件,所以找到了PCreator 中的SCB_I2CCommMaster的里程,其中两个收发函数:
WriteCommandPacket();
ReadStatusPacket();
我们可以再发送函数中找到:
(void) I2CM_I2CMasterWriteBuf(0x40, 0xE5, 1, \ I2CM_I2C_MODE_COMPLETE_XFER);

其中我们把第一个从设备地址修改为SHT20手册上标注的0x40,第二个参数是发送的数据,后面跟着长度,和设置模式(默认即可)

我们通过手册可以看到我们要向读取数据需要发送两个字节的数据,第一个是7位的从设备地址和1位的读写命令。当然当你调用 I2CM_I2CMasterWriteBuf这个函数时就默认先发送
第一个字节的数据,所以我们只要发送后面的11100101即0XE5。函数调用之后我们就可以准备调用接收函数进行读取数据啦
(void) I2CM_I2CMasterReadBuf(0x40, buffer, 3, \I2CM_I2C_MODE_COMPLETE_XFER);


同样的我们可以成功读取到三个字节的数据,我们只需要按照手册拿到画红线的数据即可,这个就是湿度的原始数据。然后我们带入给的公式:


对应解析的代码是:
float SHT2x_CalcRH(uint16 u16sRH)
//==============================================================================
{
    uint16 humidityRH; // variable for result
    u16sRH &= ~0x0003; // clear bits [1..0] (status bits)
    //-- calculate relative humidity [%RH] --
    humidityRH = -6.0 + 125.0/65536 * (uint16)u16sRH; // RH= -6 + 125 * SRH/2^16
    return humidityRH;
}


这样我们运行程序可以从调试模式中看到数据:

转化为10进制就是32,那么相对湿度就是32%。
测温度的话只需要把发送的命令改为测试温度的即可0xE3,然后用如下程序进行解析:
float SHT2x_CalcTemperatureC(uint16 u16sT)
//==============================================================================
{
    float temperatureC; // variable for result
    u16sT &= ~0x0003; // clear bits [1..0] (status bits)
    //-- calculate temperature [°C] --
    temperatureC= -46.85 + 175.72/65536 *(float)u16sT; //T= -46.85 + 175.72 * ST/2^16
    return temperatureC;
}



可以看到数据是27.5714531,那么温度可以表示为27.57度。
最后附上指令表:




沙发
afctc| | 2017-4-8 17:19 | 只看该作者
您好,我在论坛上看到您发过一篇PSOC4读取sht20温湿度信号的帖子,有些地方不是很清楚,请问可否把源程序发我一下,谢谢!。我的邮箱是645226568@qq.com

使用特权

评论回复
板凳
伍戈123| | 2018-12-12 14:12 | 只看该作者
读出来的结果都是FFFF,不知道是时序注意些什么?示波器抓看波形还可以

使用特权

评论回复
地板
xiaoqizi| | 2018-12-14 12:10 | 只看该作者
这个传感器的实时性如何

使用特权

评论回复
5
木木guainv| | 2018-12-14 12:12 | 只看该作者
精度很高啊

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

20

主题

57

帖子

1

粉丝