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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久精品手机视频 | 国产精品黄色 | 91av视频| 黄色男女网站 | 日本三级网站在线观看 | 日韩欧美国产一区二区 | 97久久超碰| 久久亚洲一区二区三区四区 | 91久久久久久久久久久 | 天堂久| 欧美成人免费在线 | 这里有精品 | 久久久久久久久久爱 | 天天视频一区二区三区 | 欧美精品a∨在线观看不卡 国产精品久久国产精品 | 欧美一区二区三区视频 | 精品婷婷 | 青青久在线视频 | 免费在线精品视频 | 国产日韩中文字幕 | 91精品久久久 | 久久视频精品 | 96久久久久久 | 久久久久久久久久影视 | 成人一区二区三区在线观看 | 国产精品久久久久久久久久免费看 | 国产乱码精品一区二区三区忘忧草 | 激情福利视频 | 天天亚洲 | 欧美一级二级视频 | 久久se精品一区精品二区 | 日韩一区二区三区视频 | 久久久久久成人 | 91视视频在线观看入口直接观看 | 午夜欧美a级理论片915影院 | 看片地址 | 一色一黄视频 | 久久国产精品一区二区三区 | 久久中文免费视频 | av网站免费观看 | 国产黄色在线观看 |