DS18B20读出85摄氏度

2023-10-09 02:30
文章标签 读出 摄氏度 85 ds18b20

本文主要是介绍DS18B20读出85摄氏度,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

原文出处:https://blog.csdn.net/hubukaixuan/article/details/7933575

在原文的基础上,一定修改。

 

关于DS18B20初始化时候读出85摄氏度的问题,我相信很多朋友都遇到过。

很多人估计没有解决这个问题。最后不得已的情况下多读了几次,然后才开始显示。

问题就是因为,DS18B20默认是12位采样,具体时间看下表:

配置寄存器

所以每次单片机复位后,进行如下配置:

void DS18B20_Init(void)

{

ow_reset();        //初始化

write_byte(0xcc);  //忽略ROM指令

write_byte(0x4e);  //写暂存器指令

write_byte(0);        //TH值  未使用

write_byte(0);        //TL值  未使用

write_byte(0x1f);  // 采用bit数。

//配置寄存器 写入R1=0 R0=0 表示只用9位采样

//这样转换时间约为100ms 加快采样转换速度

}

然后以后读温度时候,如此操作即可:

void read_temp(void)                   //获取温度get the temperature

{

unsigned char a,b;

ow_reset();   

write_byte(0xcc);          //忽略ROM指令
write_byte(0x44);          //温度转换指令
delay_nms(110);          //-----特别要注意这个地方。延时在这里,对应上方表格的时间(注解1)
ow_reset();                 //初始化
write_byte(0xcc);          //忽略ROM指令
write_byte(0xbe);          //读暂存器指令


a = read_byte();           //读取到的第一个字节为温度LSB
b = read_byte();           //读取到的第2个字节为温度MSB

a=a>>4; //不要小数点
b=b*16;

tempwd=a+b;
strwd[0]=tempwd/100+48;
strwd[1]=(tempwd%100)/10+48;
strwd[2]=tempwd%10+48;
}
这样,保证不会读出85了。
除非当时的环境就是85摄氏度

 

注解1:

关于注解1的理解,实际时候发现一个现象,

如果延时不足:

第一次,第二次,第三次,(三次的时间和 > 表中的延时时间 )读取的数据不对,但是第四次及之后读取正确。

可以理解:第四次的读取,是第一次的的结果。那么其实在ds18b20,可能会存在次数统计,或者存储的数据一直在

如果延时足够:

第一次读取,即可回复正确的数值。


--------------------- 
作者:hubukaixuan 
来源:CSDN 
原文:https://blog.csdn.net/hubukaixuan/article/details/7933575 
版权声明:本文为博主原创文章,转载请附上博文链接!

这篇关于DS18B20读出85摄氏度的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/169708

相关文章

Qt 创建一个json数组对象写入文档并从文档读出q

void createJsonArray() {     // 创建一个JSON数组     QJsonArray jsonArray;     // 创建一些JSON对象并添加到数组中     for (int i = 0; i < 3; ++i) {         QJsonObject jsonObject;         jsonObject["key" + QString::num

51单片机-第十一节-DS18B20温度传感器(One_Wire单总线)

一、DS18B20温度传感器介绍: DS18B20是一种数字温度传感器。 测温范围:-55C - +125C 通信接口:1-Wire(单总线) 二、引脚及应用电路: 很简单,电源,接地,通讯接口。        三、内部结构: 总图: (1)备用电源 (2)器件地址 (3)控制器 (4)存储器 (5)存储器内部: B1,B2存储最低有效温度和最高有效温度。

leetcode 85:最大矩形

该题与leetcode 84类似,首先对每一行的看做宽度为1的矩阵,如第一行可以表示我1 0 1 0 0的数组  第二行可以表示为2 0 2 1 1的数组,第三行表示为3 1 3  2 2的数组,。。。对每一行数组求最大的柱状图中的最大矩形 方法1:比较笨的方式 时间复杂度较高 int maximalRectangle(std::vector<std::vector<char>>& mat

大数据-Hadoop-HDFS(一):数据存储模块(Hadoop Distributed File System,分布式文件系统)【适合一次写入,多次读出的场景】【可以追加数据,但不可修改已有数据】

一、HDFS概述 1、HDFS产出背景及定义 随着数据量越来越大,在一个操作系统存不下所有的数据,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,迫切需要一种系统来管理多台机器上的文件,这就是分布式文件管理系统。HDFS只是分布式文件管理系统中的一种。HDFS(Hadoop Distributed File System),它是一个文件系统,用于存储文件,通过目录树来定位

Linux驱动开发基础(DS18B20温度模块)

所学来自百问网 目录 1.DS18B20 简介 2.硬件设计 3.软件设计 3.1 存储器介绍 3.2 通信时序 3.2.1 初始化时序 3.2.2 写时序 3.2.3 读时序 3.3 常用命令 4. 示例代码 4.1 驱动代码 4.2 应用代码 4.3 Makefile 4.4 实验效果 1.DS18B20 简介 DS18B20 温度传感器具有线路简单、

Python 算法交易实验85 QTV200日常推进-钳制指标与交易量

说明 继续保持思考与尝试 最近挺有意思的,碰到很多技术上的问题,其解决方案都类似“阴阳两仪”的概念。 "阴阳两仪"是中国古代哲学中的一个重要概念,源自《易经》(又称《周易》)。它是对宇宙间最基本对立统一规律的概括,用以描述事物存在的两种基本状态或属性。 阴阳最初是指日光的向背,向日为阳,背日为阴。后来,阴阳的概念被广泛应用于自然界和社会生活的各个方面,成为解释自然现象和社会现象的一种

基于DS18B20的温度检测

前言         DS18B20是DALLAS半导体公司生产的单总线数字温度传感器,其输出的是数字信号,具有体积小,功耗低,抗干扰能力强,精度高的特点。         温度范围-55摄氏度至+125摄氏度,在-10摄氏度至+85摄氏度可以达到不超过 0.5摄氏度的误差。单端口节省FPGA接口资源。传感器内部含EEPROM内部存储温度阈值,测量分辨率,系统掉电保护数据。 正文

《ZigBee开发笔记》第五部分 外设篇 - 协议栈实验 第1章 CC2530温度传感器DS18B20

1实验目的 掌握 ZStack 的工作原理;知道如何添加 DS18B20 驱动到协议栈上;知道如何在协议栈上读取、发送、接收温度。 2实验设备 硬件:PC 机一台; ZB2530(底板、核心板、仿真器、USB 线、OLCD) 两套 ;DS18B20 一个 软件:win7 系统,IAR 8.20 集成开发环境、串口助手 3实验相关电路图 图 1 4实验分析 注意:本实验是以点

MATLAB 计算凹凸多边形的面积(85)

MATLAB 计算凹凸多边形的面积(84) 一、算法介绍二、算法实现1.代码 一、算法介绍 计算凹凸多边形的面积,并输出计算结果,可视化 二、算法实现 1.代码 % 设置多边形的顶点坐标% 这里以一个五边形为例x = [1, 3, 4

将一个或多个OC对象写入文件/从文件读出

利用NSCoding协议中的编码和解码方法进行实现对象实例的文件存储 1、过程描述:先将即将写入文件的类遵守NSCoping协议,然后在它的.m文件中添加协议中的 -(void)encodeWithCoder:(NSCoder *) aCoder编码方法和-(id)initWithCoder: (NSCoder *)aDecoder解码方法,在实现这些前提之后,就可以调用NSKeyedAr