0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

DS18B20 数字温度计特点

科技绿洲 来源:单片机实例设计 作者:单片机实例设计 2023-09-11 11:19 次阅读

一.DS18B20特点

DS18B20 数字温度计提供12位(二进制)温度读数的数字型传感器。传感器仅需要单总线接口与CPU连接,实现信号送入 DS18B20 或从 DS18B20 送出。传感器内部框图如下:

图片

DS18B20内部框图

  1. DS18B20的电源可以由数据线本身提供(如框图所示),可不需要再接外部电源,因此从CPU到DS18B20仅需一条数据线和地线。
  2. 内部的64位ROM 只读存储器,用于存放DS18B20 ID编码,其前8位是单线系列编码(DS18B20的编码是19H),后面48位是芯片唯一的序列号,最后8位是以上56位的CRC码(冗余校验)。数据在出产时厂家已设置好,用户不可更改。
  3. RAM 数据暂存器,用于内部计算和数据存取,数据在掉电后丢失,DS18B20共9个字节RAM,每个字节为8位。

图片

DS18B20内部RAM图

第1、2个字节是温度转换后的数据值信息,第3、4个字节是用户EEPROM(常用于温度报警值储存)的镜像。在上电复位时其值将被刷新。第5个字节则是用户第3个EEPROM的镜像。第6、7、8个字节为计数寄存器,是为了让用户得到更高的温度分辨率而设计的,同样也是内部温度转换、计算的暂存单元。第9个字节为前8个字节的CRC码。EEPROM 非易失性记忆体,用于存放长期需要保存的数据,上下限温度报警值和校验数据,DS18B20共3位EEPROM,并在RAM都存在镜像,以方便用户操作。

二.DS18B20连接图

DS18B20电源连接方式有两种,可通过数据线供电或者电源引脚直接供电;此外,无论哪种连接方式,数据线都需要外置4.7k的上拉电阻

图片

数据线供电的连接方式

图片

外部电源供电的连接方式

三.DS18B20控制时序分析

1.复位时序

时序见图,主机总线发送一复位脉冲(最短为 480us,最长960us的低电平信号);接着主机将总线拉到高电平,释放总线并进入引脚接收状态;DS18B20 在检测到总线的上升沿之后等待15-60us,接着DS18B20发出存在脉冲(低电平持续 60-240 us) 。主机总线检测到低电平时间在140us内,则检测到DS18B20的应答。

图片

//复位DS18B20
void DS18B20_Rst(void)    
{                 
  DS18B20_IO_OUT(); //SET IO OUTPUT
  DS18B20_DQ_OUT=0; //拉低DQ
  delay_us(750);    //拉低750us
  DS18B20_DQ_OUT=1; //DQ=1
  delay_us(15);     //15US
}


//等待DS18B20的回应
//返回1:未检测到DS18B20的存在
//返回0:存在
u8 DS18B20_Check(void)     
{   
  u8 retry=0;
  DS18B20_IO_IN();//SET PA0 INPUT  
  while (DS18B20_DQ_IN&&retry< 200)
  {
    retry++;
    delay_us(1);
  };  
  if(retry >=200)return 1;
  else retry=0;
  while (!DS18B20_DQ_IN&&retry< 240)
  {
    retry++;
    delay_us(1);
  };
  if(retry >=240)return 1;     
  return 0;
}

2.写时序

当主机总线从高拉至低电平时就产生写时间隙,见图时序图,从下降沿开始15us之内应将所需写的位送到总线上,DS18B20在15-60us间对总线采样,若低电平写入的位是0,若高电平,则写入的位是1,连续写入位数的间隙应大于1us。

图片

//写一个字节到DS18B20
//dat:要写入的字节
void DS18B20_Write_Byte(u8 dat)     
 {             
    u8 j;
    u8 testb;
    DS18B20_IO_OUT();//SET IO OUTPUT;
    for (j=1;j<=8;j++)
    {
        testb=dat&0x01;
        dat=dat >>1;
        if (testb)
        {
            DS18B20_DQ_OUT=0;// 写入1
            delay_us(2);                            
            DS18B20_DQ_OUT=1;
            delay_us(60);             
        }
        else
        {
            DS18B20_DQ_OUT=0;// 写入0
            delay_us(60);             
            DS18B20_DQ_OUT=1;
            delay_us(2);                          
        }
    }
}

3.读时序

主机总线从高拉至低电平时,总线只须保持低电平1us以上后,将总线拉高,产生读时间隙,如图:

图片

读时间在Trc后到15us内有效,也就是说 t z 时刻前主机必须完成读位,并在 Tinit后的 60us ~ 120 us内释放总线。主机引脚读取总线状态,若低电平读取的位是0,若高电平,则读取的位是1,连续读取位数的间隙应大于1us。

图片

//从DS18B20读取一个位
//返回值:1/0
u8 DS18B20_Read_Bit(void)     // read one bit
{
    u8 data;
    DS18B20_IO_OUT();//SET IO OUTPUT
    DS18B20_DQ_OUT=0;
    delay_us(2);
    DS18B20_DQ_OUT=1;
    DS18B20_IO_IN();//SET IO INPUT
    delay_us(12);
    if(DS18B20_DQ_IN)data=1;
    else data=0;  
    delay_us(50);           
    return data;
}


