久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2780|回復: 13
收起左側

單片機+DS18B20 CRC檢驗不通過?

[復制鏈接]
ID:629502 發表于 2022-9-19 17:47 | 顯示全部樓層 |閱讀模式
在使用DS18B20時加入CRC校驗,讀序列號時CRC校驗可以通過,但是讀存儲器中9個字節數據時校驗不通過(使用正點原子例程其中溫度值是有,也會變化。)
mmexport1663580283731.png IMG_20220919_173746.jpg mmexport1663580285906.png
回復

使用道具 舉報

ID:213173 發表于 2022-9-20 06:29 | 顯示全部樓層
這個示例可能對你有所幫助

DS18b20 CRC8位校驗示例 仿真.rar (251.24 KB, 下載次數: 21)

回復

使用道具 舉報

ID:420836 發表于 2022-9-20 09:14 | 顯示全部樓層
它總是沒有通過 CRC 檢查還是只是有時它沒有通過 CRC 檢查?
回復

使用道具 舉報

ID:629502 發表于 2022-9-20 12:13 | 顯示全部樓層
TTQ001 發表于 2022-9-20 09:14
它總是沒有通過 CRC 檢查還是只是有時它沒有通過 CRC 檢查?

是一直沒通過,我用的CRC程序沒問題,序列號的可以通過,就是9個字節的存儲器讀的值一直沒通過
回復

使用道具 舉報

ID:629502 發表于 2022-9-20 12:14 | 顯示全部樓層
wulin 發表于 2022-9-20 06:29
這個示例可能對你有所幫助

CRC校驗程序上沒問題,就是讀存儲器中的9個字節數據,前8個進行校驗和第9個總是對不上,可是前兩個字節的溫度還是會有變化
回復

使用道具 舉報

ID:390416 發表于 2022-9-20 22:24 | 顯示全部樓層
CRC校驗8541反序.png 學單片機請認準《人人學會單片機》系列視頻教程。
回復

使用道具 舉報

ID:629502 發表于 2022-9-21 09:00 | 顯示全部樓層
人人學會單片機 發表于 2022-9-20 22:24
學單片機請認準《人人學會單片機》系列視頻教程。

CRC也是這樣使用的,主要問題是讀出的9個字節數據校驗不通過,我測試了讀這個數據的溫度有變化,過溫TH和低溫TL我寫入進去也會有變化,判斷數據的讀寫也沒問題。
回復

使用道具 舉報

ID:629502 發表于 2022-9-21 11:26 | 顯示全部樓層
已經又更換了幾個DS18B20測試還是這種現象,讀出的序列號CRC校驗可以通過,存儲器中的值可以寫入,讀出來的溫度也會有變化,就只是CRC校驗不行。我讀出來的那3個保留位一直是0xA5,0xA5,0x66
回復

使用道具 舉報

ID:879348 發表于 2022-9-21 14:53 | 顯示全部樓層
沒問題的,我以前做過CRC,因為探頭線很長,防止錯誤
回復

使用道具 舉報

ID:123289 發表于 2022-9-21 17:15 | 顯示全部樓層
如果不做CRC讀DS18B20不錯,這個問題就與DS18B20無關。
不是用CRC“加密”出了問題,就是用CRC“解密”出了問題。估計問題出在數據的次序、起訖點、高低位序、CRC起始碼上。
回復

使用道具 舉報

