51单片机控制温度传感器DS18B20

2023-05-16

(1)DS18B20初步认识

DS18B20是美国DALLAS半导体公司推出的一种数字化单总线器件,属于新一代适配微处理器的改进型智能温度传感器。我们先来看看DS18B20在芯片手册上的标题——“DS18B20 Programmable Resolution 1-Wire Digital Thermometer”。从这个标题上看我可以获取一些有价值的信息。首先分辨率是可以编程的,也就是我们可以通过程序来修改这个器件的分辨率。其次它又是“一线-总线”,那么简单的讲,就是我们与DS18B20的沟通就是通过这一根线实现的,换一个说法就是“写数据”,“发命令”,“读数据”等等都是通过这根线来完成的。第三点,从标题可以看到,它是数字温度计,也就是它能把温度信号转成数字信号。

其实这里的“第三点”非常重要——把温度信号转成数字信号。注意我们使用这个器件的目的就是要获取温度的信息,那么我们要做的事情就是获取这个DS18B20器件转换的“数字信号”。这是我们的根本目的。其实这个过程中有很多问题值得思考。比如说,这个器件既然能把温度信号转成数字信号,那么可以推测这个器件有个部分或者说它的核心材料具备感知温度的能力。那么这个材料是什么?为什么这个材料具备这样的能力?最重要的一点是,DS18B20内部是如何把感知的温度信号转成数字信号的?可以看到,这几个问题才是DS18B20的核心内容(叁议电子)。但是想一想我们需要去解答这些问题吗?根本不需要。注意我们这里是从应用层面来思考问题的。我们要干什么?目的就是获取温度值嘛。刚才不是说了吗,DS18B20能把温度信号转成数字信号。那么我们只需要关心这个“数字信号”放到哪里了,然后通过这一根“一线-总线”进行沟通,取出这个“数字信号”就可以了。至于我们刚才思考那些问题有用吗?根本没必要。当然如果你想深入了解这个器件也可以去查阅相关的资料。这里再次强调,我们是从应用层面来思考问题的。好了,通过对DS18B20芯片手册的标题分析,我们可以推测出一个大概的思路:DS18B20会把周围的温度信号变成数字信号,放在了某个地方(www.ppptalk.com),然后我们通过这一根“一线-总线”取出这个“数字信号”。知道了这个思路,剩下的工作就是去查阅芯片手册,确定具体的操作的过程了。这里我用一幅图来描述这个过程,如下所示:

首先DS18B20内部的传感器(前面说过关于这个传感器不关心,只要知道它具备的功能就行了)感知周围的温度并且把它转成数字信号(这个过程也不关心),然后把这个“数字信号”存储在一个叫做“ScratchPad”的里面。ScratchPad存储器一共9个字节(Byte0-Byte8),数字信号就存储在Byte0_LSM和Byte1_MSB中。其中Byte0为低位,Byte1为高位。

BYTE2-BYTE3是关于“报警”的功能,BYTE2是设定的高温界限,BYTE3是设定的低温界限。可以想到,当周围温度超过这个范围时,会发出某种警告信号。接着就是Byte2_TH和Byte3_TL报警的功能了,图中Byte2_TH表示设置的最高温度,Byte3_TL表示设置的最低温度。同样S表示温度的正负,如果S=0,那么表示正,如果S=1,那么温度为负。Byte2_TH和Byte3_TL就表示设定温度的范围了。注意这里的Byte2_TH与Byte3_TL与”T-16bit”中的bit11到bit4是对应的,如图中蓝色部分所示。前面讲了,在”T-16bit”中,bit4每变化1为1°C,因此在Byte2_TH与Byte3_TL中的最低位每变化1,表示温度变化1°C.比如Byte2_TH设定为,01111001(十进制为121),首位为0,表示+121°C, Byte3_TL为01001001(十进制为73),首位为0,表示+73°C .因此温度的设定范围为: 73-121°C.当”T-16bit”中的温度高于/等于+121°C,或者低于/等于73°C时,将触发报警。

BYTE4是关于精度设定的,刚好与它的“标题”对应,“精度可编程”。一共四种精度可选,这样四种精度只需两个bit就可以组合了,如图中的Byte4_Config所示。bit5和bit6分别为R0和R1,其他几位是固定的。R0和R1分别可以取0或者1,因此可以组合成4种情况,00/01/10/11,分别对应不同的精度。

Byte5-Byte7未给出

Byte8为CRC用与通信错误检测,我们暂且不用管它,我们先考虑简单的部分。

