一.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的应答。

//复位DS18B20void 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/0u8 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;    }

如需资料可关注公众号-单片机实例设计,发送“DS18B20”获取。

DS18B20温度传感器使用详解相关推荐

  1. DS18B20温度传感器原理详解及例程代码、漏极开路

    [常用传感器]DS18B20温度传感器原理详解及例程代码_Z小旋的博客-CSDN博客_ds18b20温度传感器 传感器引脚及原理图 DS18B20传感器的引脚及封装图如下: DS18B20一共有三个引 ...

  2. VHDL语言编写DS18B20温度传感器程序详解

    网上关于DS18B20的资料很多,但是光有程序,没有讲解,导致身边很多同学即使拿到源码也无从下手,故写此篇文章,一方面接收DB18B20,一方结合原理详细讲解源码的意义. 器件原理: 原理图:     ...

  3. 单片机-bmp280大气压强与温度传感器使用详解

    单片机-bmp280大气压强与温度传感器使用详解" 转载: https://blog.csdn.net/sunshinebooming/article/details/79637822 最近 ...

  4. 单片机 BMP280(GY-BM E/P 280模块)大气压强与温度传感器使用详解

    单片机 BMP280大气压强与温度传感器使用详解 最近实习中一个项目要用到多种传感器,其中就包括BMP280模块,但是发现网上有用的资料非常少,只好从头看datasheet,使用过程中也算积累了相关的 ...

  5. 嵌入式设计与开发项目-DS18B20温度传感器程序设计

    嵌入式设计与开发项目-DS18B20温度传感器程序设计 一.实现的功能 二.根据功能实现代码 1.主文件main.c 2.DS18B20的头文件"ds18b20.h" 3.DS18 ...

  6. 基于DS18B20的多点测温方案详解

    1.DS18B20多点测温方案概述 DS18B20 单线数字温度传感器,多个 DS18B20 可以并联在惟一的单线上,实现多点测温.具体方案主要是以下步骤: 写一个获取DS18B20的64位序列号的k ...

  7. 51单片机DS18B20温度传感器使用及数码管温度计、LCD1602温度显示代码详解

    温馨提示:读者若要彻底理解并会灵活使用DS18B20温度传感器,请详细阅读中文手册,并且对照代码注释充分分析代码.请不要觉得中文手册内容繁多!如能静心分析,定能深有体会,获益匪浅! 一.DS18B20 ...

  8. 51单片机DS18B20温度传感器详解

    DS18B20是一种单总线数字温度传感器,测试温度范围-55℃-125℃,具有体积小,硬件开销低,抗干扰能力强,精度高的特点.单总线,意味着没有时钟线,只有一根通信线.单总线读写数据是靠控制起始时间和 ...

  9. Arduino温度传感器全系列使用详解

    原文地址:https://arduino.nxez.com/2017/03/26/arduino-sensor-series-of-temperature-measurement.html Ardui ...

  10. DS18B20 1-WIRE ROM搜索算法详解

    转自:http://blog.sina.com.cn/s/blog_57ad1bd20102uxxw.html 1-WIRE搜索算法详解(1) 0前言 美信公司(http://www.maximint ...

最新文章

  1. Freemarker模板嵌套
  2. 机器学习笔试精选题精选(四)
  3. excel中python是什么意思_python在excel中的应用是什么
  4. php 怎么执行unoconv,web执行php调用exec(unoconv)命令失败解决方案
  5. 逻辑综合——施加约束
  6. 浏览器拦截打开新窗口情况总结
  7. 【AI视野·今日Robot 机器人论文速览 第十期】Fri, 18 Jun 2021
  8. 开源开发工具_3个开源行为驱动的开发工具
  9. Facebook授权登录
  10. Unreal4有哪些令你印象深刻拍案叫绝的设计
  11. 未来五年的全球绿色数据中心市场的增长趋势和预测
  12. kalilinux装到u盘上的弊端_暗黑系统安装盘高达14G!kali linux在它面前顿然失色
  13. Python学习手册~笔记1
  14. word文字校对工具_如何在Word中使用校对面板
  15. Linux 安装 RMVB,rm,ape文件 解码器
  16. MD5,SHA1,SHA256,NTLM,LM等Hash在线破解网站收集
  17. 今天我们来聊聊递归喝汽水问题
  18. 数据库DataBase
  19. 手里有200万,如何理财
  20. americdan-life

热门文章

  1. openCV 图像阀值
  2. 非极大值抑制(Non-Maximum-Suppression)
  3. IDEA配置maven本地仓库
  4. 裴礼文数学分析中的典型问题与方法第2章一元函数的连续性练习
  5. SIP协议及与Freeswitch的关系
  6. Android 多线程断点下载
  7. 深度学习之torch(一)MINIST手写字符分类
  8. 亚马逊数据线办理CE认证检测项目有哪些?如何办理?
  9. [matlab也能用来机器学习!?]保存工具箱模型并使用模型预测结果
  10. Linux brctl 详解