1DS18B20和BASCOM-AVR简介
DS18B20是美国DALLAS公司生产的单总线数字温度传感器,从DS18B20读出或写入的信息仅需要一根口线。在单总线工作方式下,允许一条信号线上挂接多个DS18B20,特别适合于构成远距离多点温度测控系统,从而大大简化了系统布线,提高了可靠性,降低了成本,而实现这些的关键在于每片DS18B20都有唯一的ROM代码(64位产品序列号)。在多点温度测控系统中,ROM代码是识别和操作DS18B20的基础;无论读取还是选择对某一个传感器进行操作,主机必须发送64位ROM代码。
BASCOM-AVR是MSC Electronics公司推出的基于AVR系统的软件开发仿真平台。程序语句和Micrsoft VB/QB高度兼容;为标准LCD显示器、I2C芯片和单总线协议芯片等扩充了专用语句;内置模拟终端和程序下载功能;内置软件仿真平台用于测试;编译产生的运行代码可在所有带内部存储器的AVR微控制器中运行。DEMO版本可生成2KB程序代码。BASCOM-AVRDEMO版安装软件包可到http://www.mcselec.com免费下载。
2硬件设计
图1为温度检测系统原理图,DS18B20采用寄生电源方式供电。主机采用AVR单片机90S8515、I/O口PC1可以挂接多个DS18B20,LCD显示器采用TC1602AT(S)R(2×16字符)。开关K1打开时为正常工作方式,LCD依次循环显示各个测量点的编号(在上一行显示)和当前转换温度(在下一行显示)。开关K1闭合时,借助Z1和拨动开关K2测定DS18B20 ROM代码。ATMEL公司的AVR单片机是基于新的精简指令RISC结构的,吸取PIC及8051单片机的优点,并作了重大改进,内载Flash存储器、E2PROM(存储DS18B20的序列号等)、SRAM,I/O口线可直接驱动LED。它能采用高级语言编程,目前国际上已有许多公司推出了C、Basic等基于高级程序设计语言的AVR开发软件和平台。
3测量方法及软件设计
3.1获取序列号(64位ROM代码)
操作单总线数字温度传感器必须严格按规定的协议操作,即应按以下顺序操作:初始化、ROM操作命令、暂存存储器操作命令、数据传输。在ROM操作命令中,有两条命令专门用于获取传感器序列号:读ROM命令(33H)和搜索ROM命令(F0H)。读ROM命令只能在总线上仅有一个传感器的情况下使用。搜索ROM命令则允许总线主机使用一种“消去”处理方法来识别总线上所有的传感器序列号。为了建立64位ROM代码和测量位置点传感器之间的关系,我们选用读ROM命令(33H)。DS18B20的64位ROM代码结构如图2所示:
8位产品类型号对DS18B20为28H。中间的48位序列号唯一的标识着每个传感器,最高位的一个字节是对前7个字节的内容所生成的CRC校验码。获取64位ROM代码方法如下:对所有的DS18B20按现场位置编号(1,2,3,…),将PC1引脚从T处和后级断开,按下开关K1,将要测试的DS18B20逐一插入Z1插座,将拨动开关拨到和插入Z1插座的DS18B20的编号相对应的数值上,单片机90S8515读取拨动开关的数值(编号),执行如下程序即可读取DS18B20的64位ROM代码并按编号存入其内部的E2PROM中,从而建立测量位置点和传感器64位ROM代码之间的关系表。64位序列号用8个字节单元来存储,位置号为n的DS18B20,其64位序列号在E2PROM中从(n-1)×8开始的单元存放。程序的主要部分如下:
如果某一传感器损坏,只需按上述连接方法,拨动开关K2输入损坏传感器的位置编号,将新的DS18B20插入Z1插座重新测试,单片机自动根据读取的编号值将测得的ROM代码取代E2PROM中相同位置编号处的原ROM代码即可。
3.2多点温度的巡回测量
开关K1打开,将T断开处接上。由于已经在上面获取了多个DS18B20的ROM代码并在AVR单片机内部的E2PROM中建立了测量位置点和传感器64位ROM代码之间的关系表,因此对多个温度的巡回测量的步骤如下:
(1)发跳过ROM命令CCH。
(2)发启动所有在线的DS18B20进行温度转换命令44H。
(3)延迟1s。
(4)发匹配ROM命令55H。
(5)按照E2PROM中建立的关系表的顺序取出64位ROM代码发送到单总线。
(6)发读温度值命令BEH,读取温度值。
(7)进行CRC校验和数据处理后送LCD显示器显示。
(8)重复第4步到第7步,直到所有的DS18B20测量处理完。
(9)再重复第1步到第8步,进行下一轮的巡回测量。
如果只对某一个DS18B20进行温度测量,只要将第1步的跳过ROM命令CCH,改为匹配ROM命令55H,将拨动开关拨到和要测量的DS18B20的编号相对应的数值上,单片机90S8515读取拨动开关的数值(编号)n,到E2PROM建立的关系表中从(n-1)×8开始的单元取出ROM代码发送到总线,去掉第8步,其余和上面步骤相似即可。
测试中,DS18B20选择芯片出厂时默认的12位转换精度,转换的结果用16位符号扩展的二进制补码读数形式提供。关于DS18B20可参考DALLAS公司的数据手册。
多点温度巡回测量的主要程序如下:
上述两个程序可以编写为两个子程序,主程序在初始化工作完成后,读开关K1的状态,如为打开状态调用温度巡回测量部分的子程序;如为闭合状态调用获取ROM代码子程序。
4温度报警处理
4.1设置报警限值
DS18B20设有温度高低限报警功能。DSl8B20的存储器由两部分组成:一个是9字节的静态RAM,其中第0和第1字节用于存储16位的温度转换值,第2(高温限TH)和第3字节(低温限TL)作为温度报警限值或通用存储器单元供用户使用;另一个是非易失性的E2PROM。当静态RAM作为温度报警限值使用时,可以在系统安装和工作前,用写RAM命令4EH将高温限TH和低温限TL写入第2和第3字节单元。由于静态RAM掉电后信息即丢失,因此需要再通过拷贝RAM命令48H将第2和第3字节单元的温度报警限值拷贝到E2PROM中。主程序只要在初始化部分使用重调E2PROM命令B8H,就可以将E2PROM中的温度报警限值重新拷贝到静态RAM中。
4.2报警处理
系统正常工作时,在启动所有的DS18B20作温度转换后,可以使用报警搜索命令ECH,发现温度值高于TH或低于TL的数值时,则读取报警的DS18B20的ROM代码,通过查AVR单片机内部E2PROM中测量位置点和传感器64位ROM代码之间的关系表即可得到报警的DS18B20的位置编号,从而启动语音报警或在LCD上显示报警点的位置编号。
本文的设计方法,将DS18B20 ROM代码的获取和温度的测量融为一体,利用单片机内部的E2PROM建立了测量位置点和ROM代码之间的关系表,用简单的硬件及编程方法实现了多点温度的测量、数字温度传感器的出错指示和识别,大大有利于系统的调试和扩充,能有效降低成本,缩短开发周期。在粮库测温系统、冷库测温系统、中央空调系统、智能建筑自控系统等多点温度测量系统中将获得广泛的应用。
参考文献
[1]耿德根,等.AVR高速嵌入式单片机原理与应用[M].北京:北京航空航天大学出版社,2001.
[2]BASCOM-AVR HELP文件[Z].
[3]DALLAS DS18B20数据手册[Z].http://www.maximic.com.