CCIT小型嵌入式综合电子系统开发与设计系统设计与集成CCIT教学过程4单线数字温度计DSl8B20介绍一DS18B20工作过程及时序二在LCD1602上显示温度采集数据三CCIT一、单线数字温度计DSl8B20介绍CCIT1、ds18b20概述美国Dallas半导体公司的数字化温度传感器DS18B20是“一线总线”接口的温度传感器。全部传感元件及转换电路集成在形如一只三极管的集成电路内。CCITDS18B20测量温度范围-55℃~+125℃,在-10~+85℃范围内,精度为±0.5℃。现场温度直接以“一线总线”的数字方式传输,使用户可以轻松的组建传感器网络,大大提高了系统的抗干扰性。适合于恶劣环境的现场温度测量,如:环境控制、设备或过程控制、测温类消费电子产品等。CCIT2、温度传感器外部特征图3-1DS18B20外观及管脚图CCIT从图3-1可以看出:DS18B20有三个管脚,分别为接地GND、电源Vdd、数据输入/输出DQ。DS18B20测得的温度值是通过DQ端进行数据传输的,这也就是“一线总线”的数字方式传输。CCIT3、Ds18b20电路接法图3-2DS18B20供电方式CCIT如图3-2所示,每只DS18B20都可以设置成两种供电方式,即数据总线供电方式和外部供电方式。采取数据总线供电方式可以节省一根导线,但完成温度测量的时间较长;采取外部供电方式,则多用一根导线但测量速度较快。CCIT任务1焊接DS18B20相关电路CCIT4、ds18b20内部结构四部分构成:电源模块、64位ROM和单总线接口、控制模块和存储器模块CCIT4、ds18b20内部结构Ds18b20的内部存储资源分布如下:CCIT在芯片内部光刻了一个长度为64bit的ROM,这个编码是器件的身份识别标志。可用于多点温度控制系统。如下图,其中MSB为最高有效位,LSB为最低有效位ROMCCIT序号高速存储器RAM0温度值低位1温度值高位2高温报警寄存器3低温报警寄存器4配置寄存器5保留6保留7保留8CRC校验字节RAMCCITRAM由9个字节组成,包含8个连续字节;前两个字节是测得的温度信息,第0个字节的内容是温度的低八位,第一个字节是温度的高八位。输出时先低8位,再高8位。第二个和第三个是温度高限TH、温度低限TL暂存区;第四个字节是配置寄存器暂存区,第5、6、7字节是系统保留,就相当于运算内存。第8个字节对前面的字节进行校验CCIT以12位精度为例最高位为符号位。正温度S=0,负温度S=1,存放的是补码。因此当测得的温度是负数时,应作补码到原码的转换才能得到相应的负温度值。其他依此类推从温度RAM中读出数据后要作右移4位即除以16或乘0.0625(2-4)才可得到实际温度;如果温度小于0,测到的数值需要取反加1(或减1取反)再乘于0.0625即可得到实际温度。传感器内部温度表示?CCIT传感器内部温度表示?如DS18B20用12位存贮温值度,最高位为符号位。负温度S=1正温度S=0如0550H为+85℃0191H为25.0625℃FC90H为-55℃CCIT报警值高、低限在RAM的第2、3、4字节和EEPROM的三个字节是对应的,内容是相同的,只是RAM因为是暂存器,失电后数据就丢失了。EEPROM是电擦除只读存储器,失电后数据不丢失。在工作时得到复位命令后就从EEPROM复制一份数据到RAM的第2、3、4字节内,作为我们进行报警搜索、改写报警值和改写器件设置用,我们从外部只能对RAM进行操作,EEPROM只能从RAM复制而得到要保存的数据。CCIT配置寄存器第4字节的配置寄存器是用来设置DS18B20的工作模式和测量精度的,其内容如下图:低五位一直都是“1”,TM是测试模式位,出厂时被设置为0,用户不要去改动。CCIT配置寄存器R1R0分辨率转换时间00993ms0110187ms1011375ms1112750msR1和R0用来设置分辨率,(DS18B20出厂时被设置为12位),改动后,需要保存这种设置时,要用一条复制命令复制到EPROM中CCITEEPROM只有三个字节,和RAM的第2、3、4字节的内容相对应,它的作用就是存储RAM第2、3、4字节的内容,以使这些数据在掉电后不丢失。EEPROM:CCIT5、DS18B20操作指令DS18B20指令分为2种:对ROM操作对RAM操作CCIT、如何实现一次简单的温度转换功能?根据DS18B20的通讯协议,主机(单片机)控制DS18B20完成一次操作经过以下步骤:CCIT如何对ROM、RAM区域写入指令呢?如何读取DS18B20采集的温度值呢?CCIT二、DSl820工作过程及时序CCITDS18B20是单总线器件,通讯协议包括几种单线信号类型:复位脉冲、存在脉冲、写0、写1、读0、读1。所有这些信号,除存在脉冲外,其余都是由总线控制器(单片机)发出的。CCIT1、对DS18B20进行初始化复位操作图3-2初始化时序CCIT对DS18B20进行初始化复位操作从图3-2,/让DS18B20一段相对长时间低电平,然后一段相对非常短时间高电平,即可启动可以看出从t0~t1时刻开始,低电平持续480μs,这是复位秒冲。对应指令:t1时刻释放总线进入到接收状态DQ=0;delay_nus(600);DQ=1CCIT对DS18B20进行初始化复位操作DS18B20在检测到t1时刻的上升沿之后,等待60μs,即t1~t2时长。并在随后的240微秒时间内对总线进行检测,如果有低电平出现说明总线上有器件已做出应答。若无低电平出现一直都是高电平说明总线上无器件应答。在图3-2中为虚线所示。while(DQ);//接收到存在脉冲信号,跳出循环delay_nus(200);CCIT复位过程:要求主机将数据线下拉480~960us,然后释放,ds18b20在总线释放后16~60us内发送一个存在脉冲,主机收到此信号表示复位成功.CCIT初始化程序voidds18b20_reset(){DQ=1;DQ=0;//拉低总线delay_nus(600);//精确延时在480-960usDQ=1;//总线释放while(DQ);//等待存在脉冲,若为高电平,则一直等待delay_nus(200);}CCIT为了完成一次温度转换功能,我们接着需要分别对ROM、RAM进行读取操作。以命令44H为例:执行一次温度转换指令,要向RAM内写入44H=01000100,命令芯片开始工作。单线型芯片通信属于串行通信方式,也即是说,在一根数据线上单片机根据时序向芯片写入01000100这一组二进制数,实现转换功能。CCIT既然我们的指令是转换成二进制代码进行读写的,那么我只需知道如何向芯片写入“0”和“1”即可实现所有命令功能。CCIT2、写时序图(2)写时间隙图3-4a为写“0”时序b为写“1”时序abCCITCCIT时序图分析从图3-4中,可以看出写时序开始时DQ都为高电平,t0时刻为高电平,此时主机认为开始写入数据。从t0到t1时刻,共计60μs,时间分为2段。第一个15μs之内应将所需写的位送到总线上。此时,写入数据“0”DQ=1;DQ=0;CCITDSl8B20在t0后15-60us间对总线采样,若低电平写入的位是0,见图3-4a;若高电平写入的位是1,见图3-3b连续写2位数据,间隙应大于1usdelay_nus(60);DQ=1;_nop_();_nop_();CCIT写0voidds18b20_write_bit0(){DQ=1;DQ=0;//开始写时间片delay_nus(60);//精确延时在60-120usDQ=1;_nop_();_nop_();//为下一次写做准备}CCIT任务2KEIL中编写写“0”程序编写写“1”程序CCIT程序编写voidds18b20_write_bit1(){DQ=1;DQ=0;//开始写时间片_nop_();_nop_();_nop_();_nop_();_nop_();DQ=1;//释放总线delay_nus(60);}CCIT写时序总结写周期最少为60微秒,最长不超过120微秒。写周期一开始做为主机先把总线拉低1微秒表示写周期开始。随后若主机想写0,则继续拉低电平最少60微秒直至写周期结束,然后释放总线为高电平。若主机想写1,在一开始拉低总线电平1微秒后就释放总线为高电平,一直到写周期结束。而做为从机的DS18B20则在检测到总线被拉底后等待15微秒然后从15us到45us开始对总线采样,在采样期内总线为高电平则为1,若采样期内总线为低电平则为0。CCIT3.读时序CCIT读时序读时间隙图3-4读时序图CCIT读时隙是从主机把单总线拉低之后,在1微秒之后就得释放单总线为高电平,让DS18B20把数据传输到单总线上。DS18B20在检测到总线被拉低1微秒后,便开始送出数据,若是要送出0就把总线拉为低电平直到读周期结束。若要送出1则释放总线为高电平。CCITbitds18b20_read_bit(){bittemp;DQ=1;DQ=0;//开始读时间片_nop_();_nop_();_nop_();DQ=1;CCIT_nop_();_nop_();_nop_();temp=DQ;//主机开始采样delay_nus(60);returntemp;}CCIT任务3KEIL中编写读位(“0”、“1”)程序CCIT弄清了如何复位,如何写1写0和读1读0,我们现在就要看看在总线上如何进行实际的运用。请同学们自行编写函数,如何写入一个字节?CCIT4.写字节最低位为0?向DS18B20写“0”向DS18B20写“1”数据右移1位8位数据写完?YNNYCCIT4.写字节voidds18b20_write_byte(unsignedcharbyte){unsignedchari,temp;temp=byte;for(i=0;i8;i++){if(temp&0x01)ds18b20_write_bit1();elseds18b20_write_bit0();temp=1;}}CCIT读到的数据为1?向存储来自DS18B20的变量最高位写“1”数据右移1位8位数据读完?NY读字节YNCCIT读字节unsignedchards18b20_read_byte(){bitbit_temp;unsignedchari,temp=0;for(i=0;i8;i++){temp=1;bit_temp=bs18b20_read_bit();if(bit_temp)temp|=0x80;}returntemp;}CCIT任务4KEIL中编写写字节、读字节程序CCIT完整的温度转换过程CCITCCIT至此,一个完整的温度转换过程,如下图所示ds18b20_reset();ds18b20_write_byte(SKIP_ROM);ds18b20_write_byte(CONVER_T);//开始温度转换delay_nms(800);//温度转换时间CCIT测得温度后存在什么地方?如何读取到温度值,处理读取到的温度值,并把它在LCD上显示?CCIT任务5KEIL中编写读温度程序CCIT三、在LCD1602上显示温度采集数据CCIT温度转换过程2、转换温度CCIT2、读取温度值读取RAM内的温度数据ds18b20_reset();ds18b20_write_byte(SKIP_ROM);ds18b20_write_byte(READ_SCRATCHPAD);CCIT五、实时温度采集(读温度)程序设计初始设置,没有,按缺省Ds18b20_read_byte()2次Ds18b20_write_b