wangqh1983 发表于 2013-4-13 11:11:37

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

看来这是Proteus的一个疏忽,

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

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

HadesHe 发表于 2013-4-13 12:23:10

模型有问题

HadesHe 发表于 2013-4-13 12:23:30

仿真扯淡

JQ_Lin 发表于 2013-4-13 13:32:45

哈哈,“Proteus的一个疏忽”,“手册上的时序图CRC校验码竟然是错的”,还有楼主本人,三方当事人。
谁对谁错,还难说了。

wangqh1983 发表于 2013-4-13 17:03:28

JQ_Lin 发表于 2013-4-13 13:32 static/image/common/back.gif
哈哈,“Proteus的一个疏忽”,“手册上的时序图CRC校验码竟然是错的”,还有楼主本人,三方当事人。
谁对 ...

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

wangqh1983 发表于 2013-4-13 17:06:25

本帖最后由 wangqh1983 于 2013-4-13 18:45 编辑

HadesHe 发表于 2013-4-13 12:23 static/image/common/back.gif
仿真扯淡

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

JQ_Lin 发表于 2013-4-13 19:34:43

wangqh1983 发表于 2013-4-13 17:06 static/image/common/back.gif
既然扯淡,那为什么还关注这个版块?
就我而言,我在Proteus中收获很多!包括单片机的入门,学习,开发! ...

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

wangqh1983 发表于 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 & i) != 0)
                crc ^= POLYNOMIAL_8;
      }
      j++;
    }
    return crc;
}

hellosky 发表于 2013-9-4 22:06:47

wangqh1983 发表于 2013-9-4 13:16 static/image/common/back.gif
鉴于有坛友问道这个问题了,我现在公布源代码!以为没人关注就没上传.

#define MSB_MASK_8      0x80


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

hellosky 发表于 2013-9-5 08:47:30

ucharreadSHT1xData()
{
   
        uchar crcerro=0;
        sendbuf=checkdata =s_read_byte(ACK);    //read the first byte (MSB)
        sendbuf=checkdata=s_read_byte(ACK);    //read the second byte (LSB)
        sendbuf=crcsum =s_read_byte(noACK);//read checksum        

      sendbuf=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

wangqh1983 发表于 2013-9-5 13:18:53

我手头上暂时没有硬件,先用软件给你模拟一下吧,是Proteus的,这个软件我测试过,当然是没问题的.唯一的区别在楼主位已说明!

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

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

wangqh1983 发表于 2013-9-5 13:29:21

本帖最后由 wangqh1983 于 2013-9-6 09:52 编辑

hellosky 发表于 2013-9-5 08:47 static/image/common/back.gif
ucharreadSHT1xData()
{
   


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

Q-Phil 发表于 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的资料,也没有线索。我要去找他们讨个说法。

wangqh1983 发表于 2013-10-10 18:42:07

Q-Phil 发表于 2013-10-10 13:55 static/image/common/back.gif
SHT1X的CRC我已经调试好了。真佩服各位会用仿真,但工具有错可就害人了。我是用AVR-MEGA168写的代码。
1) 1 ...

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

Q-Phil 发表于 2013-10-12 20:40:35

本帖最后由 Q-Phil 于 2013-10-12 20:43 编辑

wangqh1983 发表于 2013-10-10 18:42 static/image/common/back.gif
改用SHT21系列吧,价格便宜,而且是标准的I2C接口,代理商推荐使用SHT21系列,SHT1x应该是要停产了。 ...

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

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

Q-Phil 发表于 2013-10-12 20:42:55

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

tlsmf 发表于 2013-10-28 13:52:00

仿真就算了吧

aressos 发表于 2013-10-28 15:29:03

最近用 STM32做了这个实验,也是CRC校验的
页: [1]
查看完整版本: Proteus 7.1温湿度传感器SHT1x CRC8校验码没有翻转