ds18b20温度转换指令_【原创】基于单片机的DS18B20温度显示
DS18B20电路解析
一:功能要求
(1)DS18B20正确测量温度,小数点后保留一位;
(2)数码管显示芯片测得的数据,然后每2秒一次,发送给串口;
二:原理图
三:程序流程图及流程解析
四:时序图
(1)初始化时序图
是不是觉得DS8B20程序好简单,轻轻松松就能解决?
也许现在的你看到该时序认为极为简单,但是写文档的我之前是何等的纠结
首先讲讲芯片复位的问题
主机发送复位脉冲:
(A)480us≤Master_TX≤960us
(B)数据线SDA释放后慢慢回升时间; 15us≤T_SDA≤60us
(C)60us之后,从机自动拉低,表示从机回应了主机(如果从机没有拉低,可能芯片坏了)
(D)第三步骤操作:SDA=1;delayus(100);present=SDA; //此时从机肯定拉低了,我们可以提取此时SDA的数据,作为判定依据
//presence的判定,需要在 等于0的区域才行,所以 大于60us后再判定
(E)注意,关键点到了, 480us≤ Master_RX; //必须满足该条件,不然复位会失败;
(2)‘写’时序图 + ‘读’时序图
再讲讲读写数据的关键点
写数据:
SDA=0;
delayus(2)//大于1us即可;
SDA=1;//释放总线
判定需要写入的数据是1,还是0;// SDA=1 SDA=0;
延时超过60us即可;
读数据:(在此处栽过跟头)
SDA=0;
delayus(2)//大于1us即可;
SDA=1;//释放总线
重点来了;延时最好15us以内;最大20us(我编写程序的经验值,已经实践过)_nop_();
Ds18b20_value=SDA;
delayus(45);
五:引脚说明
DQ
IN_OUT数据输入,数据输出 端口
VCC
电源端
Vss(GND)
地端
六:详细解析
1)DS18B20芯片,测量的温度范围为 -55℃~~125℃(在-10℃~~85℃范围内,误差为5℃)
2)数字温度计的分辨率,用户可以选择 9bit~12bit中,任意一个。
3)根据DS18B20的通讯协议,主机(单片机)控制DS18B20完成温度转换须经过三个步骤才,能对DS18B20进行预定的操作:
(1)每一次读写之前都要对DS18B20进行 复位操作,
(2)复位成功后发送一条ROM指令,
(3)发送RAM指令,
6)掉电后,TH,TL里面的值,仍然保存
如果测量的温度高于TH的值,或者小于TL的值,DS18B20内部的警告标志将被置位
7)内部高速暂存器的第五个byte,配置寄存器,用于确定DS18b20的分辨率,默认是12bit
9)DS18B20,64位ROM
0~~~~~7 8~~~~55 56~63
单线系列编码 芯片唯一序列号 CRC冗余校验码
5)DS18B20内部有两个存储器,高速暂存器RAM+非易失性可擦除E2PRAM。
高速暂存器RAM,存放
非易失性可擦除E2PRAM
3)如下为,DS18B20高速暂存器RAM的结构
4)DS18B20输出的数据,bit位是:低位在前,高位在后,byte位是低位在前,高位
在后;
比如:温度值低位 (LS Byte) 温度值高位 (MS Byte)
6)ROM指令
7)RAM指令
八,我不明白,为何在 复位脉冲之前,需要将暂存器中TH,TL,配置寄存器的值都写完???
九:存在一个误区,读暂存器0BEH,是读取暂存器RAM中的九个数据分别为:
读出 温度的低8bit数据
读出 温度的高8bit数据
读出 温度的上限报警TH(8bit数据)---掉电后不保存(上电时,自动将非易失性RAM(E2PRAM)中存放的TH值拷贝到暂存器RAM中)
读出 温度的下限报警TL(8bit数据)---掉电后不保存(上电时,自动将非易失性RAM(E2PRAM)中存放的TH值拷贝到暂存器RAM中)
读出 配置寄存器内部数值 ---掉电后不保存(上电时,自动将非易失性RAM(E2PRAM)中存放的TH值拷贝到暂存器RAM中)
读出 1byte的保留字节
读出 1byte的保留字节
读出 1byte的保留字节
读出 前面8个byte的CRC校验字节
十:
在DS18b20复位后,释放数据总线,60us后,DS18b20反馈回一个低电平,该低电平可以判断 复位时间是否充足或者DS18b20是否断开或者是否损坏的;
十一:
ds1820精度是0.5度。 ds1820温度=(Temperature REG)*0.5
ds18b20精度是0.0625度. ds18b20温度=(Temperature REG)*0.0625
十二:
Ds18b20的转换分辨率问题(分辨率为9bit,10bit,11bit,12bit,四种可选)
TM是测试模式位,用于设置DS18B20在工作模式还是测试模式。
DS18B20出厂时,TM被设置为1,用户不要去更改,默认的转换分辨率为12bit
十三:
连接 DS1820 的总线电缆是有长度限制的。试验中,当采用普通信号电缆传输长度超过 50m 时,读取的测温数据将发生错误。当将总线电缆改为双绞线带屏蔽电缆时,正常通讯距离可达 150m ,当采用每米绞合次数更多的双绞线带屏蔽电缆时,正常通讯距离进一步加长。这种情况主要是由总线分布电容使信号波形产生畸变造成的。因此,在用 DS1820 进行长距离测温系统设计时要充分考虑总线分布电容和阻抗匹配问题。测温电缆线建议采用屏蔽 4 芯双绞线,其中一对线接地线与信号线,另一组接 VCC 和地线,屏蔽层在源端单点接地。
十四
在 DS1820 测温程序设计中,向 DS1820 发出温度转换命令后,程序总要等待 DS1820 的返回信号,一旦某个 DS1820 接触不好或断线,当程序读该 DS1820 时,将没有返回信号,程序进入死循环。这一点在进行 DS1820 硬件连接和软件设计时也要给予一定的重视。
//======================================================================================//
我还有几个问题:
1:数据读 数据写 是否 低位在前
2:精度调节,12bit 11bit 10bit 9bit
3:读完暂存器可以不延时,直接读取 两个 8bit数据;
4:presence的判定,需要在 等于0的区域才行,所以 大于60us后再判定
5:我想用delayus(1),去掉 _nop_();_nop_();,晚上回来验证
事实证明,delayus(1)是22.7us,时序图里要求1us以外,15us内,采集数据,最大20us,
所以用delayus(1),ds18b20读不出数据,固定显示某一值或者数值跳动,临界状态
6:void ReadTempCmd()
{
ds18b20_reset();
dsWriteByte(0xcc);//skip ROM 跳过读DS18B20中的ROM序列号
dsWriteByte(0xbe); //读 暂存器
// delayus(10); //我不知道为何读完暂存器就可以直接读数据,不需要延时
7:
数据写入,单bit写入,程序如何;并转串,形成自己写程序的段子
数据读出,单bit读出,程序如何;串转并,形成自己写程序的段子
8:转换时间别忘记了
我还有几个问题:
2:数据读 数据写 是否 低位在前
3:精度调节,12bit 11bit 10bit 9bit
5:读完暂存器可以不延时,直接读取 两个 8bit数据;
6:presence的判定,需要在 等于0的区域才行,所以 大于60us后再判定
7:我想用delayus(1),去掉 _nop_();_nop_();,晚上回来验证
事实证明,delayus(1)是22.7us,时序图里要求1us以外,15us内,采集数据,最大20us,
所以用delayus(1),ds18b20读不出数据,固定显示某一值或者数值跳动,临界状态
8:void ReadTempCmd()
{
ds18b20_reset();
dsWriteByte(0xcc);//skip ROM 跳过读DS18B20中的ROM序列号
dsWriteByte(0xbe); //读 暂存器
// delayus(10); //我不知道为何读完暂存器就可以直接读数据,不需要延时
9:
数据写入,单bit写入,程序如何;并转串,形成自己写程序的段子
数据读出,单bit读出,程序如何;串转并,形成自己写程序的段子
10:转换时间别忘记了
ds18b20温度转换指令_【原创】基于单片机的DS18B20温度显示相关推荐
- ds18b20温度转换指令_学习心得 | 温度检测工程模块划分总结与案例分析
本文为明德扬原创文章,转载请注明出处! 很多朋友在学习FPGA的时候会发现模块划分很令人头大,今天我就通过明德扬温度检测工程来与大家分享一下本人的划分思路. 明德扬温度检测工程是基于FPGA的一个实用 ...
- ds18b20温度转换指令_【Proteus】DS18B20简易温控器
前言 DS18B20是单片机课设或者仿真项目中一个比较常用的数字温度传感器,因此使用DS18B20仿真一个简易的温控器,超过温度就打开风扇,低于某温度就用继电器打开加热丝.整个程序我都会附在最后,如果 ...
- ds18b20温度转换指令_DS18B20温度传感器(附代码并浅谈与或运算)
DS18B20使用的是一种比较特殊的传输协议,仅需一个接线口就能实现通信 前言 DS18B20独特的单线接口仅需一个端口引脚进行通讯,这让每一个学习到这里的人都感到很神奇.在这篇文章中我们将通过学习1 ...
- 基于单片机双路温度检测报警系统设计-基于单片机声光控智能开关控制灯设计-基于单片机热电偶智能体温检测设计-基于单片机小型家用燃气锅炉控制系统设计-基于单片机一氧化碳有毒气体采集报警系统设计
1628基于单片机双路温度检测报警系统设计(串口上位机控制) 基于pcf8591 tlc2543的双路温度检测报警系统 带串口上位机控制带仿真 源程序 温度传感器是 LM35 两路测温通道所用的ad芯 ...
- 单片机涡轮流量传感器_基于单片机的智能涡轮流量计显示仪的设计
基于单片机的智能涡轮流量计显示仪的设计 前言 基于单片机的智能涡轮流量计, 以轴向型涡轮流量计作为测量系 统, 采用智能流量显示仪并利用汽车电源供电. 阐述流量显示仪表的 设计,在硬件设计方面,采用了 ...
- ds18b20温度转换指令_51单片机驱动DS18B20温度传感器程序及心得
关于DS18B20温度传感器,在没有硬件设备的辅助下,写内部程序有些困难,因为看不到实际信号波形.对于单片机,我...渐渐的有些心灰意冷..虽然掌握了1_WIRE总线,却少了很多喜悦,下雨了...它是 ...
- ds18b20温度转换指令_ds18b20如何读取温度?温度数据怎么换算? - 全文
DS18B20是温度传感器,读写数据有一定的时序: 1.写操作 (1) 数据线先置低电平"0". (2) 延时确定的时间为15微秒. (3) 按从低位到高位的顺序发送字节(一次只发 ...
- ds18b20温度转换指令_STM32接口DS18S20温度传感器
关联知识 STM32 介绍 在本文中,我们将学习DS18B20温度传感器与STM32微控制器的接口. DS18B20不支持Arduino Dallas库和OneWire库. 这就是我们必须不使用库而编 ...
- ds18b20温度转换指令_DS18B20温度传感器使用方法以及代码
第 7 章 DS18B20 温度传感器 7.1 温度传感器概述 温度传感器是各种传感器中最常用的一种, 早起使用的是模拟温 度传感器, 如热敏电阻, 随着环境温度的变化, 它的阻值也发生线性 变化, ...
- 【设计方案分享】基于单片机温度监测监控报警系统设计-基于单片机钞票自动智能识别系统设计-基于单片机乒乓球游戏机控制系统设计-基于单片机温度监测监控报警系统设计-基于单片机矩阵键盘的电子密码锁设计
820基于单片机温度监测监控报警系统设计-设计资料 温度监测器功能描述: 1.主控芯片用的是51单片机(STC89C51). 2.使用温度传感器DS18b20采集温度. 3.用1602液晶显示显示温度 ...
最新文章
- linux jna调用so动态库
- win7清除系统托盘图标的方法
- php引擎,PHP内核探索:Zend引擎
- Oracle中删除用户和表空间的常见问题(比如:ORA-01940无法删除当前已连接用户的解决方案)
- sqlite3命令详解
- 新浪微博和SAP CRM Interaction Center(呼叫中心)的集成
- [css] 你有使用过font-size-adjust属性吗?说说它的作用是什么?
- 除法应用遇到的问题-类型及小数点
- 方法对象Spring MVC SimpleFormController
- WORD出错:绕排时,字太靠近形状
- [2022-06-21 完美解决]MacBookPro 2020 M1 开启2k HIDPI
- 矩阵微分常用公式整理
- UHD X310 MTU 大于1472 windows配置方法
- 高琪300集——入门
- 在 Windows 系统下常用的 bat 脚本分享
- Android文件解压
- Android 开发者转型 “FrameWork”必不可少
- express 热更新
- 2012_WOW_Designing Steganographic Distortion Using Directional Filters
- ATAC-seq数据分析(一)