ds18b20温度转换指令_【Proteus】DS18B20简易温控器

前言DS18B20是单片机课设或者仿真项目中一个比较常用的数字温度传感器,因此使用DS18B20仿真一个简易的温控器,超过温度就打开风扇,低于某温度就用继电器打开加热丝。整个程序我都会附在最后,如果懒得复制粘贴,要所有的工程以及仿真的话,就给我点赞赏吧。整个仿真如图:首先便是查找DS18B20的手册,编写DS18B20的驱动程序。阅读手册可知:DS18B20的数据类型DS18B20提供9位与12位...
摘要由CSDN通过智能技术生成

21f5aeb654e472383f107ae12664d81d.png

前言

DS18B20是单片机课设或者仿真项目中一个比较常用的数字温度传感器,因此使用DS18B20仿真一个简易的温控器,超过温度就打开风扇,低于某温度就用继电器打开加热丝。整个程序我都会附在最后,如果懒得复制粘贴,要所有的工程以及仿真的话,就给我点赞赏吧。

整个仿真如图:

4d88b8d87b2b01d970063f88e2e2931f.png

首先便是查找DS18B20的手册,编写DS18B20的驱动程序。阅读手册可知:

DS18B20的数据类型

DS18B20提供9位与12位摄氏温度测量进度,上电默认是12位,如果我们就用默认的12位精度的话,那么最后从DS18B20读出来的数据要乘以0.0625,之后得到的就是实际温度,单位摄氏度。测量范围为 -55℃至125℃。

DS18B20的通信方式

DS18B20是单总线接口,也就是说,只需要一个通信接口与单片机进行通信,DS18B20看起来就比较像三极管,但它是两根电源线+一根通信线,每个DS18B20都有一个独一无二的64位序列号,也就是说,在一个总线上可以连接多个DS18B20设备,控制不同的DS18B20来读取多点温度。

DS18B20的外围电路

DS18B20的电路部分也很简单,不需要外围元件,使用3V-5.5V供电。

DS20B20的控制流程

DS18B20上电默认是12位精度,主设备必须向DS18B20发送温度转换命令[44H]才能开始温度转换。当然DS18B20进行温度转换需要时间,当发送完[44H]读命令之后,主设备就可以执行读数据时序了,等待DS18B20转换完成,在DS18B20转换完成之前,都会返回0,转换完成之后,就会返回1。

DS18B20的温度数据是以一个16位二进制补码数的形式存储在温度寄存器中。我们现在就确定使用12位精度的形式,那么首位就为符号位,之后是数据位,如图:

c2be24f53ec2899fb3c9a2da4e75d26b.png

此外要注意这个上电复位时默认是85℃,有些人看到上电85度还以为是错的,因此疯狂修改程序,其实是正常现象,自己程序注意一下即可。

了解了这些,我们就开始着手写DS18B20的驱动程序。
手册上对于事件流程的说明如图:

6e4c187d1ccf8cdcaaaec40c2d9252f0.png

注意最后一句话:当执行完这些ROM命令之后,主设备必须回到上述步骤中的第一步。也就是说,我们首先需要进行初始化,然后发送ROM命令,然后发送功能命令。之后便是等待ROM命令执行完,如果要发送下一个ROM命令,则又需要重新回到第一步初始化,再发送下一个ROM命令,再发送功能命令。这一点需要记住。

那么我们的整个读取流程就基本确定了:
初始化->跳过读序列号(ROM命令)->启动温度转化(功能命令)->延时等待ROM命令与温度转换执行结束->初始化->跳过读序列号(ROM命令)->读取温度(功能命令)

因为我们就使用一个DS18B20,因此可以跳过这个读序列号。下面我们就按照这个流程来编写各部分程序。

初始化

7c6602a06a725367cef19ba57561b5f4.png

由时序图可知,初始化程序首先需要将总线拉为低电平至少480us的时间,然后释放总线,总线置为高电平,DS18B20就会检测这个上升沿,检测到上升沿之

  • 7
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值