(九)One-Wire总线-DS18B20

文章目录

  • One-Wire总线篇
    • 复位和应答
    • 读/写0,1
  • DS18B20篇
    • 原理图
    • 概述
    • 最主要特性
    • 几个重要的寄存器(部分要掌握)
      • 存储有数字温度结果的2个字节宽度的温度寄存器
        • 寄存器描述:
        • 寄存器说明:
      • 一个字节的过温和一个字节的低温(TH和TL)温度报警寄存器
        • 寄存器描述:
        • 寄存器说明:
      • 一个字节的配置寄存器(自定义温度转换为9、10、11、12位精度)
        • 寄存器描述:
        • 寄存器说明:
    • 总览一下寄存器
    • DS18B20通讯规则以及指令
      • 哪些ROM指令
      • 哪些DS18B20的指令
    • DS18B20的温度读取应用
      • 思路
      • 重点代码
      • 现象演示


One-Wire总线篇

one-wire的底层驱动比赛会提供

资源包下载通道(涵盖了赛场所有资料)

复位和应答

在这里插入图片描述
简单理解:
规则:一个复位信号必须大于960us
主设备(单片机)拉低总线超过480us,紧接着释放总线(拉高)也就是来个上升沿,等待15us-60us后,再拉低总线60us-240us发送一个存在脉冲。

读/写0,1

在这里插入图片描述
简单理解:
规则:读写一个位,要在60us到120us内完成,位与位之间,读写间隔1us

写0再写1:主机将拉低总线,快速释放总线,准备要写入的数据(写0-拉低总线),这些操作要在15us内完成,然后维持至少60us;然后再释放总线1us,继续写1,拉低总线,快速释放总线,准备 要写入的数据(写1-拉高总线),同样这些操作要在15us内完成,再维持60us,然后释放总线超过1us;

读0再读1:主机拉低总线,快速释放总线,这个操作也是要在15us内完成,然后检测总线上的电平被DS18B20拉高了还是低了即可;

DS18B20篇

原理图

可以看到18b20通过P14口挂载在单总线上的!
在这里插入图片描述

打开手册可以看到:

DS18B20英文手册

根据自己理解翻和译,提取重要信息如下

概述

DS18B20数字温度传感器提供9-Bit到12-Bit的摄氏温度测量精度和一个用户可编程的非易失性且具有过温和低温触发报警的报警功能。

DS18B20采用的1-Wire通信即仅采用一个数据线(以及地)与微控制器进行通信。该传感器的温度检测范围-55℃至+125℃。此外,DS18B20可以直接由数据线供电而不需要外部电源供电。

每片DS18B20都有一个独一无二的64位序列号,这个系列号是烧在内部ROM里面的,所以一个1-Wire总线上可连接多个DS18B20设备。

最主要特性

