搜索
bottom↓
回复: 17

Proteus 7.1温湿度传感器SHT1x CRC8校验码没有翻转

[复制链接]

出0入0汤圆

发表于 2013-4-13 11:11:37 | 显示全部楼层 |阅读模式
看来这是Proteus的一个疏忽,

读状态寄存器 0x07, 0x00, 0xae 而时间硬件校验和为0x75
读温度 0x03, 0x17, 0xb2, 0xd7 而时间硬件校验和为0xeb
读湿度 0x05, 0x08, 0x79, 0x28 而时间硬件校验和为0x14
这里命令是参与CRC校验的。
更可气的是手册上的时序图CRC校验码竟然是错的,难道不是一个连续完整的时序,真让人无语!

实际按照这个序列 0x05, 0x04, 0x31, CRC =  0x18

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

发表于 2013-4-13 12:23:10 | 显示全部楼层
模型有问题

出0入0汤圆

发表于 2013-4-13 12:23:30 | 显示全部楼层
仿真扯淡

出0入0汤圆

发表于 2013-4-13 13:32:45 | 显示全部楼层
哈哈,“Proteus的一个疏忽”,“手册上的时序图CRC校验码竟然是错的”,还有楼主本人,三方当事人。
谁对谁错,还难说了。

出0入0汤圆

 楼主| 发表于 2013-4-13 17:03:28 | 显示全部楼层
JQ_Lin 发表于 2013-4-13 13:32
哈哈,“Proteus的一个疏忽”,“手册上的时序图CRC校验码竟然是错的”,还有楼主本人,三方当事人。
谁对 ...

这个我问过技术支持,但他们也不提供CRC校验程序,给了一个测试代码,但也不承诺一定好使;我测试的数据是和实际硬件和Proteus进行比对的!
估计很少人弄他的CRC校验,获取温湿度就完事了。

出0入0汤圆

 楼主| 发表于 2013-4-13 17:06:25 | 显示全部楼层
本帖最后由 wangqh1983 于 2013-4-13 18:45 编辑
HadesHe 发表于 2013-4-13 12:23
仿真扯淡


既然扯淡,那为什么还关注这个版块?
就我而言,我在Proteus中收获很多!包括单片机的入门,学习,开发!

出0入0汤圆

发表于 2013-4-13 19:34:43 | 显示全部楼层
wangqh1983 发表于 2013-4-13 17:06
既然扯淡,那为什么还关注这个版块?
就我而言,我在Proteus中收获很多!包括单片机的入门,学习,开发! ...

哦,你又深入一步了。赞一个!
在仿真版块里玩扯淡的实在不少。

出0入0汤圆

 楼主| 发表于 2013-9-4 13:16:31 | 显示全部楼层
鉴于有坛友问道这个问题了,我现在公布源代码!以为没人关注就没上传.

#define MSB_MASK_8        0x80
#define LIMIT_MASK_8    0xff
#define POLYNOMIAL_8    0x31    //P(x)=x^8+x^5+x^4+1 = 00110001

uint8_t SHT1x_CheckCrc(uint8_t *buf, uint8_t len)
{
    uint8_t crc = 0;
    uint8_t i, j = 0;
    while (len-- != 0)
    {
        for (i=0x80; i!=0; i>>=1)
        {
            if ((crc & MSB_MASK_8) != 0)
            {
                crc <<= 1;
                crc &= LIMIT_MASK_8;
                crc ^= POLYNOMIAL_8;
            }
            else
                crc <<= 1;
            if ((buf[j] & i) != 0)
                crc ^= POLYNOMIAL_8;
        }
        j++;
    }
    return crc;
}

出0入0汤圆

发表于 2013-9-4 22:06:47 | 显示全部楼层
wangqh1983 发表于 2013-9-4 13:16
鉴于有坛友问道这个问题了,我现在公布源代码!以为没人关注就没上传.

#define MSB_MASK_8        0x80

十分感谢,是我请教LZ的。明天回公司再测试一下。
现在都是没有进行CRC校验 的,虽然没发现问题,但心里没底。

出0入0汤圆

发表于 2013-9-5 08:47:30 | 显示全部楼层
uchar  readSHT1xData()
{
   
        uchar crcerro=0;
        sendbuf[0]=checkdata[0] =s_read_byte(ACK);    //read the first byte (MSB)  
        sendbuf[1]=checkdata[1]=s_read_byte(ACK);    //read the second byte (LSB)  
        sendbuf[2]=crcsum =s_read_byte(noACK);  //read checksum        

        sendbuf[3]=crcerro=SHT1x_CheckCrc(checkdata,2);
        sendUart(4);
        return crcerro;       
}
试了一下,但得出的结果还是不一样,下面几组数据,前两个是温湿度数据,第三个是硬件传过来的CRC8,第四个是用你的函数算出来的CRC8,两个还是不一样的。

