DS18B20使用说明

这篇具有很好参考价值的文章主要介绍了DS18B20使用说明。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

DS18B20 - 温湿度监测模块

芯片介绍

基础介绍\引脚介绍

DS18B20是单总线协议的典型代表,同时也是单总线协议最广泛的应用场景,是常用的数字温度传感器,其输出的是数字信号。具有体积小,硬件开销低,抗干扰能力强,精度高的特点。DS18B20数字温度传感器接线方便,封装成后可应用于多种场合。

DS18B20 的温度检测与数字数据输出全集成于一个芯片之上,从而抗干扰力更强。其一个工作周期可分为两个部分,即温度检测和数据处理。在讲解其工作流程之前我们有必要了解 18B20 的内部存储器资源。 18B20 共有三种形态的存储器资源,它们分别是:ROM 只读存储器,用于存放 DS18B20ID 编码,其前 8 位是单线 系列编码(DS18B20 的编码是 19H),后面 48 位是芯片唯一的序列号,最后 8 位是以上 56 的位的 CRC 码 (冗余校验)。数据在出产时设置不由用户更改。
DS18B20 共 64 位 ROM。RAM 数据暂存器,用于内部计算和数据存取,数据在掉电后丢失,DS18B20 共9 个字节 RAM,每个字节为 8 位:

  • 第 1、 2 个字节是温度转换后的数据值信息,

  • 第 3、 4 个字节是用户 EEPROM(常用于温度报警值储存)的镜像。在上电复位时其值将被刷新。

  • 第 5 个字节则是用户第 3 个 EEPROM的镜像。

  • 第 6、 7、 8 个字节为计数寄存器,是为了让用户得到更高的温度分辨率而设计的,同样也 是内部温度转换、计算的暂存单元。

  • 第 9 个字节为前 8 个字节的 CRC 码。

RAM内容如下图,最常用为前两个字节数据,其余数据由于操作方式没有直接在控制端操控方便,一般很少使用。

DS18B20使用说明

EEPROM 非易失性记忆体,用于 存放长期需要保存的数据,上下限温度报警值和校验数据,DS18B20 共 3 位 EEPROM,并在 RAM 都存在镜像,以方便用户操作。

其引脚图如下:

DS18B20使用说明

DS18B20仅有三根引脚,其中一根接电源,一根接地,即其仅使用一根引脚用于数据命令等的传输,由于没有时钟线,其为异步传输,对传输时序要求极高。

DQ:DS18B20传输线,采用单总线,详见协议使用笔记单总线章节

操作控制流程

每次通信必须经过如下步骤,且对时序有较高要求,延时部分需使用滴答定时器等进行精准延时。

1.复位:单片机拉低DQ线至少480us,DS18B20接收到信号后会在15 - 60us内发送存在脉冲。

2.存在脉冲:复位信号结束后,应将DQ线拉高以接收存在脉冲,该脉冲为一个60 - 240us的低电平

3.发送ROM指令:共有五条指令可供发送,每条指令为8位数据,每个周期仅可发送一条。五条指令如下:

  • 读ROM数据:33H
  • 指定匹配芯片:55H
  • 跳跃ROMCCH
  • 芯片搜索:F0H
  • 报警芯片搜索:ECH

若不需要对ROM进行操作,则可使用跳跃ROM指令跳过该阶段。

4.发送存储器操作指令:共有六条指令可供发送,每条指令为8位数据,每个周期仅可发送一条。指令如下:

  • 写RAM数据:4EH
  • 读RAM数据:BEH
  • 温度转换:44H
  • 将RAM数据复制到EEPROM:48H
  • 将EEPROM警报值复制到RAM:B8H
  • 工作方式切换:B4H

5.执行或数据读写:在此将会进行数据的读写或指令执行,由以上命令确定。若执行转换指令,则需要等待500us左右的转换时间,若执行读写指令,则需要根据DS18B20时序要求进行读写。

时序介绍

复位应答时序

DS18B20使用说明

写时间隙时序

DS18B20使用说明

写时间隙由控制端将总线拉低15us左右,后在其低电平状态下进行控制,若要发送1则在拉低后将总线拉高15 - 45us

若要发送0则保持该低电平15 - 45us,尔后将总线重新拉高。

注意:单bit的发送时间应在60 - 120us内,否则将不能进行通信。

读时间隙时序

DS18B20使用说明

读时间隙需要先由控制端拉低总线1us左右,并释放总线,在释放后的15us中,从机接管总线并发送数据,此时高电平表示1,低电平表示0,每一个bit的读取都需要先由总线拉低总线1us

注意:字节的读写由低位开始,由高位结束。

读取数据

读取一次温度信息的步骤:

发送复位信号 --> 检测回应信号 --> 发送0xCC --> 发送0x44 --> 发送复位信号 --> 检测回应信号 --> 写0xCC --> 写0xBE --> 循环 8 次读取温度低字节 --> 循环 8 次读取温度高字节

其它操作与此类似,不做过多介绍。文章来源地址https://www.toymoban.com/news/detail-492470.html

代码示例

变量介绍

DS18B20_OUTPUT()		//设置为输出模式
DS18B20_DQ_OUT			//DQ线输出
DS18B20_INPUT()			//设置为输入模式
DS18B20_DQ_IN			//DQ线输入

读数据(从DS18B20读)

