最近都在学习和写单片机的程序, 今天有空又模仿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检验值.
配置寄存器的命令内容如下:
0 | R1 | R0 | 1 | 1 | 1 | 1 | 1 |
R1 | R0 | 分辨率 | 最大转换时间(ms) |
0 | 0 | 9bit | 93.75(tconv/8) |
0 | 1 | 10bit | 183.50(tconv/4) |
1 | 0 | 11bit | 375(tconv/2) |
1 | 1 | 12bit | 750 (tconv) |
2^3 | 2^2 | 2^1 | 2^0 | 2^-1 | 2^-2 | 2^-3 | 2^-4 |
S | S | S | S | S | 2^6 | 2^5 | 2^4 |
2^3 | 2^2 | 2^1 | 2^0 | 2^-1 | 2^-2 | 0 | 0 |
温度 | 数字输出 | 换成16进制 |
+125℃ | 00000111 11010000 | 07D0H |
+85℃ | 00000101 01010000 | 0550H |
+25.0625℃ | 00000001 10010001 | 0191H |
+10.125℃ | 00000000 10100010 | 00A2H |
+0.5℃ | 00000000 00001000 | 0008H |
0℃ | 00000000 00000000 | 0000H |
-0.5℃ | 11111111 11111000 | FFF8H |
-10.125℃ | 11111111 01011110 | FFE5H |
-25.0625℃ | 11111110 01101111 | FF6FH |
-55℃ | 11111100 10010000 | FC90H |
命令类型 | 命令字节 | 功能 |
Read Rom 读ROM | 33H | 读取激光ROM中的64位,只能用于总线上单个DS18B20器件情况, 多挂时会发生数据冲突 |
Match Rom匹配ROM | 55H | 此命令后跟64位ROM序列号,寻址多挂总线上的对应DS18B20.只有序列号完全匹配的DS18B20才能响应后面的内存操作命令,其他不匹配的将等待复位脉冲.可用于单挂或多挂两种情况. |
Skip Rom 跳过ROM | CCH | 可无须提供64位ROM序列号即可运行内存操作命令, 只能用于单挂. |
Search Rom搜索ROM | F0H | 通过一个排除法过程, 识别出总线上所有器件的ROM序列号 |
Alarm Search告警搜索 | ECH | 命令流程与Search Rom相同, 但DS18B20只有最近的一次温度测量时满足了告警触发条件的, 才会响应此命令. |
命令类型 | 命令字节 | 功能 |
Write Scratchpad |
4EH | 写暂存器中地址2~地址4的3个字节(TH,TL和配置寄存器)在发起复位脉冲之前,3个字节都必须要写. |
Read Scratchpad |
BEH | 读取暂存器内容,从字节0~一直到字节8, 共9个字节,主机可随时发起复位脉冲,停止此操作,通常我们只需读前5个字节. |
Copy Scratchpad |
48H | 将暂存器中的内容复制进EERAM, 以便将温度告警触发字节存入非易失内存. 如果此命令后主机产生读时隙, 那么只要器件还在进行复制都会输出0, 复制完成后输出1. |
Convert T |
44H | 开始温度转换操作. 若在此命令后主机产生时隙, 那么只要器件还在进行温度转换就会输出0, 转换完成后输出1. |
Recall E2 |
B8H | 将存储在EERAM中的温度告警触发值和配置寄存器值重新拷贝到暂存器中,此操作在DS18B20加电时自动产生. |
Read Power Supply |
B4H | 主机发起此命令后每个读数时隙内,DS18B20会发信号通知它的供电方式:0寄生电源, 1外部供电. |
来源:http://www.cnblogs.com/fengmk2/archive/2007/03/11/670955.html