为了简化问题,这里我们先只重点关注BYTE0和BYTE1,里面存在的就是我们需要的数字信息。如上图所示,我们把Byte0_LSM和Byte1_MSB组合成一个16bit的数字信号,Byte0_LSB为低位,Byte1_MSB为高位,并给它取个名字叫”T-16bit”。那么如何把这个”T-16bit”的数字信号转换成温度呢?从图中看出,bit11-bit15为S,表示温度的正负,如果S=0,那么温度为正,如果S=1那么温度为负。后面的bit10-bit0,数值每增加一就表示温度增加0.0625°C,举个例子:假如LSB中读出来的是1100 0011,MSB读出来的是0000 0110,那么LSB和MSB结合起来”T-16bit”就是0000 0110 1100 0011,高5位为0,表示温度为正,余下11位bit10-bit0(110 1100 0011=1731),把1731×0.0625=108.1875,那么测量的温度为+108.1875°C.

(2)DS18B20操作步骤

这个“一线-总线”在硬件上比较省事,但是对应的增加了程序的复杂性。它要求每次与DS18B20沟通都要有这三个步骤,(1)初始化;(2)ROM指令;(3)DS18B20 功能指令。 什么意思呢?比如你想“write scratchpad”,那么首先就要初始化,然后rom指令,之后write scratchpad,如果紧跟着你想read scratchpad,那么就必须再次重复初始化;rom指令;read scrachpad这个过程。以下步骤是读出scratchpad中BYTE0和BYTE1并通过LCD1602显示温度结果的过程:

(1) DS18B20初始化

(2) 跳过ROM指令

(3) 转换温度,注意上电的时候DS18B20是没有工作的。如果没有Convert这个指令,那么读出来的温度应该是默认值80度。

(4) 温度转换是需要时间的,不少于750ms,这里需要有忙信号检查,确定转换完成

         现在可以读Scatchpad了,但是同样要有三个步骤

(5) DS18B20初始化

(6) 跳过ROM

(7) 读Scatchpad

(8) RCV DATA(参考read time slot)

(9) 读出来的是二进制信号,需要转成十进制

(10)输出温度值(通过数码管/LCD1602液晶模块)

视频地址:DS18B20视频

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

