DS18B20数字温度计的设计(一)(第4页)
本文共计10691个字,预计阅读时长36分钟。【 字体:大 中 小 】
微信号已复制到剪贴板
4. Search ROM[0F0H]。当一个系统初次启动时,总线控制器可能并不知道单线总线上有多少器件或它们的64位ROM编码。搜索ROM命令允许总线控制器用排除法识别总线上的所有从机的64位编码。
5. Alarm Search[0ECH]。这条命令的流程与Search ROM相同。然而,只有在最近一次测温后遇到符合报警条件的情况下,DS18B20才会响应这条命令。报警条件定义为温度高于TH或低于TL。只要DS18B20不掉电,报警状态将一直保持,直到再一次测得的温度值达不到报警条件。
6. Write Scratchpad[4EH]。这条命令向DS18B20的暂存器TH和TL中写入数据。可以在任何时刻发出复位命令来中止写入。
7. Read scratchpad[0BEH]。这条命令读取暂存器的内容。读取将从第一字节开始,一直进行下去,直到第九字节(CRC)读完。如果不想读完所有字节,则控制器可以在任何时间发出复位命令来中止读取。
8. Copy scratchpad[48H]。这条命令把暂存器的内容拷贝到DS18B20的E2PROM存储器里,即把温度报警触发字节存入非易失性存储器里。如果总线控制器在这条命令之后跟着发出读时间隙,而DS18B20又忙于把暂存器拷贝到E2PROM存储器,则DS18B20就会输出一个0,如果拷贝结束则DS18B20输出1。如果使用寄生电源,则总线控制器必须在这条命令发出后立即启动强上拉,并最少保持10ms。
9. Convert[44H]。这条命令启动一次温度转换而无需其他数据。温度转换命令被执行后DS18B20保持等待状态。如果总线控制器在这条命令之后跟着发出读时间隙,而DS18B20又忙于做时间转换,则DS18B20将在总线上输出0;如果温度转换完成,则输出1.如果使用寄生电源,则总线控制器必须在发出这条命令后立即启动强上拉,并保持500ms以上时间。
10. Recall E2[0B80H]。这条命令把报警触发器里的值拷贝回暂存器。这种拷贝操作在DS18B20上电时自动执行,这样器件一上电暂存器里马上就存在有效的数据了。若在这条命令发出之后读数据隙,器件会输出温度转换忙的标识:0表示忙;1表示完成。
11. Read Power Supply[0B4H]。若把这条命令发给DS18B20后发出读时间隙,器件会返回它的电源模式:0表示寄生电源;1表示外部电源。
七 温度数据的计算处理方法
从DS18B20读出的二进制值必须先转换成十进制值,才能用于字符的显示。DS18B20的转换精度为9-12位可选,为了提高精度采用12位。在采用12位转换精度时,温度寄存器里的值是以0.0625为步进的,即温度值为温度寄存器里的二进制值乘以0.0626,就是实际的十进制温度值。
通过观察表4-2可以发现,一个十进制值与二进制值间有很明显的关系,就是把二进制的高字节的低半字节和低字节的高半字节组成一字节,这个字节二进制值化为十进制值后,就是温度值的百、十、个位值,而剩下的低字节的低半字节化成十进制后,就是温度值的小数部分。因为小数部分是半字节,所以二进制值范围是0-F,转换成十进制小数值就是0,0625的倍数(0-15倍)。这样需要4位的数码管来显示小数部分。实际应用不必有这么高的精度,采用1位数码管来显示小数,可以精确到0.1℃.
表3就是二进制与十进制的近似对应关系表。
小数部分二进制值 0 1 2 3 4 5 6 7 8 9 A B C D E F
十进制 0 0 1 1 2 3 3 4 5 5 6 6 7 8 8 9
表3 小数部分二进制和十进制的近似对应关系表
第 四 章 调试及性能分析
系统的调试以程序调试为主。
硬件调试比较简单,首先检查电路的焊接是否正确,然后可用万用表测试或通电检测。
软件调试可以先编写显示程序并进行硬件的正确性检测,然后分别进行主程序、读出温度子程序、温度转换命令子程序、计算温度子程序和显示数据刷新子程序等的编程和调试。
由于DS18B20与单片机采用串行数据传送,因此,对DS18B20进行读/写编程时必须严格地保证读/写时序;否则将无法读取测量结果。本程序采用单片机汇编编写,用Waver 3.2编译器编程调试。
软件调试到能显示温度值,而且在有温度变化时(例如用手去接触)显示温度能变化,就基本完成。
性能测试可用制作的温度计和已有的成品温度计同时进行测量比较。由于DS18B20的精度很高,所以误差指标可以限制在+0.5℃以内。