ID:629502 發表于 2022-9-21 17:53 | 顯示全部樓層
  1. uint8_t DS18B20_Crc(uint8_t *addr, uint8_t len)
  2. {
  3.         uint8_t crc = 0, inbyte, i, mix;
  4.                 while(len --)
  5.                 {
  6.                         inbyte = *addr++;
  7.                         
  8.                         for(i = 8; i; i--)
  9.                         {
  10.                                 mix = (crc ^ inbyte) & 0x01;
  11.                                 crc >>= 1;
  12.                                 if(mix)
  13.                                 {
  14.                                         crc ^= 0x8C;
  15.                                 }
  16.                                 inbyte >>= 1;
  17.                         }
  18.                 }
  19.                 return crc;
  20. }
  21. 序列號CRC可以校驗,溫度值校驗不通過還是
  22. bool DS18B20_Get_Temp(short *tem)
  23. {
  24.     u8 temp;
  25.     u8 TL,TH;
  26.                 u8 crc;
  27.                 u8 i;
  28.     DS18B20_Start ();                    // ds1820 start convert
  29.     DS18B20_Rst();
  30.     DS18B20_Check();         
  31.     DS18B20_Write_Byte(0xcc);// skip rom
  32.     DS18B20_Write_Byte(0xbe);// convert           
  33.                 for(i = 0; i < 9; i++)
  34.                 {
  35.                         scrbuf[i] = DS18B20_Read_Byte();
  36.                 }
  37.                 crc = DS18B20_Crc(scrbuf,8);
  38.                 if(scrbuf[8] == crc)
  39.                 {
  40.                         TL = scrbuf[0];                                                                                        // LSB
  41.                         TH = scrbuf[1];                                                                                        // MSB
  42.                         if(TH>7)
  43.                         {
  44.                                         TH=~TH;
  45.                                         TL=~TL;
  46.                                         temp=0;//溫度為負  
  47.                         }else temp=1;//溫度為正                    
  48.                         *tem=TH; //獲得高八位
  49.                         (*tem)<<=8;   
  50.                         *tem+=TL;//獲得底八位
  51.                         *tem=(double)*tem*0.625;//轉換
  52.                         if(!temp) *tem =-(*tem);                                        // 負數
  53.                         else;
  54.                         return true;
  55.                 }
  56.     else
  57.                          return false;
  58. }

  59. bool DS18B20_Read_ID(uint8_t *ID)
  60. {
  61.         u8 crc;
  62.         u8 i;
  63.         DS18B20_Rst();
  64.         DS18B20_Check();
  65.         DS18B20_Write_Byte(0x33);
  66.         for(i = 0; i < 8; i++)
  67.         {
  68.                 ID[i] = DS18B20_Read_Byte();
  69.         }
  70.         crc = DS18B20_Crc(ID,7);
  71.         if( ID[7] == crc )
  72.         {
  73.                 return true;
  74.         }
  75.         else
  76.         {
  77.                 return false;
  78.         }
  79. }
復制代碼

實驗30 DS18B20數字溫度傳感器實驗.7z

318.12 KB, 下載次數: 7

回復

使用道具 舉報

ID:629502 發表于 2022-9-22 08:30 | 顯示全部樓層
yzwzfyz 發表于 2022-9-21 17:15
如果不做CRC讀DS18B20不錯,這個問題就與DS18B20無關。
不是用CRC“加密”出了問題,就是用CRC“解密”出 ...

謝謝指導,CRC“加密”工作是DS18B20內部自己操作出來的,“解密”的結果和我用網上的CRC計算器也對的上,就只是DS18B20對不上,代碼部分我粘貼在上面了。
回復

使用道具 舉報

ID:629502 發表于 2022-9-22 11:03 | 顯示全部樓層
"被DS18B20支配的恐懼,懷疑買到假的芯片(CRC8校驗不通過)"
我找到了一個和我這邊現象一樣的帖子,這個問題搞的真的頭大。
回復

使用道具 舉報

ID:629502 發表于 2022-9-22 12:01 | 顯示全部樓層
我感覺手上這批DS18B20是仿制品,存儲器寫入值可以,但是不能掉電保存,更改分辨率,但實際讀出的數字的分辨率并不會更改。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品久久久久久久午夜 | 日韩欧美国产电影 | 中文字幕国产一区 | 在线āv视频 | 久久久青草婷婷精品综合日韩 | 日韩国产欧美在线观看 | 精品久久久久久亚洲精品 | 国产99久久精品一区二区永久免费 | av大片在线观看 | aaaaa毛片| 欧美在线视频一区二区 | 中文字幕 国产精品 | h视频在线免费观看 | 亚洲欧美激情精品一区二区 | 亚洲成a | 日韩免费视频一区二区 | 国产一区二区视频在线观看 | 久久久久久久久久一区 | 一级黄色片免费在线观看 | 欧美日韩亚洲在线 | 精品中文字幕一区 | 青青久久av北条麻妃海外网 | 欧美激情网站 | 日韩视频在线观看一区二区 | 日韩精品一区二区三区中文字幕 | 综合久久亚洲 | 久久久久av| 日日av| 亚洲综合一区二区三区 | 宅女噜噜66国产精品观看免费 | 欧美一级二级三级 | 久久久91精品国产一区二区精品 | 精品国产一区二区三区av片 | 99热热| 国产一区二区三区 | 欧美亚洲高清 | 欧美做暖暖视频 | 国产福利网站 | 91免费福利在线 | 天天成人综合网 | 日韩视频中文字幕 |