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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2584|回復: 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 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日本一级淫片免费啪啪3 | 妞干网视频 | 亚洲精品久久久久久一区二区 | 色橹橹欧美在线观看视频高清 | 成人精品免费 | 99热精品6| 精品久久久久久亚洲精品 | 国产精品伦一区二区三级视频 | 在线国产小视频 | 欧美国产精品一区二区三区 | 日韩在线视频网址 | 久久久久久综合 | 久久精品国产久精国产 | 黄色a三级 | 91新视频 | 久久国产精品免费视频 | 精品国产一级片 | 久久精品亚洲精品 | 在线精品亚洲欧美日韩国产 | 亚洲一区免费 | 日韩精品视频在线观看一区二区三区 | 国产一区二区精品在线观看 | 午夜黄色影院 | av大全在线 | 91久久国产综合久久91精品网站 | 亚洲永久免费 | 欧美日韩综合精品 | 国产欧美精品一区二区三区 | 日韩一区二区三区在线 | 久久国内精品 | www国产成人免费观看视频 | 中文字幕一区在线 | 亚洲综合国产 | 正在播放国产精品 | 国产亚洲精品91 | 午夜精品一区二区三区在线观看 | 一级片在线观看视频 | 国产成人精品视频在线观看 | 精品久久久久久久久久久久 | 久久精品欧美一区二区三区麻豆 | 亚洲欧美中文日韩在线v日本 |