母婴网站这么做,做网站能力介绍,温州seo按天扣费,网站建设与管理模拟试卷一文章目录 One-Wire总线篇复位和应答读/写0#xff0c;1 DS18B20篇原理图概述最主要特性几个重要的寄存器#xff08;部分要掌握#xff09;存储有数字温度结果的2个字节宽度的温度寄存器寄存器描述#xff1a;寄存器说明#xff1a; 一个字节的过温和一个字节的低温#… 文章目录 One-Wire总线篇复位和应答读/写01 DS18B20篇原理图概述最主要特性几个重要的寄存器部分要掌握存储有数字温度结果的2个字节宽度的温度寄存器寄存器描述寄存器说明 一个字节的过温和一个字节的低温TH和TL温度报警寄存器寄存器描述寄存器说明 一个字节的配置寄存器自定义温度转换为9、10、11、12位精度寄存器描述寄存器说明 总览一下寄存器DS18B20通讯规则以及指令哪些ROM指令哪些DS18B20的指令 DS18B20的温度读取应用思路重点代码现象演示 One-Wire总线篇
one-wire的底层驱动比赛会提供
资源包下载通道涵盖了赛场所有资料
复位和应答 简单理解 规则一个复位信号必须大于960us 主设备单片机拉低总线超过480us紧接着释放总线拉高也就是来个上升沿等待15us-60us后再拉低总线60us-240us发送一个存在脉冲。
读/写01 简单理解 规则读写一个位要在60us到120us内完成位与位之间读写间隔1us
写0再写1主机将拉低总线快速释放总线准备要写入的数据写0-拉低总线这些操作要在15us内完成然后维持至少60us然后再释放总线1us,继续写1拉低总线快速释放总线准备 要写入的数据写1-拉高总线同样这些操作要在15us内完成再维持60us然后释放总线超过1us
读0再读1主机拉低总线快速释放总线这个操作也是要在15us内完成然后检测总线上的电平被DS18B20拉高了还是低了即可
DS18B20篇
原理图
可以看到18b20通过P14口挂载在单总线上的
打开手册可以看到
DS18B20英文手册
根据自己理解翻和译提取重要信息如下
概述
DS18B20数字温度传感器提供9-Bit到12-Bit的摄氏温度测量精度和一个用户可编程的非易失性且具有过温和低温触发报警的报警功能。
DS18B20采用的1-Wire通信即仅采用一个数据线以及地与微控制器进行通信。该传感器的温度检测范围-55℃至125℃。此外DS18B20可以直接由数据线供电而不需要外部电源供电。
每片DS18B20都有一个独一无二的64位序列号这个系列号是烧在内部ROM里面的所以一个1-Wire总线上可连接多个DS18B20设备。
最主要特性
· 独特的1-Wire总线接口仅需要一个管脚来通信。DQ引脚
· 每个设备的内部ROM上都烧写了一个独一无二的64位序列号板子上面就一个DS18B20 所以 一般直接跳过ROM指令不进行配对
· 内部温度采集精度可以由用户自定义为9-Bits至12-Bits这里一般不去设置
· 温度转换时间在转换精度为12-Bits时达到最大值750ms写代码时候要注意
几个重要的寄存器部分要掌握
存储有数字温度结果的2个字节宽度的温度寄存器 寄存器描述
用来存储数字温度转换结果
温度数据以一个16位标志扩展二进制补码数的形式存储在温度寄存器中见Figure2 说人话用来储存测得的温度的高5位作为符号位其余位做数据位
寄存器说明
高字节5位为符号标志位S温度的正负极性正数则S0负数则S1。(一般比赛都是正温度)
如果DS18B20被定义为12位的转换精度温度寄存器中的所有位都将包含有效数据。 若为11位转换精度则bit 0为未定义的。 若为10位转换精度则bit 1和bit 0为未定义的。 若为9位转换精度则bit 2、bit 1和bit 0为未定义的。
下表格为在12位转换精度下温度输出数据与相对应温度之间的关系表。 一个字节的过温和一个字节的低温TH和TL温度报警寄存器 寄存器描述
比赛用不到了解即可
用来储存过温和低温的对比参照数值
过温和低温TH和TL温度报警寄存器是非易失性的EEPROM所以其可以在设备断电的情况下保存。
寄存器说明
符号标志位S温度的正负极性正数则S0负数则S1。其余位为数据位
过温和低温TH和TL温度报警寄存器是一个8位的寄存器所以在于其比较时2个字节的温度寄存器的4位至11位才是有效的数据。
如果温度转换数据小于或等于TL及大于或等于THDS18B20内部的报警标志位将会被置位。该标志位在每次温度转换之后都会更新因此如报警控制消失该标志位在温度转换之后将会关闭。
说人话俩寄存器用看存放过温和低温阈值温度数据的也就是TH和TL分别放着对比的过温和低温数值每次测到的2个字节的温度的第4-12位数据都来跟它比较进行报警监测 一个字节的配置寄存器自定义温度转换为9、10、11、12位精度 寄存器描述
用来配置测温数据的精度的寄存器
说明9、10、11、12位精度分别为0.5℃、0.25℃、0.125℃、0.0625℃分辨率。 上电默认为:12位转换精度
这里也可以看(Figure2图)每一位对应的权数 **比如:BIT0位2的负4次方如果数据位可以达到12位精度分辨率就是1/16 0.0625℃ 同理 : 11位 精度就是1/8 0.125; 10位 精度就是1/4 0.25; 9位 精度就是1/2 0.5;
寄存器说明
用户通过改变R0和R1的值来配置DS18B20的分辨率。上电默认为R01及R1112位分辨率。需要注意的是转换时间与分辨率之间是有制约关系的。Bit 7和Bit 0至Bit 4作为内部使用而保留使用不可被写入。
温度分辨率配置以及转化时间表 总览一下寄存器 DS18B20通讯规则以及指令 访问DS18B20的事件序列如下所示 第一步初始化 第二步ROM命令紧跟任何数据交换请求 第三步DS18B20功能命令紧跟任何数据交换请求 每次对DS18B20的访问都必须遵循这样的步骤来进行如果这些步骤中的任何一个丢失或者没有执行则DS18B20将不会响应。 除了ROM搜索命令[F0h]和报警搜索命令[ECh]之外。当执行完这些命令之后主设备必须回到上述步骤中的第一步也就是必须再次初始化。
哪些ROM指令
搜索ROM[F0h] 读取ROM[33h] 匹配ROM[55h] 跳过ROM[CCh] 警报搜索[ECh]
哪些DS18B20的指令
温度转换[44h] 写入暂存寄存器[4Eh] 读取暂存寄存器[BEh] 拷贝暂存寄存器[48h] 召回EEPROM[B8h] 读取供电模式[B4h]
DS18B20的温度读取应用
思路
根据上面的通讯规则执行命令后必须重新初始化和指令ROM和DS18B20指令
步骤响应的操作初始化init_ds18b20();跳过ROM指令Write_DS18B20(0xcc);启动温度转化指令Write_DS18B20(0x44);初始化init_ds18b20();跳过ROMWrite_DS18B20(0xcc);读取暂存寄存器指令Write_DS18B20(0xbe);读温度低字节low Read_DS18B20();读温度高字节high Read_DS18B20();转化温度看所需精度
说明前面提到12位精度需要750ms按道理需要加上延时但经过测试连续读取也是没问题的因为即使这次温度没转化好读取到的也是上一次的数值。 当然也可以避免这样操作在每次读取完就开启温度转化等下次到来温度肯定转化好了再读取就没问题了
重点代码
这里以12位精度为例
float ReadTemperature(void)
{float temp 0.0;u8 high 0;u8 low 0;init_ds18b20();Write_DS18B20(0xcc);Write_DS18B20(0x44);init_ds18b20();Write_DS18B20(0xcc);Write_DS18B20(0xbe);low Read_DS18B20();high Read_DS18B20();temp ((high8)|low)*0.0625;return temp;
}现象演示 (九)One-Wire总线-DS18B20 ----- 如有错误欢迎大家批评指正