您当前的位置:五五电子网电子知识单元电路接口电路DS18B20与ATmega8单片机接口的C语言实现方法 正文
DS18B20与ATmega8单片机接口的C语言实现方法

DS18B20与ATmega8单片机接口的C语言实现方法

点击数:7835 次   录入时间:03-04 11:49:50   整理:http://www.55dianzi.com   接口电路

摘要:介绍了单总线测温器件DS18B20及其与ATmega8 单片机共同组成单总线测温系统的接口方法,并给出了其核心的μS级软件延时的C语言源程序和对DS18B20进行操作的程序框图,以及利用C语言实现接口软件的方法以及使用时的技巧和需要注意的一些问题。
关键词: 单总线; 单片机; 嵌入式C

1.引言

    工业生产过程中,普遍存在着需要进行温度测量的场合。利用单片机和温度传感器组成的专用测温系统由于具有结构简单、工作可靠、价格低廉的优势,而得到了广泛的应用。
    目前市场上单片机种类繁多,各具优势,ATMEL公司生产的mega8单片机无疑是其中较为典型的一种,它的内部集成了较大容量的存储器和丰富强大的硬件接口电路,如定时/计数器、实时时钟、PWM通道、A/D转换器、I2C的串行接口、可编程的串行USART接口、SPI串行接口和带片内晶振的可编程看门狗定时器以及片内的模拟比较器等,除传感器外几乎可以不需要其它任何元件独立而构成系统。它具有AVR高档单片机MEGA系列的全部特点,而价格仅与低档单片机相当且系统二次开发极为方便,性价比极高。另外,由于采用了单周期指令模式,它具有极高的运行速度,可达到1MIPS/MHz,比AT89C51高出10倍。并且在省电性能、稳定性、抗干扰性能和灵活性方面极具特色。在产品应用市场上具有强大的竞争力,因而在工业测控领域中得到了广泛的应用。
    DS18B20是美国DALLAS半导体器件公司在其前代产品DS1820的基础上最新推出的单线数字化智能集成温度的传感器,其全部传感元件及转换电路集成在形如一只三极管的集成电路内。与其它温度传感器相比,DS18B20具有以下特性: ①独特的单线接口方式,DS1820在与微处理器连接时仅需要一条接口线即可实现微处理器与DS18B20的双向通讯。②DS18B20支持多点组网功能,多个DS18B20可以并联在唯一的信号线上,实现多点测温。③DS18B20在使用中不需要任何外围元件。 ④测温范围-55℃~+125℃,固有测温分辨率0.625℃。⑤测量结果以9~12位数字量方式串行传送。

2.Atmega8单片机与单总线测温器件DS18B20的接口及其操作时序

    DS18B20内部结构主要由四部分组成:64位光刻ROM、温度传感器、非挥发的温度报警触发器TH/TL和配置寄存器。
光刻ROM中的64位序列号是出厂前被光刻好的,可视作是DS18B20的地址序列码。光刻ROM的作用是使每一个DS18B20都各不相同,以实现一根总线上挂接多个DS18B20的目的。
    DS18B20温度传感器的内部存储器包括一个高速暂存RAM和一个非易失性的可电擦除的E2PROM,后者存放高/低温度触发器TH/TL和结构寄存器。 暂存存储器包含了8个连续字节,前两个字节是测得的温度信息,第一个字节的内容是温度的低八位,第二个字节是温度的高八位。第三个和第四个字节是TH/TL的易失性拷贝,第五个字节是结构寄存器的易失性拷贝,这三个字节的内容在每一次上电复位时即被刷新。
    第六、七、八个字节用于内部计算。第九个字节是冗余检验字节。
    DS18B20中的温度传感器对温度的测量结果用16位符号扩展的二进制补码读数形式提供,当转换精度为12位时,则所得测量结果中前5位S为符号位,如果测得的温度大于0℃时,S均为0,否则为1。后11位为数据位,分辨率为0.0625℃/LSB,只要将测到的数值乘于0.0625即可得到实际温度。
    综上所述,DS18B20单总线温度传感器可以方便地实现与mega8单片机的连接,构建适合自己的经济的测温系统。
    根据DS18B20的通讯协议,主机控制DS18B20完成温度转换必须经过三个步骤:每一次读写之前都要对DS18B20进行复位,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操作。
    当主机收到DS18B20的响应信号后,便可以发出操作命令,这些命令可以分为ROM命令和RAM命令两种.
 以仅有一个DS18B20且使用外部电源为例,CPU的操作过程如图1所示。