51单片机控制温度传感器DS18B20 的相关文章

  • python str基本用法

    目录 1 没什么用的 1 1 调用实例属性后自动执行 getattribute 1 2 实例化后自动调用 new 1 3 将其他变量转变为字符串 repr 1 4 反向替代占位符 格式化 rmod 1 5 字符串反向做乘法 rmul 1 6
  • 32.QButtonGroup

    目录 1 创建和添加按钮 1 1 创建按钮组 1 2 添加按钮 addButton 2 查看按钮 2 3 获取当前选中的按钮 CheckedButton 3 从按钮组中移除按钮 removeButton 4 ID操作 4 1 设置 setI
  • Windows下的Win32串口编程

    在工业控制中 xff0c 工控机 xff08 一般都基于Windows平台 xff09 经常需要与智能仪表通过串口进行通信 串口通信方便易行 xff0c 应用广泛 一般情况下 xff0c 工控机和各智能仪表通过RS485总线进行通信 RS4
  • Ubuntu内网穿透

    本文借鉴 使用frp进行内网穿透 少数派 目录 1 准备材料 2 服务端部署 3 服务端后台运行 4 客户端部署 1 准备材料 1 一台具有公网IP的实体机 xff08 服务端 xff0c 也可以是vps 2 一台网页部署内网的实体机 客户
  • Ubuntu系统基本操作

    文章中所需要的文件可以在这里下载 链接 xff1a https pan baidu com s 1NYXxHD0jebngmCTEwgjGbQ 提取码 xff1a 2jyo 目录 1 安装谷歌浏览器 2 修改开机启动项 3 快捷键查找与设置
  • Ubuntu向日葵锁定之后忘记密码后解除锁定状态

    此操作会重置本机识别码与本机验证码 我们在使用向日葵的时候会使用锁定按钮 设置完密码之后 xff0c 我们忘了 xff0c 就会导致无法使用向日葵 重新安装也不能解决问题 xff0c 这个时候我们找到etc orayconfig conf
  • 26.疲劳检测

    目录 1 项目介绍 2 代码实现 2 1 导入库 2 2 定义68个关键点 2 3 定义eye aspect ratio 2 4 定义参数 2 5 定义阈值 2 6 定义次数 2 7 创建检测器 2 8 获取左眼与右眼的起始点与终止点 2
  • NX点亮oled

    效果是这样的 目录 1 接线 2 配置环境 3 运行代码 4 显示开发板信息 1 接线 小屏幕的名称叫oled xff0c 使用芯片SSD1306驱动 上面有四个引脚 xff0c 与NX接线如下 VCC 5V GND GND SDA 3 S
  • 43.一维卷积-航空公司评论情感预测

    之前我们使用的都是二维卷积 xff0c 二维卷积处理图像问题 xff0c 这次我们使用一维卷积 xff0c 一维卷积处理序列问题 一维卷积就是在一个序列上进行滑动 xff0c 从而得出一维卷积的结果 xff0c 详细一维卷积的介绍可以看一下
  • serial库常见用法

    安装的时候要输入 pip install pyserial 进行安装 serial是python做串口通讯的库 xff0c 在这里介绍了NX与Windows串口通讯 NX串口通讯windows Suyuoa的博客 CSDN博客 目录 1 使
  • Ubuntu开机自启动一些东西

    有三种方式做开机自启动 目录 1 免除sudo密码 2 Startup 2 desktop 3 service 1 免除sudo密码 做完这一步你的所有sudo命令都不会再让你输密码了 如果你的开机自启动的东西需要sudo xff0c 那么
  • 附录3-动态组件 component与keep-alive setup()写法

    目录 1 基本使用 2 按钮切换组件 3 keep alive 3 1 在切换组件的时候 xff0c 默认情况下被切换的组件就会被销毁 3 1 1 数据情况 3 1 2 生命周期函数情况 3 2 使用 keep alive 3 3 keep
  • 附录11-插件ESLint与prettier

    ESLint是提示错误的 xff0c prettier是帮你解决错误的 目录 1 ESLint 1 1 安装 1 2 配置 1 3 效果 2 prettier 1 ESLint 1 1 安装 1 2 配置 在插件介绍中 xff0c 搜索 e
  • 用 C 语言编写 Windows 服务程序

    NTService cpp Defines the entry point for the console application include lt windows h gt include lt stdio h gt define S
  • 10.过滤器

    过滤器是做文本格式化的 xff0c 只能用在 插值表达式 与 v bind 上 xff0c 在vue3中已经被弃用了 xff0c 这里我简单记录一下并写一下在vue3的替代方法 目录 1 基本使用 1 1 vue2中的写法 1 2 vue3
  • 24.eslint

    eslint是约束代码写法的插件 xff0c 比如组件的命名必须要用驼峰命名这种 eslint官网 检测并修复 JavaScript 代码中的问题 ESLint 插件化的 JavaScript 代码检查工具 目录 1 vue cli的esl
  • CocoaPods的使用——pod install pod install --repo-update pod update pod update --repo-update

    Podfile文件中 xff0c 使用某个库时 不指定版本 xff0c 表示希望使用最新版本 xff0c 如 pod SDWebImage 指定明确版本 xff0c 表示只想要这个版本 xff0c 如 xff1a pod 39 SDWebI
  • SceneDelegate有什么作用?删除有什么影响

    自从Xcode11发布以来 xff0c 当你使用新XCode创建一个新的iOS项目时 xff0c SceneDelegate会被默认创建 xff0c 它到底有什么用呢 xff1f 在iOS 13 xff08 及以后版本 xff09 上 xf
  • UICollectionViewCell自适应宽度

    如图所示效果 xff0c 根据字符长度自适应UICollectionViewCell的大小 xff0c 同时进行左对齐处理 如何实现 继承UICollectionViewFlowLayout创建子类 xff0c 并实现相关的方法 xff0c
  • 微信小程序开发——JS中字符和数组的操作

    字符的操作 span class token keyword var span word span class token operator 61 span span class token string 34 hello world 34

