传感器自学笔记第十四章——DS18B20温度传感器(附自己写的好用的51单片机单、多路温度采集代码)

本文详细介绍了DS18B20温度传感器的使用,包括单点和多点温度采集流程,解答了关于操作中的常见问题。并提供了51单片机单、多路温度采集的代码示例,帮助读者理解和应用DS18B20。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

作者:GWD 时间:2019.6.30

一、 学习要点:
1、问:读操作中为何还要赋值后再移位操作,而不直接对DQ移位?
在这里插入图片描述
答:bit类型变量不可以移位操作,只有char,int这类才可以移位操作;
2、问:多点检测试验时有一个18b20的ROM序列号产生了9个字节的地址序列怎么办?
在这里插入图片描述
答:设备生产时的bug,对比正常的序列码后删除掉一个序列后试验(0x0d)正确;
3、问:手册中给出精度分辨率为0.0625如何转换成现实中需要的温度?
答:精度分辨率为0.0625的意思就是,传感器检测值每增1,十进制时候大0.0625所以检测值*0.0625就是需要的数值了,再乘以100后,百分位的小数就算到整数的各位和十位中了,方便打印数据;
4、问:18B20单点采集流程?
答:第一步:发送起始信号
第二步:发送rom指令 0xcc(跳过rom命令);
第三步:发送功能命令0x44(开始转换温度指令);
第四步:发送起始信号;
第五步:发送rom指令 0xcc(跳过rom命令);
第六步:发送功能指令0xbe (读取暂存器指令);
第七步:两次读取18B20的值,然后转换就可以了;
注:起始信号+rom命令+功能指令为一组,不论什么时候只要操作18B20就要这三组一起不拆开。
5、问:18B20多点采集流程
答: 第一步:发送起始信号
第二步:发送rom指令 0x33(读取rom命令),读取到8字节的数值,把这8个char变量在串口助手hex模式下打印出来后,存入char[8]数组即可,以此方式可以知道新加入总线的18b20的rom值;
第三步:发送功能命令0x44(开始转换温度指令)
第四步:发送起始信号
第五步:发送rom指令 0x55(匹配rom命令),发送此命令后紧跟着8字节的rom地址,要读取哪个18b20就紧跟着哪个器件的地址码;
第六步:发送功能指令0xbe (读取暂存器指令)
第七步:两次读取18B20的值,然后转换就可以了。
6、问:hex输出功能的适用场合?
答:调时程序时需要知道程序运行到某处时的数值,hex打印出来的是16进制数值,比如在18B20查看rom地址时就应该用hex输出模式。
二、手册分析
1、传感器特性操作流程:
在这里插入图片描述
在这里插入图片描述
2、仅需要一个管脚来通信。每个设备的内部 ROM 上都烧写了一个独一无二的 64 位序列号,温度可测量范围为: -55℃至+125℃(-67℉至+257℉)。内部温度采集精度可以由用户自定义为9-Bits 至 12-Bits;
3、引脚定义:
在这里插入图片描述
3、内部框图:
在这里插入图片描述
1)、内部64位ROM存储第一无二的序号;
2)、在1—Wire总线系统中,微控制器(主设备)通过每个设备的 64 位序列号来识别该总线上的设备。因为每个设备都有一个独一无二的序列号,挂在一个总线上的设备理论上是可以无限个的;
4、DS18B20的另外一个特性就是可以无需外部电源供电。当数据线 DQ 为高的时候由其为设备供电。 总线拉高的时候为内部电容 (Spp) 充电, 当总线拉低是由该电容向设备供电。 这种由 1-Wire总线为设备供电的方式称为“寄生电源”。
5、DS18B20的核心功能是直接温度 -数字测量。其温度转换可由用户自定义为 9、 10、 11、 12 位精度分别为 0.5℃、 0.25℃、 0.125℃、 0.0625℃分辨率。值得注意的是,上电默认为 12 位转换精度。 DS18B20 上电后工作在低功耗闲置状态下。主设备必须向 DS18B20 发送温度转换命令 [44h]才能开始温度转换。
7. 温度数据以一个 16 位标志扩展二进制补码数的形式存储在温度寄存器中(图2-3)。符号标志位(S)温度的正负极性:正数则 S=0,负数则 S=1。如果 DS18B20 被定义

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值