一乐电子

一乐电子百科

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

快捷登录

手机号码,快捷登录

搜索
12
返回列表 发新帖
楼主: fxhfxh
收起左侧

关于18b20的问题,买到假的了?还是其它原因?

  [复制链接]
发表于 2011-5-16 20:52 | 显示全部楼层
那应该就是设置问题了,看楼上的,在程序里加上需要的设置分辨率,就可以了。
 楼主| 发表于 2011-5-16 21:35 | 显示全部楼层
是分辨率设置问题,18B20的分辨率出厂时默认是设为的12位精度,但你的第二只18B20曾经在某个时候被设置成了 ...
zghlt 发表于 2011-5-16 20:23 https://www.yleee.com.cn/images/common/back.gif

      谢谢!谢谢zghlt. 确实是18b20的分辨率的设置问题,对18b20重新进行了12位分辨率的设置后,显示时小数位有了1,2,3,。。。了。
      顺便说一下,这个18b20我可以肯定的是第一次用,那么1有可能出厂时没有设成12位。2有可能商家发货前使用过或测试过。当然这些都不太重要了。重要的是要自己仔仔细细的看18b20的pdf. 再一次谢谢zghlt.
发表于 2011-5-18 10:42 | 显示全部楼层
只要在程序中加入一句,在单片机上电的时候,设置一次分辨率。
 楼主| 发表于 2011-5-18 11:50 | 显示全部楼层
只要在程序中加入一句,在单片机上电的时候,设置一次分辨率。
狗狗百里游 发表于 2011-5-18 10:42 https://www.yleee.com.cn/images/common/back.gif

    我是在程序中加上分辨率设置的语句对18b20设置了后,然后在真正运行的程序中去掉了分辨率设置的语句,现在看是正常的,如您所说在程序中加上分辨率设置的语句,那么每次上电,均要写eeprom,如果上电次数很频繁的话,对18b20的寿命有不有影响呢?这个我真的不知道,真的想知道。
发表于 2011-5-18 18:19 | 显示全部楼层
本帖最后由 狗狗百里游 于 2011-5-18 18:22 编辑

/*
//温度分辨率调整
void ds18b20_setup_bit( unsigned char RES, unsigned char TH, unsigned char TL , unsigned char write, ds18b20_typedef * _ds18b20_) //res 分别等于 0x1f, 0x3f, 0x5f,  0x7f 温度读数分辨率分别对应
//             0.5,  0.25, 0.125 ,0.0625(12Bit)
// Config :0x1F:9位, 0x3F:10位 ,0x5F:11位 ,0x7F:12位
// 所需时间: 93.75ms  187.75ms    375ms      750ms
//ds18b20_setup_bit(0x7F,0x00,0x00,0x01,&ds18b20_n1);//12位转化温度分辨率,不报警,保存设置到EPPROM
{
  if (read_power_supply(_ds18b20_) != 2)//判断ds18b20是否存在,顺便获取供电方式
    {
      RESET_18b20(_ds18b20_);        //复位
      write_18b20( 0xcc, _ds18b20_ ); //跳过Rom
      write_18b20( 0x4e , _ds18b20_); //写暂存器
      write_18b20( TH , _ds18b20_); //写TH,报警上限
      write_18b20( TL , _ds18b20_); //写TL,报警下限
      write_18b20( RES , _ds18b20_); //写结构寄存器
      if (write == 1)
        {
          RESET_18b20(_ds18b20_);         //复位
          write_18b20( 0xcc, _ds18b20_ ); //跳过Rom
          write_18b20( 0x48, _ds18b20_ ); //把暂存器内容写到EPPROM中
          if (_ds18b20_->ds18b20_power == 0)  //如果不是1-wire总线寄生供电,就不使用,强上拉,减少损坏电路可能
            {
              SET_18B20_IO_qiang_vcc;  //强上拉_高电平_输出状态
            }
          delay_ms_18b20(20);   //写EPRam需要10ms,的供电,如果是寄生电源供电,就需要强上拉10ms
          RESET_18b20(_ds18b20_);         //复位
          write_18b20( 0xcc, _ds18b20_ ); //跳过Rom
          write_18b20 (0xb8, _ds18b20_); //回调设定值
        }
    }
}

很久没修改18b20的代码了,我翻了一下,我估计设置了分辨率,报警上下限,是立刻生效的,不用把暂存器内容写到EPPROM中,18b20断电重启重新读取EPPROM的,我估计的啊!,你也可以单片机上电的时候读取EPPROM,发现分辨率不对就写入一次。
未命名.PNG

我上传有一个中文翻译的说明书,你看中文翻译的第七页,你对比官方说明书看看。
DS18B20.pdf (218.99 KB, 下载次数: 335) DS18B20 单总线数字温度计.pdf (432.15 KB, 下载次数: 428)
 楼主| 发表于 2011-5-18 19:19 | 显示全部楼层
本帖最后由 fxhfxh 于 2011-5-18 19:28 编辑

回复 15# 狗狗百里游
    从我这次的情况看,分辨率的设置值肯定是要写入18b20的eeprom才能生效,因为一直用的程序都没有设置分辨率,以致后面一次的18b20内部的分辨率不对才发现有问题。我现在用的程序就没有设置分辨率的语句,运行是正常的。当然每次上电都去写一下eeprom,肯定是可以的,但是到底反复多次的上电写eeprom,对其寿命有不有影响,这个我就不知道了,所以发了一个贴。
“你也可以单片机上电的时候读取EPPROM,发现分辨率不对就写入一次。”这个办法是可以的,但现在这样用没有发现问题,就没有去改它了。否则又要增加代码长度。

本版积分规则

QQ|一淘宝店|手机版|商店|电子DIY套件|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2025-4-29 12:01 , Processed in 0.047797 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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