19 F8 3A 96
09 02 73 A1
19 F9 B6 A7
09 02 73 A1
19 F9 B6 A7
09 01 B9 F2
19 FA 7C F4
09 01 B9 F2
19 FA 7C F4
09 01 B9 F2

出0入0汤圆

 楼主| 发表于 2013-9-5 13:18:53 | 显示全部楼层
我手头上暂时没有硬件,先用软件给你模拟一下吧,是Proteus的,这个软件我测试过,当然是没问题的.唯一的区别在楼主位已说明!

这张图片你可以看出读出的数据,校验所有数据返回结果应该是0

此时你可以看到校验码是相同的,再执行一次就为0了,你可以看到长度还有1.

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2013-9-5 13:29:21 | 显示全部楼层
本帖最后由 wangqh1983 于 2013-9-6 09:52 编辑
hellosky 发表于 2013-9-5 08:47
uchar  readSHT1xData()
{
   


祝你好运! 别忘了把测试结果告诉大家, 证明我说的Proteus的问题与现实的硬件CRC码没有翻转!

出0入0汤圆

发表于 2013-10-10 13:55:51 | 显示全部楼层
本帖最后由 Q-Phil 于 2013-10-10 14:00 编辑

SHT1X的CRC我已经调试好了。真佩服各位会用仿真,但工具有错可就害人了。我是用AVR-MEGA168写的代码。
1) 10楼给的那机组数据有问题,看一下SHT的手册就知道,CRC校验是从指令码开始的,也就是说温度数据前再加个03,湿度数据前再加个05,计算的CRC就对了
2) SHT的CRC说明书里确实写了,程序算出的CRC必须bit0~bit7顺序反转一下,才可以去和硬件输出的CRC进行比较
依照上述2点,我的CRC校验始终是正确的。

看一下我的数据:
03 18 15 A4 25 A4    05 03 C3 6A 56 6A
03 18 14 28 14 28     05 03 C6 C5 A3 C5
03 18 13 C1 83 C1     05 03 C7 49 92 49
03 18 11 87 E1 87     05 03 C6 C5 A3 C5
03 18 12 4D B2 4D     05 03 C8 3D BC 3D
指令:03是读温度,05是读湿度
指令后接2个数据字节,之后是读到的CRC
第5个是我算出来的CRC(用查表法),第6个为计算值反转
可以看到,第4个和第6个始终相同.

但是,一旦使用SHT1x的加热功能,CRC就不对了。查遍了SENSIRION的资料,也没有线索。我要去找他们讨个说法。

出0入0汤圆

 楼主| 发表于 2013-10-10 18:42:07 | 显示全部楼层
Q-Phil 发表于 2013-10-10 13:55
SHT1X的CRC我已经调试好了。真佩服各位会用仿真,但工具有错可就害人了。我是用AVR-MEGA168写的代码。
1) 1 ...

改用SHT21系列吧,价格便宜,而且是标准的I2C接口,代理商推荐使用SHT21系列,SHT1x应该是要停产了。

出0入0汤圆

发表于 2013-10-12 20:40:35 | 显示全部楼层
本帖最后由 Q-Phil 于 2013-10-12 20:43 编辑
wangqh1983 发表于 2013-10-10 18:42
改用SHT21系列吧,价格便宜,而且是标准的I2C接口,代理商推荐使用SHT21系列,SHT1x应该是要停产了。 ...


谢谢提醒!去市场上找找看,不知什么价钱。
SHT11大约60多,SHT15大约150

不过......CRC错误的规律已经找到,可以看我在站里回复的另一个贴子,现在用起来没啥问题。

出0入0汤圆

发表于 2013-10-12 20:42:55 | 显示全部楼层
不过CRC错误的规律已经找到,可以看我在站里回复的另一个贴子,现在用起来没啥问题。

出0入0汤圆

发表于 2013-10-28 13:52:00 | 显示全部楼层
仿真就算了吧

出0入0汤圆

发表于 2013-10-28 15:29:03 | 显示全部楼层
最近用 STM32  做了这个实验,  也是  CRC校验的
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-28 20:47

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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