DS18B20温度转换与显示
来源:互联网 发布:雷光夏 知乎 编辑:程序博客网 时间:2024/05/01 07:03
单片机练习 - DS18B20温度转换与显示
最近都在学习和写单片机的程序, 今天有空又模仿DS18B20温度测量显示实验写了一个与DS18B20基于单总线通信的程序.
DS18B20 数字温度传感器(参考:智能温度传感器DS18B20的原理与应用)是DALLAS 公司生产的1-Wire,即单总线器件,具有线路简单,体积小的特点。因此用它来组成一个测温系统,具有线路简单,在一根通信线,可以挂很多这样的数字温度计。DS18B20 产品的特点:
(1)、只要求一个I/O 口即可实现通信。
(2)、在DS18B20 中的每个器件上都有独一无二的序列号。
(3)、实际应用中不需要外部任何元器件即可实现测温。
(4)、测量温度范围在-55 到+125℃之间; 在-10 ~ +85℃范围内误差为±5℃;
(5)、数字温度计的分辨率用户可以从9 位到12 位选择。将12位的温度值转换为数字量所需时间不超过750ms;
(6)、内部有温度上、下限告警设置。
DS18B20引脚分布图
DS18B20 详细引脚功能描述:
1、GND 地信号;
2、DQ数据输入出引脚。开漏单总线接口引脚。当被用在寄生电源下,此引脚可以向器件提供电源;漏极开路, 常太下高电平. 通常要求外接一个约5kΩ的上拉电阻.
3、VDD可选择的VDD 引脚。电压范围:3~5.5V; 当工作于寄生电源时,此引脚必须接地。
DS18B20存储器结构图
暂存储器的头两个字节为测得温度信息的低位和高位字节;
第3, 4字节是TH和TL的易失性拷贝, 在每次电复位时都会被刷新;
第5字节是配置寄存器的易失性拷贝, 同样在电复位时被刷新;
第9字节是前面8个字节的CRC检验值.
配置寄存器的命令内容如下:
R0和R1是温度值分辨率位, 按下表进行配置.默认出厂设置是R1R0 = 11, 即12位.
温度值分辨率配置表
R1R0分辨率最大转换时间(ms)009bit93.75(tconv/8)0110bit183.50(tconv/4)1011bit375(tconv/2)1112bit750 (tconv)4种分辨率对应的温度分辨率为0.5℃, 0.25℃, 0.125℃, 0.0625℃(即最低一位代表的温度值)
12位分辨率时的两个温度字节的具体格式如下:
低字节:2^32^22^12^02^-12^-22^-32^-4
高字节:SSSSS2^62^52^4
其中高字节前5位都是符号位S, 若分辨率低于12位时, 相应地使最低为0, 如: 当分辨率为10位时, 低字节为:2^32^22^12^02^-12^-200
, 高字节不变....
一些温度与转换后输出的数字参照如下:
温度数字输出换成16进制+125℃00000111 11010000 07D0H+85℃00000101 010100000550H+25.0625℃00000001 100100010191H+10.125℃00000000 1010001000A2H+0.5℃00000000 000010000008H0℃00000000 000000000000H-0.5℃11111111 11111000FFF8H-10.125℃11111111 01011110FFE5H-25.0625℃11111110 01101111FF6FH-55℃11111100 10010000FC90H由上表可看出, 当输出是负温度时, 使用补码表示, 方便计算机运算(若是用C语言, 直接将结果赋值给一个int变量即可).
DS18B20 的使用方法:
由于DS18B20 采用的是1-Wire 总线协议方式,即在一根数据线实现数据的双向传输,而对单片机来说,我们必须采用软件的方法来模拟单总线的协议时序来完成对DS18B20芯片的访问。
由于DS18B20是在一根I/O线上读写数据,因此,对读写的数据位有着严格的时序要求。
DS18B20有严格的通信协议来保证各位数据传输的正确性和完整性。
该协议定义了几种信号的时序:初始化时序(dsInit()实现)、读时序(readByte())、写时序(writeByte())。
所有时序都是将主机作为主设备,单总线器件作为从设备。而每一次命令和数据的传输都是从主机主动启动写时序开始,如果要求单总线器件回送数据,在进行写命令后,主机需启动读时序完成数据接收。数据和命令的传输都是低位在先。
DS18B20与单片机连接电路图:
利用软件模拟DS18B20的单线协议和命令:主机操作DS18B20必须遵循下面的顺序
1. 初始化
单线总线上的所有操作都是从初始化开始的. 过程如下:
1)请求: 主机通过拉低单线480us以上, 产生复位脉冲, 然后释放该线, 进入Rx接收模式. 主机释放总线时, 会产生一个上升沿脉冲.
DQ : 1 -> 0(480us+) -> 1
2)响应: DS18B20检测到该上升沿后, 延时15~60us, 通过拉低总线60~240us来产生应答脉冲.
DQ: 1(15~60us) -> 0(60~240us)
3)接收响应: 主机接收到从机的应答脉冲后, 说明有单线器件在线. 至此, 初始化完成.
DQ: 0
2. ROM操作命令
当主机检测到应答脉冲, 便可发起ROM操作命令. 共有5类ROM操作命令, 如下表
命令类型 命令字节功能Read Rom 读ROM 33H读取激光ROM中的64位,只能用于总线上单个DS18B20器件情况, 多挂时会发生数据冲突Match Rom匹配ROM55H此命令后跟64位ROM序列号,寻址多挂总线上的对应DS18B20.只有序列号完全匹配的DS18B20才能响应后面的内存操作命令,其他不匹配的将等待复位脉冲.可用于单挂或多挂两种情况.Skip Rom 跳过ROMCCH可无须提供64位ROM序列号即可运行内存操作命令, 只能用于单挂.Search Rom搜索ROMF0H通过一个排除法过程, 识别出总线上所有器件的ROM序列号Alarm Search告警搜索ECH命令流程与Search Rom相同, 但DS18B20只有最近的一次温度测量时满足了告警触发条件的, 才会响应此命令.
3. 内存操作命令
在成功执行ROM操作命令后, 才可使用内存操作命令. 共有6种内存操作命令:
命令类型命令字节功能
Write Scratchpad
写暂存器
Read Scratchpad
读暂存器
Copy Scratchpad
复制暂存器
Convert T
温度转换
Recall E2
重调E2暂存器
Read Power Supply
读供电方式
4. 数据处理
DS18B20要求有严格的时序来保证数据的完整性. 在单线DQ上, 有复位脉冲, 应答脉冲, 写0, 写1, 读0, 读1这6种信号类型. 除了应答脉冲外, 其它都由主机产生. 数据位的读和写是通过读、写时隙实现的.
1) 写时隙: 当主机将数据线从高电平拉至低电平时, 产生写时隙.所有写时隙都必须在60us以上, 各写时隙间必须保证1us的恢复时间.
写"1" : 主机将数据线DQ先拉低, 然后释放15us后, 将数据线DQ拉高;
写"0" : 主机将DQ拉低并至少保持60us以上.
2)读时隙: 当主机将数据线DQ从高电平拉至低电平时, 产生读时隙. 所有读时隙最短必须持续60us, 各读时隙间必须保证1us的恢复时间.
读: 主机将DQ拉低至少1us,. 此时主机马上将DQ拉高, 然后就可以延时15us后, 读取DQ即可.
源代码: (测量范围: 0 ~ 99度)
来源:http://www.cnblogs.com/fengmk2/archive/2007/03/11/670955.html
- DS18B20温度转换与显示
- DS18B20温度格式转换
- DS18B20显示温度并报警
- DS18B20 LCD显示当前温度
- DS18B20温度传感器利用LCD显示室内温度
- STC15F2K60S2读取DS18B20温度串口显示
- 基于STM32与DS18B20的温度采集
- LCD1602显示+ds18b20温度测试+ds1302时钟显示
- 用ds18b20测试温度并且显示在LCD1602上
- ATMEGA16读取DS18B20温度,1602显示,并用proteus仿真,成功。
- DS18B20的温度测量
- DS18B20温度模块.C
- 51+DS18B20测量温度
- 1602液晶显示DS18B20温度
- DS18B20温度测量
- DS18B20温度传感源代码
- stm32---DS18B20温度
- 单片机温度控制系统DS18B20
- 西安34条公交线路增发区间车 六条线增发大站快车
- jsp路径问题的总结
- 国内自主研发的游戏引擎一览
- 听说访问量超过1W要发帖
- JAVA自学之路
- DS18B20温度转换与显示
- 衡量引擎的主要指标和参数
- __asm__ __volatile__内嵌汇编用法简述
- AndroidWidget基础知识
- 2012暑期的学习任务安排
- 西安公交多举措缓堵 34条公交线增发173辆区间车
- 设计模式学习(3)
- apache 版本信息控制
- UINT 的一些简单的说明