随机推荐

  • 微信小程序开发——字体样式设置

    font style文字样式 normal 正常字体italic 斜体字oblique 倾斜字体 font weight文字粗细 取值范围 100 900normal 相当于400bold 粗体 相当于700bolderlighter fo
  • 异常处理——richview不显示cloud路径的图片

    图片上传后 xff0c 得到的文件路径为cloud xxx png格式 xff0c 使用image组件时 xff0c 正常显示 xff0c 但使用richview富文本组件时 xff0c 未显示出来 此时 xff0c 需要通过使用wx cl
  • 编译错误“Too many arguments to function call....”

    运行编译过程中出现错误 xff0c 并提示 Too many arguments to functions call expected 的信息 xff0c 如图一 遇到这种情况时 xff0c 该如何解决呢 xff1f 解决方法是将属性 En
  • CocoaPods的使用——cocoapods的升级更新

    最近使用cocoa pods时提示版本过低需要升级才能正常使用 但是在升级过程中又出现了问题 首先我是直接使用语句 xff1a sudo gem install cocoapods 进行更新升级的 xff0c 没想到又报错了 接着我在想是不
  • http请求方法(GET、POST、HEAD、OPTIONS、PUT、DELETE、TRACE、CONNECT)

    根据HTTP标准 xff0c HTTP请求可以使用多种请求方法 HTTP的1 0版本中只有三种请求方法 xff1a GET POST 和 HEAD方法 到了1 1版本时 xff0c 新增加了五种请求方法 xff1a OPTIONS PUT
  • MongoDB可视化工具 Studio 3T

    告别终端使用可视化工具Studio 3T对MongoDB进行数据库的操作 简单的使用步骤介绍 1 启动MongoDB服务器 xff08 方法见MongoDB介绍与安装中的介绍 xff09 2 连接MongoDB服务器 3 操作数据库
  • 微信小程序开发——form表单

    WeChat小程序交流 xff08 QQ群 xff1a 769977169 xff09 效果图 代码示例 1 xxx wxml lt form bindsubmit 61 39 submitClick 39 bindreset 61 39
  • 苹果电脑(Mac mini或Macbook或iMac)恢复出厂设置

    苹果电脑 xff08 Mac mini或Macbook或iMac xff09 恢复出厂设置 xff0c 首先要做好如下的准备 xff1a 第一 xff1a 数据的备份 xff1b 第二 xff1a 保证正常的wifi连接 xff1b 第三
  • VSLAM基础(一)————常见特征点提取算法及匹配优化

    过年期间闲来无事 xff0c 就想来把这半年学习的一些视觉知识 xff08 视觉slam相关 xff09 做个梳理 xff0c 就以这篇图像特征点提取与匹配作为开头吧 一 关键点与描述子 关键点 xff1a 图像上某些特殊的 具有代表的点
  • 【2017CS231n】第十五讲:神经网络模型压缩和加速(硬件、算法层面)

    一 算法 1 剪枝 不是所有的神经网络连接都有用 减少连接 xff0c 但不降低准确性 尝试性 xff1a 剪枝 xff0c 训练不断重复 xff0c 找到对准确性影响最高的那一部分连接 2 参数共享 1 98 2 09 1 92 1 87
  • 程序员面试等通知一般多久?

    最近面试的人比较多 xff0c 毕竟是金三银四嘛 xff0c 竞争也挺大的 xff0c 很多人在面试之后 xff0c 久久没有收到入职通知 xff0c 等待是一件非常痛苦的事情 那么程序员面试等通知一般多久 xff1f 多久没有发通知就等于
  • 程序员简历项目经验怎么写?

    我是一个典型的互联网公司程序员 xff0c 也见过无数的程序员简历 xff0c 包括很多优秀的程序员简历 xff0c 看了可以让人眼前一亮 xff0c 优美简洁的简历模板 xff0c 项目经验工作重点突出 也见过更多的写得不好的简历 程序员
  • OpenRAVE

    机器人的高级功能 机械手臂控制 软件方面 在ros里 有moveit 研究的过程中 扩展到了openrave专业包 Welcome to OpenRAVE Latest Official Release 0 8 2 OpenRAVE pro
  • C++——STL初识

    一 为什么需要STL xff1f 目的 xff1a 为了建立一套重复利用的东西 使用STL可以避免从事大量重复的工作 为建立数据结构的一套标准 xff0c 诞生了STL 二 基本概念 STL是标准模板库 STL从广义上分为 xff1a 容器
  • Showing progress bar in a status bar pane

    This article was contributed by Brad Mann This code creates a progress bar anywhere in the status window and the control
  • 大小端字节序转换

    特点 各主机的字节序可能不同 xff0c 网络协议指定的通讯字节序为大端 只有在多字节数据处理时才需要考虑字节序 运行在同一台计算机的进程互相通信时 xff0c 不需要考虑字节序 二 字节序转换函数 头文件 xff1a include lt
  • 51单片机控制0.96寸OLED(IIC接口)

    1 OLED初步认识 OLED Organic Light Emitting Diode xff0c 即有机发光二极管 OLED由于同时具备自发光 xff0c 不需背光源 xff0c 对比度高 xff0c 厚度薄 xff0c 视角广 xff
  • 51单片机控制LCD1602模块

    51单片机控制LCD1602模块 视频播放 xff1a LCD1602视频 xff08 1 xff09 LCD1602概述 先来看看LCD1602什么意思 xff1f Liquid Crystal Display LCD 表示液晶显示 xf
  • LCD1602模块如何显示自定义字符

    相信大家现在知道了如何通过查字库表的方法来显示表中的任意一个字符 假如现在我想显示某个温度值 xff0c 需要标志出温度符号 C xff0c 现在你去字库表里面查找 xff0c 发现根本找不到这个符号 xff0c 那怎么办 xff1f 下面
  • 51单片机控制温度传感器DS18B20

    xff08 1 xff09 DS18B20初步认识 DS18B20是美国DALLAS半导体公司推出的一种数字化单总线器件 xff0c 属于新一代适配微处理器的改进型智能温度传感器 我们先来看看DS18B20在芯片手册上的标题 DS18B20