u8 DS18B20_Read_Byte(void)
{
    u8 i, rxData = 0;
    DS18B20_DQ_OUT = 1;			//DQ输出为高
    for(i=0; i<8; i++)
    {
        DS18B20_OUTPUT();		//设置为输出模式
        DS18B20_DQ_OUT = 0; 	//拉低总线(释放总线)
        delayUs(5);   			//等待1us以上
        
        DS18B20_INPUT();  		//切换为输入模式
        delayUs(10);
        
        
        if(DS18B20_DQ_IN) rxData |= 1<<i; 	//此时总线电平已改变,判断电平
        delayUs(40);
			
        DS18B20_DQ_OUT = 1;		//接管总线,等待下一次释放
        delayUs(5);
    }
    return rxData;
}

写数据(从DS18B20写)

void DS18B20_Write_Byte(u8 txData)
{
    u8 i;
    DS18B20_OUTPUT(); 			//设置为输出模式
    for(i=0; i<8; i++)
    {
        if(txData & 0x01) 		//低位先发
        {
            DS18B20_DQ_OUT = 0;   //拉低总线
            delayUs(5);        
            DS18B20_DQ_OUT = 1;   //该位为高,拉高总线,延时
            delayUs(55);  
        }
        else 
        {
            DS18B20_DQ_OUT = 0;  //拉低总线
            delayUs(5);
            delayUs(55);		//该位为低,保持总线低,延时
            DS18B20_DQ_OUT = 1;  //重新拉高,等待下一次
        }
        txData >>= 1;
    }
}

到了这里,关于DS18B20使用说明的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • DS18B20与单片机的通信、DS18B20采集温度、MODBUS协议、练习框架

    单总线数字温度计 异步的半双工的串行通信 测量范围从-55℃ ~ +125℃,增量值为0.5℃ 要用DS18B20采集温度,就要实现与单片机之间的通信,因此有两个问题 Bus master active low:主机执行低电平 DS1820 active low:DS18B20执行低电平 Both bus master and DS1820 active low:全都释放低电平 Resis

    2024年04月16日
    浏览(33)
  • STM32F1使用HAL库驱动DS18B20

    目录 DS18B20概述 工程配置  命令手册 单总线协议  初始化时序  写时序 读时序 读取温度 驱动附录  DS18B20是一款单总线(one wire)芯片,因此其DQ引脚与单片机相连的IO口既要是输入也要是输出,cubeMX的初始化引脚设置只能选择其一,这里我们使用手动配置引脚。 先用cubeMX生

    2024年02月04日
    浏览(29)
  • DS18B20测量温度

    一般在使用DS18B20时会按照以下步骤进行温度转换并读取: 1、主机发送复位脉冲 2、DS18B20响应 3、发送0xCC命令跳过ROM命令 4、发送功能命令 5、发送功能命令0x44启动温度转换 6、判断温度转换是否完成(为读取1Bit数据为1表示完成) 7、下一个初始化序列开始读取温度 8、然后按

    2023年04月08日
    浏览(33)
  • stm32之DS18B20

            DS18B20与stm32之间也是通过单总线进行数据的传输的。单总线协议在DHT11中已经介绍过。虽说这两者外设都是单总线,但时序电路却很不一样,DS18B20是更为麻烦一点的。  举例(原码补码反码转换_原码反码补码转换_王小小鸭的博客-CSDN博客):  将这两个字节的数

    2024年02月10日
    浏览(27)
  • 单片机驱动多个ds18b20

    目录 1设计内容 2ds18b20介绍 2.1传感器引脚及原理图 2.2寄存器配置 3程序实现 3.1配置初始化 3.2配置寄存器 3.3ROM读取 3.4温度读取 通过51单片机,读取总线上挂载的多个ds18b20的温度信息。 如下图,成功读取到3路温度数据。 DS18B20传感器的引脚及封装图如下: DS18B20一共有三个引脚

    2024年02月21日
    浏览(26)
  • DS18B20温度传感器工作原理

    目录 管脚描述 综述 访问DS18B20的事件序列 通信时序 VDD:电源引脚,当采用寄生电源的时候,VDD必须连接到地 DQ:单总线运用的数据输入/输出,当采用寄生电源供电时,同时向设备提供电源 GND:地 ①DS18B20片内的ROM中都存在独一无二的64位编码,在后期通信时,是用此编码进

    2024年02月09日
    浏览(26)
  • 【mcuclub】温度传感器DS18B20

        VCC:外接供电电源输入端。 DQ: 数字信号输入/输出端。 GND:电源地线 为什么接上拉电阻: 因为DS18B20的数据口是漏极开路,如果不接上拉电阻,则只能输出低电平和高阻态,不能输出高电平,因此需要外接上拉电阻,否则无法输出1。DS18B20的工作电流约为1mA,VCC一般为

    2023年04月22日
    浏览(33)
  • DS18B20温度测量程序文件(简单通用)

    DS18B20是一个非常简单的温度传感器,对于像我这样单片机萌新是比较友好的。网上关于它的介绍非常多,包括原理、引脚、通信、以及51单片机、STM32的各种代码等等。本人写了一个简单的ds18b20.c库文件分享给大家,该文件内的函数可以实现单个元件的单次测温功能,温度精

    2024年02月05日
    浏览(31)
  • 一个IO上挂接多个DS18B20

    【本文发布于https://blog.csdn.net/Stack_/article/details/132733884,未经许可不得转载,转载须注明出处】 找一张二叉树的图片,结合代码以及代码注释去理解。 待完善文字说明

    2024年02月09日
    浏览(16)
  • Linux下ds18b20驱动开发获取温度

    对ds18b20不了解的可以查看这篇文章,讲解的比较详细的:STM32一线协议-DS18B20温度传感器采样实现 源码是根据上一届学长的,想要参考的可以去拜访一下gitee:代码链接 (1)修改设备树 在路径 linux-imx/arch/arm/boot/dts/ 下修改设备树 igkboard.dts : 主节点: 从节点: 在源码路径下

    2023年04月22日
    浏览(67)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包