· 独特的1-Wire总线接口仅需要一个管脚来通信。(DQ引脚

· 每个设备的内部ROM上都烧写了一个独一无二的64位序列号(板子上面就一个DS18B20 所以 一般直接跳过ROM指令,不进行配对)

· 内部温度采集精度可以由用户自定义为9-Bits至12-Bits(这里一般不去设置)

· 温度转换时间在转换精度为12-Bits时达到最大值750ms写代码时候要注意

几个重要的寄存器(部分要掌握)

存储有数字温度结果的2个字节宽度的温度寄存器

在这里插入图片描述

寄存器描述:

用来存储数字温度转换结果

温度数据以一个16位标志扩展二进制补码数的形式存储在温度寄存器中(见Figure2)
说人话:用来储存测得的温度的,高5位作为符号位,其余位做数据位

寄存器说明:

高字节5位为符号标志位(S)温度的正负极性:正数则S=0,负数则S=1。(一般比赛都是正温度)

如果DS18B20被定义为12位的转换精度,温度寄存器中的所有位都将包含有效数据。
若为11位转换精度,则bit 0为未定义的。
若为10位转换精度,则bit 1和bit 0为未定义的。
若为9位转换精度,则bit 2、bit 1和bit 0为未定义的。

下表格为在12位转换精度下温度输出数据与相对应温度之间的关系表。

在这里插入图片描述


一个字节的过温和一个字节的低温(TH和TL)温度报警寄存器

在这里插入图片描述

寄存器描述:

(比赛用不到了解即可

用来储存过温和低温的对比参照数值

过温和低温(TH和TL)温度报警寄存器是非易失性的(EEPROM),所以其可以在设备断电的情况下保存。

寄存器说明:

符号标志位(S)温度的正负极性:正数则S=0,负数则S=1。其余位为数据位

过温和低温(TH和TL)温度报警寄存器是一个8位的寄存器,所以在于其比较时,2个字节的温度寄存器的4位至11位才是有效的数据。

如果温度转换数据小于或等于TL及大于或等于TH,DS18B20内部的报警标志位将会被置位。该标志位在每次温度转换之后都会更新,因此,如报警控制消失,该标志位在温度转换之后将会关闭。

说人话:俩寄存器,用看存放过温和低温阈值温度数据的,也就是TH和TL分别放着对比的过温和低温数值,每次测到的2个字节的温度的第4-12位数据都来跟它比较,进行报警监测


一个字节的配置寄存器(自定义温度转换为9、10、11、12位精度)

在这里插入图片描述

寄存器描述:

用来配置测温数据的精度的寄存器

说明:9、10、11、12位精度分别为0.5℃、0.25℃、0.125℃、0.0625℃分辨率。
上电默认为:12位转换精度

这里也可以看(Figure2图)每一位对应的权数
**比如:BIT0位2的负4次方,如果数据位可以达到12位精度,分辨率就是1/16 = 0.0625℃
同理 :
11位 精度就是1/8 = 0.125;
10位 精度就是1/4 = 0.25;
9位 精度就是1/2 = 0.5;

寄存器说明:

用户通过改变R0和R1的值来配置DS18B20的分辨率。上电默认为R0=1及R1=1(12位分辨率)。需要注意的是,转换时间与分辨率之间是有制约关系的。Bit 7和Bit 0至Bit 4作为内部使用而保留使用,不可被写入。

温度分辨率配置以及转化时间表:

在这里插入图片描述

总览一下寄存器

在这里插入图片描述

DS18B20通讯规则以及指令

在这里插入图片描述
访问DS18B20的事件序列如下所示:
第一步:初始化
第二步:ROM命令(紧跟任何数据交换请求)
第三步:DS18B20功能命令(紧跟任何数据交换请求)
每次对DS18B20的访问都必须遵循这样的步骤来进行,如果这些步骤中的任何一个丢失或者没有执行,则DS18B20将不会响应。
除了ROM搜索命令[F0h]和报警搜索命令[ECh]之外。当执行完这些命令之后,主设备必须回到上述步骤中的第一步,也就是必须再次初始化。

哪些ROM指令

搜索ROM[F0h]
读取ROM[33h]
匹配ROM[55h]
跳过ROM[CCh]
警报搜索[ECh]

哪些DS18B20的指令

温度转换[44h]
写入暂存寄存器[4Eh]
读取暂存寄存器[BEh]
拷贝暂存寄存器[48h]
召回EEPROM[B8h]
读取供电模式[B4h]

DS18B20的温度读取应用

思路

根据上面的通讯规则(执行命令后必须重新初始化)和指令(ROM和DS18B20指令):

步骤响应的操作
初始化init_ds18b20();
跳过ROM指令Write_DS18B20(0xcc);
启动温度转化指令Write_DS18B20(0x44);
初始化init_ds18b20();
跳过ROMWrite_DS18B20(0xcc);
读取暂存寄存器指令Write_DS18B20(0xbe);
读温度低字节low = Read_DS18B20();
读温度高字节high = Read_DS18B20();
转化温度看所需精度

说明:前面提到12位精度,需要750ms,按道理需要加上延时,但经过测试连续读取也是没问题的,因为即使这次温度没转化好,读取到的也是上一次的数值。
当然也可以避免这样操作:在每次读取完就开启温度转化,等下次到来温度肯定转化好了,再读取就没问题了

重点代码

这里以12位精度为例:

float ReadTemperature(void)
{
	float temp = 0.0;
	
	u8 high = 0;
	u8 low = 0;
	
	init_ds18b20();
	Write_DS18B20(0xcc);
	Write_DS18B20(0x44);
	
	init_ds18b20();
	Write_DS18B20(0xcc);
	Write_DS18B20(0xbe);
	
	low = Read_DS18B20();
	high = Read_DS18B20();
	temp = ((high<<8)|low)*0.0625;
	
	return temp;	
}

现象演示

(九)One-Wire总线-DS18B20



----- 如有错误欢迎大家批评指正!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/300512.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[嵌入式AI从0开始到入土]10_yolov5在昇腾上应用

[嵌入式AI从0开始到入土]嵌入式AI系列教程 注&#xff1a;等我摸完鱼再把链接补上 可以关注我的B站号工具人呵呵的个人空间&#xff0c;后期会考虑出视频教程&#xff0c;务必催更&#xff0c;以防我变身鸽王。 第一章 昇腾Altas 200 DK上手 第二章 下载昇腾案例并运行 第三章…

window使用cpolar实现内网穿透

文章目录 cpolar下载和安装启动和配置cpolar卸载 cpolar下载和安装 进入spolar官网&#xff0c;完成注册&#xff0c;下载相应的cploar版本解压和运行安装文件 配置安装路径&#xff0c;然后选择next&#xff0c;完成即可 启动和配置 点击首页的快捷图标打开网页&#xf…

python学习:实现猜数游戏和汉诺塔问题的解决

实现猜数游戏 规则&#xff1a; 计算机随机产生一个0~100的预设数字&#xff0c;让用户通过键盘输入所猜的数&#xff0c;如果大于预设的数&#xff0c;显示“遗憾&#xff0c;太大了“&#xff1b;小于预设的数&#xff0c;显示”遗憾&#xff0c;太小了“&#xff0c;如此循…

【MySQL】数据库之MMM高可用

目录 一、什么是MMM 二、关于MMM架构的说明 三、实操MMM的高可用 步骤一&#xff1a;完成主主复制、主从复制 步骤二&#xff1a;所有节点服务器都安装mysql-mmm,并完成mmm_common.conf文件的配置 步骤三&#xff1a;完成monitor节点服务器的配置文件修改mmm_mon.conf 步…

基于SSM的基金投资交易管理网站的设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

K210基础实验系列

CanMV K210 开发板: CanMV K210 是由 01Studio 设计研发&#xff0c;基于嘉楠科技边缘计算芯片 K210 &#xff08; RSIC V 架构&#xff0c; 64 位双核&#xff09;方案的一款开发板&#xff0c;采用硬件一体化设计&#xff08; K210 核心板、 摄像头、 LCD 集成在一个…

mysql进阶-重构表

目录 1. 原因 2. 如何重构表呢&#xff1f; 2.1 命令1&#xff1a; 2.2 命令2&#xff1a; 2.3 命令3&#xff1a; 1. 原因 正常的业务开发&#xff0c;为什么需要重构表呢&#xff1f; 原因1&#xff1a;某张表存在大量的新增和删除操作&#xff0c;导致表经历过大量的…

深入了解Snowflake雪花算法:分布式唯一ID生成器

&#x1f604; 19年之后由于某些原因断更了三年&#xff0c;23年重新扬帆起航&#xff0c;推出更多优质博文&#xff0c;希望大家多多支持&#xff5e; &#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有坚忍不拔之志 &#x1f390; 个人CSND主页——Mi…

JVM中对象的创建

一.JVM运行流程 JVM向操作系统申请内存&#xff0c;初始化运行时数据区&#xff0c;接下来装载使用的类&#xff0c;执行类里面相应方法的时候为当前虚拟机栈压入一个栈帧&#xff0c;方法执行完成后栈帧出栈&#xff0c;进行垃圾回收。 二.JVM中对象的创建过程 符号引用&…

MySQL数据库进阶-事务

事务 事务由单独单元的一个或多个SQL语句组成&#xff0c;在这 个单元中&#xff0c;每个MySQL语句是相互依赖的。而整个单独单 元作为一个不可分割的整体&#xff0c;如果单元中某条SQL语句一 旦执行失败或产生错误&#xff0c;整个单元将会回滚。所有受到影 响的数据将返回到…

端云协同,Akamai 与快手联合落地 QUIC 提升海外用户视频体验

10月10日&#xff0c;负责支持和保护数字化体验且深受全球企业信赖的解决方案提供商阿卡迈技术公司( Akamai Technologies, Inc.&#xff0c;以下简称&#xff1a;Akamai )( NASDAQ&#xff1a;AKAM )携手全球领先的短视频记录和分享平台快手(HK&#xff1a;1024)通过全面落地 …

【LeetCode】150. 逆波兰表达式求值(ASCII码)

今日学习的文章链接和视频链接 leetcode题目地址&#xff1a;150. 逆波兰表达式求值 代码随想录题解地址&#xff1a;代码随想录 题目简介 即将后缀表达式转换成中缀表达式并计算。 给你一个字符串数组 tokens &#xff0c;表示一个根据 逆波兰表示法 表示的算术表达式。 …

【无线通信专题】NFC通信模式及可能的应用方式

在文章【无线通信专题】NFC基本原理中我们讲到了NFC工作模式。其中NFC工作模式主要有三种,读写模式、卡模拟模式、点对点模式。 NFC通信模式丰富,NFC Forum定义了三种NFC设备:通用NFCForum设备、读写器设备和标签设备。这些NFC设备可以在三种通信模式下运行,并对应用案例进…

【DevOps-05】Integrate工具

一、简要说明 持续集成、持续部署的工具很多,其中Jenkins是一个开源的持续集成平台。 Jenkins涉及到将编写完毕的代码发布到测试环境和生产环境的任务,并且还涉及到了构建项目等任务。 Jenkins需要大量的插件保证工作,安装成本较高,下面会基于Docker搭建Jenkins。 二、Jenk…

Java Base64简单介绍

1. Base64工具 工具链接 2. Base64示例代码 public class Base64Demo {// 请注意&#xff0c;在处理二进制数据时&#xff08;例如图片或文件&#xff09;&#xff0c;不需要将字节数组转换为字符串再进行编码或解码&#xff0c;// 可以直接对字节数组进行Base64操作。上述…

【前端设计】文字聚光灯

欢迎来到前端设计专栏&#xff0c;本专栏收藏了一些好看且实用的前端作品&#xff0c;使用简单的html、css语法打造创意有趣的作品&#xff0c;为网站加入更多高级创意的元素。 案例 文字聚光灯效果可以用于网站标题 html <!DOCTYPE html> <html lang"en&quo…

File与Io流

IO&#xff08;Input/Output&#xff09;是指计算机与外部世界进行数据交换的过程。在程序中&#xff0c;IO通常用于读取输入数据或将输出数据写入到外部设备或文件中。 Java的IO库主要分为两种类型&#xff1a;字节流和字符流。 字节流&#xff08;Byte Stream&#xff09;&a…

FreeRTOS移植详解

一、前言 本文旨在讲解FreeRTOS在STM32单片机上的移植步骤&#xff0c;对于FreeRTOS在其他单片机上的移植已具有一定的参考意义。相信读者在看完这篇文章后&#xff0c;一定会有所收获&#xff01; 文末附有相关资料连接&#xff0c;有需要的读者可以自行下载。 二、FreeRTOS源…

各银行小微企业信贷相关产品和机器学习建模案例

各银行小微企业贷款业务 互联网的时代&#xff0c;大量新信息技术的涌现和网络的无处不在&#xff0c;想要抢占这片金融天地&#xff0c;必须重视小微金融业务&#xff0c;小微企业是一直具有重大潜力的客户&#xff0c;商业银行、消金公司发展小微信贷业务可以拓宽自身客户群…

NOSQL与REDIS配置与优化

目录 一、关系数据库与非关系型数据库 1.关系型数据库 2.非关系型数据库 3.关系型数据库和非关系型数据库区别 4.非关系型数据库产生背景 二、Redis 1.Redis介绍 2.Redis 优点和使用场景 三、Redis 安装部署 1.环境准备 2.安装redis 3.修改配置文件 4.定义systemd服…