搜索
bottom↓
回复: 14

18b20 一直读出来是85度,求解?

[复制链接]

出0入0汤圆

发表于 2013-3-6 15:16:58 | 显示全部楼层 |阅读模式
本帖最后由 Ethen 于 2013-3-6 15:19 编辑

50 05 4B 46 7F FF 0C 10 1C 这组数据是内部寄存器读取出来的,我3S采样并读取,发现一直都是这组数据,就是85度,读取了18b20的默认值,不知道是什么原因?
以下是程序代码:


//11.0592晶振 51单片机
void mDelay(uint num)
{
        uint i;
        for(;num>0;num--)
        {        for(i=0;i<124;i++)
                        {;}
        }
}


void TempDelay(unsigned int n)
{
  do
  {
   _nop_();_nop_();_nop_();_nop_();
   _nop_();_nop_();_nop_();_nop_();
   _nop_();_nop_();_nop_();_nop_();
   _nop_();
   n--;
  }while(n);
}



/*****************DS18B20******************/

void Init_Ds18b20(void)     
{
DQ=1;
_nop_();
DQ=0;
TempDelay(35);  
_nop_();
DQ=1;
TempDelay(10);   
if(DQ==0)
  detect = 1;   
else
  detect = 0;   
TempDelay(1);      
_nop_();
_nop_();  
DQ = 1;

}

uchar Read_One_Byte (void)     //读取单字节
{
uchar i,u=0;
for(i=0;i<8;i++)
{
  DQ = 0;
  u >>= 1;
  _nop_();_nop_();_nop_();
  DQ = 1;
  TempDelay (1);
  if(DQ==1)
  u |= 0x80;
  TempDelay (4);                                       
  //_nop_();
}
return(u);
}




void Write_One_Byte (uchar wr)  //单字节写入
{
uchar i;
for (i=0;i<8;i++)
{
  DQ = 0;
  _nop_();_nop_();_nop_();
  DQ=wr&0x01;
  TempDelay(3);   
  //_nop_();
  //_nop_();
  DQ=1;
  wr >>= 1;
}
}


void read_bytes (uchar j)
{
  uchar i;
  for(i=0;i<j;i++)  
  {
    *p = Read_One_Byte();
    p++;
  }
}
uchar CRC (uchar j)
{
    uchar i,crc_data=0;
   
                for(i=0;i<9;i++)
                 {
                 tx_byte(temp_buff);
                 }          
   for(i=0;i<j;i++)
      crc_data = CrcTable[crc_data^temp_buff];
    return (crc_data);
}

uint Get_Tmp()                   //获取温度get the temperature
{
    float tt;
    EA=0;
        Init_Ds18b20();                //初始化
        Write_One_Byte(0xcc);          //忽略ROM指令
        Write_One_Byte(0x44);          //温度转换指令
    mDelay(200);
        Init_Ds18b20();                 //初始化
        Write_One_Byte(0xCC);          //忽略ROM指令
        Write_One_Byte(0xBE);          //读暂存器指令
        p = temp_buff;
    read_bytes (9);
    EA=1;
   if (CRC(9)==0) //校验正确
   {
   
        temp = temp_buff[1];
        temp <<= 8;
        temp = temp|temp_buff[0];
        if (temp&0XF800)//判定temp 的高五位是否為 1
        {
        temp=~temp + 1;//若temp 的高五位為1,則取temp 的補碼
        fuhao=1;
        }
    else
    {
      fuhao=0;
    }
        tt = temp*0.0625;//得到真实十进制温度值 //因为DS18B20可以精确到0.0625度 //所以读回数据的最低位代表

的是0.0625度
    temp = tt*10+0.5;  //放大十倍//这样做的目的将小数点后第一位也转换为可显示数字//同时进行一个四舍五入操作

。               
    if(fuhao==1)
    {
      temp=-1*temp-1;
    }              
   }                              
   else
   {
    temp=0;

   }
         
return temp;
}

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

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2013-3-6 16:11:07 | 显示全部楼层
85表示芯片没有启动温度的模数转换,你看一下就知道85其实是芯片启动后那个寄存器的默认值。
但是I2C总线应该是通的,看一下具体的命令,然后把delay什么的加长看一下吧。

出0入0汤圆

发表于 2013-3-6 16:13:51 | 显示全部楼层
如下
1、 芯片坏了
2、 程序错了

或者两个都有

出0入0汤圆

发表于 2013-3-6 16:26:51 | 显示全部楼层
leavic 发表于 2013-3-6 16:11
85表示芯片没有启动温度的模数转换,你看一下就知道85其实是芯片启动后那个寄存器的默认值。
但是I2C总线应 ...

+1
时序问题的可能性很大

出0入0汤圆

发表于 2013-3-6 16:30:17 | 显示全部楼层
据说是电源接反烧掉了之后的典型现象

出0入0汤圆

发表于 2013-3-6 17:39:23 | 显示全部楼层
时序有问题

出500入0汤圆

发表于 2013-3-6 17:45:21 | 显示全部楼层
曾经有一片18B20调了一个星期,经常抽风85度,换了一片果断正常

出0入0汤圆

 楼主| 发表于 2013-4-16 13:34:11 | 显示全部楼层
时序问题,把时序调整一下就好了。片子没那么容易坏,

出0入0汤圆

发表于 2013-4-16 14:38:24 | 显示全部楼层
多找一片

出0入0汤圆

发表于 2013-4-16 16:09:54 | 显示全部楼层
片子烧了的话,就会一直是85.建议换一片试下。

出0入0汤圆

发表于 2013-4-16 18:56:27 | 显示全部楼层
调程序 换器件

出0入0汤圆

发表于 2013-4-16 18:59:49 | 显示全部楼层
自己好好调试一下,搞懂协议。。。。

出0入0汤圆

发表于 2013-4-16 19:00:14 | 显示全部楼层
慢慢来,慢慢调试

出0入0汤圆

发表于 2013-4-16 20:22:13 | 显示全部楼层
这货的时序要求很严格,要有示波器的话最好照着波形调试。也不要轻易从网上down程序,不同的单片机速度是不一样,导致时序混乱。

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-5-18 08:56

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

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