//从DS18B20读取一个字节
//返回值:读到的数据
u8 DS18B20_Read_Byte(void)    // read one byte
{        
    u8 i,j,dat;
    dat=0;
    for (i=1;i<=8;i++)
    {
        j=DS18B20_Read_Bit();
        dat=(j< < 7)|(dat >>1);
    }          
    return dat;
}

4.读取DS18B20温度值

DS18B20读取温度值步骤如下,其中单个传感器无需匹配ROM,所以程序中跳过匹配ROM。

图片

//从ds18b20得到温度值
//精度:0.1C
//返回值:温度值 (-550~1250)
short DS18B20_Get_Temp(void)
{
    u8 temp;
    u8 TL,TH;
    short tem;
    DS18B20_Start ();                    // ds1820 开始转换
    DS18B20_Rst();
    DS18B20_Check();  
    DS18B20_Write_Byte(0xcc);// 跳过匹配ROM
    DS18B20_Write_Byte(0xbe);// 转换   
    TL=DS18B20_Read_Byte(); // LSB   
    TH=DS18B20_Read_Byte(); // MSB  
    if(TH >7)
    {
        TH=~TH;
        TL=~TL;
        temp=0;//温度为负  
    }else temp=1;//温度为正      
    tem=TH; //获得高八位
    tem< <=8;    
    tem+=TL;//获得底八位
    tem=(float)tem*0.625;//转换     
    if(temp)return tem; //返回温度值
    else return -tem;    
}
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 电源
    +关注

    关注

    182

    文章

    16553

    浏览量

    244701
  • 存储器
    +关注

    关注

    38

    文章

    7148

    浏览量

    161985
  • 数据线
    +关注

    关注

    8

    文章

    261

    浏览量

    37062
  • DS18B20
    +关注

    关注

    10

    文章

    765

    浏览量

    80094
  • 数字温度计
    +关注

    关注

    2

    文章

    105

    浏览量

    21525
收藏 人收藏

    评论

    相关推荐

    DS18B20数字温度计使用

    特点。因此用它来组成一个测温系统,具有线路简单,在一根通信线,可以挂很多这样的数字温度计,十分方便。1、DS18B20产品的特点  (1)
    发表于 10-24 21:12

    DS18B20做了个数字温度计遇到的问题

    本人最近用DS18B20做了个数字温度计,但是测出来的数据总比家里的2个电子钟高2,3度?请问各位高手问题可能出在哪,DS18B20这种单总线的是不是对时序操作中的延时部分要求精确度较
    发表于 04-02 12:46

    DS18B20数字温度计

    基本原理 温度与我们的生活、环境以及工业生产过程息息相关,是过程控制中的重要参数之一。测量温度的关键是温度传感器,目前新型温度传感器已从模拟走向数字
    发表于 07-26 15:39

    ds18b20制作数字温度计

    利用51和DS18B20芯片,自行设计并完成数字温度计(范围:-20至99摄氏度);误差范围控制在0.5摄氏度;四位数码管显示;可在华氏与摄氏度间利用自由按键切换。
    发表于 11-08 14:29

    基于DS18B20数字温度计

    基于DS18B20数字温度计
    发表于 04-12 22:07

    关于DS18B20设计温度计

    要求所设计的温度计的测温范围为55C ~125C,并用液晶LCD1602显示;且能测量液体温度,当超过1000C能够报警。用DS18B20设计,求硬件电路图及程序,,,,来大神啊~
    发表于 05-25 09:33

    基于DS18B20的51单片机数字温度计设计

    本帖最后由 kuofonfon 于 2020-1-3 17:39 编辑 实验原理DS18B20数字温度计是DALLAS公司生产的1-Wire,即单总线器件,具有线路简单,体积小的特点
    发表于 11-04 12:27

    DS18B20数字温度计相关资料分享

    DS18B20数字温度计资料下载内容主要介绍了:DS18B20基本知识DS18B20产品的特点
    发表于 04-14 06:02

    DS18B20数字温度计怎么使用?

    DS18B20产品的特点DS18B20的引脚介绍DS18B20的使用方法
    发表于 04-15 06:55

    怎样去设计一种基于DS18B20的LED数码管显示数字温度计

    LED数码管显示数字温度计有哪些功能?怎样去设计一种基于DS18B20的LED数码管显示数字温度计
    发表于 09-23 07:46

    DS18B20数字温度计的相关资料下载

    目标:DS18B20数字温度计(一)1. DS18B20简介DS18B20 是由 DALLAS 半导体公司推出的一种的“一线总线”接口的
    发表于 01-05 06:34

    DS18B20数字温度计使用

    DS18B20数字温度计使用 1.DS18B20基本知识 DS18B20数字
    发表于 01-25 11:29 1436次阅读
    <b class='flag-5'>DS18B20</b><b class='flag-5'>数字</b><b class='flag-5'>温度计</b>使用

    基于DS18B20数字温度计设计

    基于DS18B20数字温度计设计,供大家下载。
    发表于 12-21 18:26 24次下载

    DS18B20数字温度计使用

    DS18B20数字温度计使用。
    发表于 05-05 14:56 0次下载

    DS18B20数字温度计使用

    学习单片机电路图的很好的资料——DS18B20数字温度计使用
    发表于 11-03 15:15 0次下载