图1.  DS18B20操作过程

3.接口程序的C语言实现

    由于DS18B20工作在单总线方式,其硬件接口较为简单,仅需利用系统的一条I/O线与DS18B20的数据总线相连即可。DS18B20虽然具有测温系统简单、测温精度高、连接方便、占用口线少等优点,但在实际应用中也有一些需要注意问题。主要是较小的硬件开销需要相对复杂的软件进行补偿,由于DS18B20与mega8单片机间采用串行数据传送,因此,在对DS18B20进行读写编程时,必须严格的保证读写时序,否则将无法读取测温结果。操作时序主要有初始化时序、读时序和写0时序和写1时序四种,如图2所示。


    由于对操作时序的要求比较严格,所以在进行程序设计时,对DS18B20操作部分常采用汇编语言实现。而目前单片机已经普遍采用C语言编程,如果在其中插入汇编语言程序相当不方便,所以有必要研究采用C语言实现单片机与DS18B20的接口方法。由于DS18B20与单片机接口的软件中对时序要求比较严格,所以开发精确的延时程序是其中的重点也是难点所在。考虑到操作要求,所应用的延时程序主要
有μS级延时和mS级延时两种,其中μS级延时要求最高,其代码如下:
首先定义1μS延时程序如下:

    在实际系统中,设置系统时钟为8MHz,运行结果表明,程序的定时误差不超过0.5%,完全可以满足应用的要求。mS级延时的情况也类似,比较容易实现,在此不再赘述。需要注意的是,在执行上述程序,必须关闭中断,以保证程序执行的实时性。
    在温度测量仪表中,对DS18B20的操作主要是复位、读数据和写数据三种,而两种操作又都是按位进行的,所以首先应该按照DS18B20的时序要求,编写读、写时间片的程序,其流程图如图3所示。

图3.  DS18B20操作程序流程图


    另外需要注意的是,在实际工作环境中,由于干扰的存在,可能造成读数错误,这就需要对读得的数据进行正确性校验。在从DS18B20所读得的9字节数据中,最后一字节为CRC校验码,在必要时可以用来对读数进行检验,其程序如下:

    在上述程序中,*p为指向从DS18B20所读得的9字节数据所组成数组的指针,函数在CRC校验正确时返回0。

4.需要注意的问题

    虽然利用Atmega8单片机和DS18B20可以方便地组成简单、可靠、低成本、高精度的测温系统,但在实际应用中应该注意以下几个问题:
    (1)在DS1820的有关资料中均未提及单总线上所挂DS1820数量问题,容易使人误认为可以挂任意多个DS1820,在实际应用中当单总线上所挂DS1820超过8个时,就需要解决微处理器的总线驱动问题,在进行多点测温系统设计时要加以注意。
    (2)连接DS1820的总线电缆是有长度限制的,在用DS1820进行长距离测温系统设计时要充分考虑总线分布电容和阻抗匹配问题,一般总线长度以<50m为宜。
    (3)在DS1820测温程序设计中,向DS1820发出温度转换命令后,程序总要等待DS1820的返回信号,一旦某个DS1820接触不好或断线,程序将进入死循环。这一点在进行DS1820硬件连接和软件设计时也要给予一定的重视。
    上述软硬件系统已成功应用于某磨削加工设备的温度补偿系统中,从实际运行效果看,系统工作稳定、成本低廉、测温精度高、可靠性强,是一种比较理想的方案,与目前常用的利用热电偶或热电阻测温的方式相比,在保证精度的成本和开发难度都得到了很好的抑制,特别是在低温测量领域具有显著的优势。





本文关键字:单片机  接口  C语言  接口电路单元电路 - 接口电路