OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 19840|回复: 19

SHT30 读温湿度失败

[复制链接]

9

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
97
金钱
97
注册时间
2011-11-12
在线时间
24 小时
发表于 2016-12-29 13:10:07 | 显示全部楼层 |阅读模式
10金钱
手头有个SHT30的传感器,I2C读写,有应答信号。读温湿度一直是0xff. 看信号是在发读命令后收不到应答信号。
请高手帮忙看看。

附件是SHT I2C工程。主程序中添加:

SHT3X_SetPeriodicMeasurement();
    for(;;)
    {
        SHX3X_ReadResults(CMD_FETCH_DATA,Tdata);
        CyDelay(1);
    }

Borad_Project.cydsn.zip

1.88 KB, 下载次数: 921

最佳答案

查看完整内容[请看2#楼]

无意总解决了。。。。 在发度数据的命令后,要加延迟等待从机给出应答。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

9

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
97
金钱
97
注册时间
2011-11-12
在线时间
24 小时
 楼主| 发表于 2016-12-29 13:10:08 | 显示全部楼层
无意总解决了。。。。
在发度数据的命令后,要加延迟等待从机给出应答。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2017-1-2 21:55:56 | 显示全部楼层
帮顶
回复

使用道具 举报

23

主题

73

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
283
金钱
283
注册时间
2013-8-27
在线时间
37 小时
发表于 2017-3-17 17:44:24 | 显示全部楼层
大侠 你这个调试通过了,你贴出来的直接能套用么。
回复

使用道具 举报

9

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
97
金钱
97
注册时间
2011-11-12
在线时间
24 小时
 楼主| 发表于 2017-5-25 20:58:35 | 显示全部楼层
kevin9101 发表于 2017-3-17 17:44
大侠 你这个调试通过了,你贴出来的直接能套用么。

uint8 i2c_waitAck(_i2c i2c) 函数中,等待从机回应ack的时间要长一些,如下代码:
uint8 i2c_waitAck(_i2c i2c)
{
    uint8 t = 100;
   
    i2c.SCL_L();
    i2c_delay();
    i2c.SDA_H();
    i2c_delay();
    i2c.SCL_H();
    i2c_delay();   
    while( i2c.SDA_read() )
    {
        t --;
        if(t==0)
        {
           i2c.SCL_L();
            return 1;
        }
        i2c_delay();
    }

    i2c.SCL_L();
    i2c_delay();
    return 0;
}

别的都可以用。
回复

使用道具 举报

23

主题

73

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
283
金钱
283
注册时间
2013-8-27
在线时间
37 小时
发表于 2017-5-26 18:01:50 | 显示全部楼层
超级小白1111 发表于 2017-5-25 20:58
uint8 i2c_waitAck(_i2c i2c) 函数中,等待从机回应ack的时间要长一些,如下代码:
uint8 i2c_waitAck(_ ...

先谢谢楼主的回复,现在基本上你的代码都引用了,
我这边用示波器观察 ACK一直没有应答,
SDA 引脚没有被拉低。。 while( SDA_read )一直没有被拉低,恼火,我
上 个波形,你帮看看,
会不会是硬件方面的问题,


ACK

ACK
回复

使用道具 举报

9

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
97
金钱
97
注册时间
2011-11-12
在线时间
24 小时
 楼主| 发表于 2017-5-26 20:24:56 | 显示全部楼层
kevin9101 发表于 2017-5-26 18:01
先谢谢楼主的回复,现在基本上你的代码都引用了,
我这边用示波器观察 ACK一直没有应答,
SDA 引脚没有 ...

我看你等待 从机回ACK的时候时间好短,如果没有足够长的时间就拉低CLK,后面SDA就一直为高,读的值就是0XFF。
void i2c_delay(void) 我是延迟2us,附件里贴的太短。你把时间放长试试。 另外检查下你读值的命令。
回复

使用道具 举报

23

主题

73

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
283
金钱
283
注册时间
2013-8-27
在线时间
37 小时
发表于 2017-5-27 09:45:31 | 显示全部楼层
超级小白1111 发表于 2017-5-26 20:24
我看你等待 从机回ACK的时候时间好短,如果没有足够长的时间就拉低CLK,后面SDA就一直为高,读的值就是0XF ...

我也醉了,
好奇怪,我把时间加长了,还是等不到被拉低,

2222.png
回复

使用道具 举报

9

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
97
金钱
97
注册时间
2011-11-12
在线时间
24 小时
 楼主| 发表于 2017-5-27 10:29:44 | 显示全部楼层
kevin9101 发表于 2017-5-27 09:45
我也醉了,
好奇怪,我把时间加长了,还是等不到被拉低,

你看下 读器件ID或者状态试试呢?如果读不到,那就是I2C问题。附件是是我更新的 可以用的,最后实在不行换个试试。
回复

使用道具 举报

9

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
97
金钱
97
注册时间
2011-11-12
在线时间
24 小时
 楼主| 发表于 2017-5-27 10:34:18 | 显示全部楼层
超级小白1111 发表于 2017-5-27 10:29
你看下 读器件ID或者状态试试呢?如果读不到,那就是I2C问题。附件是是我更新的 可以用的,最后实在不行 ...

附件贴不了了,你给个邮箱我发给你。
回复

使用道具 举报

23

主题

73

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
283
金钱
283
注册时间
2013-8-27
在线时间
37 小时
发表于 2017-5-27 11:01:55 | 显示全部楼层
270348753@qq.com 先谢谢 兄弟了,
回复

使用道具 举报

23

主题

73

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
283
金钱
283
注册时间
2013-8-27
在线时间
37 小时
发表于 2017-5-27 11:02:23 | 显示全部楼层
超级小白1111 发表于 2017-5-27 10:34
附件贴不了了,你给个邮箱我发给你。


270348753@qq.com 先谢谢了,兄弟
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
4
金钱
4
注册时间
2017-6-16
在线时间
1 小时
发表于 2017-6-16 20:24:59 | 显示全部楼层
我最近也在调这个,能发给我借鉴一下吗,谢谢!!704349186@qq.com
回复

使用道具 举报

9

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
97
金钱
97
注册时间
2011-11-12
在线时间
24 小时
 楼主| 发表于 2017-6-18 22:00:54 | 显示全部楼层
今晚的风很凉 发表于 2017-6-16 20:24
我最近也在调这个,能发给我借鉴一下吗,谢谢!!

附件中。

I2C_simulate.cydsn.zip

3.13 KB, 下载次数: 1064

回复

使用道具 举报

29

主题

132

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
313
金钱
313
注册时间
2017-12-12
在线时间
26 小时
发表于 2018-8-27 17:26:41 | 显示全部楼层
有完整代码吗?
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
4
金钱
4
注册时间
2020-3-29
在线时间
1 小时
发表于 2020-3-30 13:49:53 | 显示全部楼层
kevin9101 发表于 2017-5-27 09:45
我也醉了,
好奇怪,我把时间加长了,还是等不到被拉低,

您好 您最终是怎么解决的还记得吗
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2019-4-28
在线时间
13 小时
发表于 2020-4-11 14:34:45 | 显示全部楼层
糊糊涂涂 发表于 2020-3-30 13:49
您好 您最终是怎么解决的还记得吗

//正确赋值,
for(i=0;i<len-1;i++)
    {
         data= IIC2_Read_Byte(1); //发送ACK
    }
    data[i++]= IIC2_Read_Byte(0);//发送NACK

//错误赋值,会导致只有第一个字节有数据正确,其他数据是0xFF
for(i=0;i<len-1;i++)
{
    //第1次进入从机返回一次正确数据,发送NACK,
    //第2-len-1次进入从机不返回数据,SDA线被拉高,读出数据是0xFF
    data= IIC2_Read_Byte(0);
}
//从机不返回数据,SDA线被拉高,读出数据是0xFF
data[i++]= IIC2_Read_Byte(1);  //发送ACK,SDA一直被拉高,所以
回复

使用道具 举报

0

主题

3

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2020-12-9
在线时间
8 小时
发表于 2020-12-10 15:22:34 | 显示全部楼层
我温度能读出来,湿度一直是0xff
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
5
金钱
5
注册时间
2021-3-18
在线时间
0 小时
发表于 2021-3-18 17:53:29 | 显示全部楼层
我也遇到了这个问题,折腾了两天,结果是SHT30没有做初始化。导致一直收不到ack,读出来的数据全是0xFF
回复

使用道具 举报

1

主题

2

帖子

0

精华

新手入门

积分
15
金钱
15
注册时间
2022-10-17
在线时间
3 小时
发表于 2023-2-14 11:38:05 | 显示全部楼层
1721521125 发表于 2020-12-10 15:22
我温度能读出来,湿度一直是0xff

我也遇到这个问题,请问你解决了吗
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-24 17:01

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表