51单片机 DS18B20温度储传感器

devtools/2025/1/18 0:54:03/

DS18B20温度传感器

64-BITROM:作为器件地址,用于总线通信的寻址,是唯一的,不可更改

SCRATCHPAD(暂存器):用于总线的数据交互

EEPROM:用于保存温度触发阈值和配置参数

暂存器

单总线

单总线(1-Wire BUS)是由Dallas公司开发的一种通用数据总线

一根通信线:DQ

异步、半双工

单总线只需要一根通信线即可实现数据的双向传输,当采用寄生供

电时,还可以省去设备的VDD线路,此时,供电加通信只需要DQ

和GND两根线

单总线线路规范

设备的DQ均要配置成开漏输出模式

DQ添加一个上拉电阻,阻值一般为4.7KΩ左右

若此总线的从机采取寄生供电,则主机还应配一个强上拉输出电路

单总线时序结构

初始化

主机将总线拉低至少480us,然后释放总线,,等待15~60us后,

存在的从机会拉低总线60~240us以响应主机,之后从机将释放总线

  // 单总线初始化函数u8 OneWire_Init(){u8 i; u8 AckBit;OneWire_DQ = 1; // 拉高总线OneWire_DQ = 0; // 产生复位脉冲i          = 227;while (--i); // 延迟500usOneWire_DQ = 1; // 释放总线i          = 29;while (--i); // 延迟70usAckBit = OneWire_DQ; // 读取从机响应i      = 227;while (--i); // 延迟500usreturn AckBit; // 返回响应位}

发送一位

主机将总线拉低60~120us,然后释放总线,表示发送0;主机将总线拉低1~15us,然后释放总线,表示发送1.从机将在总线拉低30us后(典型值)读取电平,整个时间片应大于60us

// 发送一位数据void OneWire_SendBit(u8 bit1){u8 i;OneWire_DQ = 0; // 拉低总线i          = 4;while (--i); // 短暂延迟OneWire_DQ = bit1; // 发送数据位i          = 22;while (--i); // 延迟OneWire_DQ = 1; // 释放总线}

接收一位

主机将总线拉低1~15us,然后释放总线,并在拉低后15us内读取总线电平(尽量贴近15us的末尾),读取为低电平则为接收0,高电平则为接受1,整个时间片应大于60us

// 接收一位数据u8 OneWire_ReceiveBit(){u8 i;u8 bit2;OneWire_DQ = 0; // 拉低总线i          = 2;while (--i); // 短暂延迟OneWire_DQ = 1; // 释放总线i          = 2;while (--i); // 延迟bit2 = OneWire_DQ; // 读取数据位i   = 22;while (--i); // 延迟return bit2; // 返回数据位}

发送一个字节,接收一个字节(低位在前)

// 发送一个字节的数据void OneWire_SendByte(u8 byte){u8 i;for (i = 0; i < 8; i++) {OneWire_SendBit((byte >> i) & 0x01); // 逐位发送字节}}// 接收一个字节的数据u8 OneWire_ReceiveByte(){u8 i;u8 byte = 0x00;for (i = 0; i < 8; i++) {if (OneWire_ReceiveBit()) {byte |= (0x01 << i); // 逐位接收字节}}return byte; // 返回接收到的字节}

操作流程

初始化:从机复位,主机判断从机是否响应

ROM操作:ROM指令+本指令需要的读写操作

功能操作:功能指令+本指令需要的读写操作

数据帧

温度变换

// 启动温度转换void DS18B20_ConvertT(){OneWire_Init(); // 初始化单总线OneWire_SendByte(DS18B20_SKIP_ROM); // 跳过ROM命令OneWire_SendByte(DS18B20_CONVERT_T); // 启动温度转换命令}

温度读取

// 读取温度值float DS18B20_ReadT(){u16 temp;  u8 TLSB, TMSB;float T;OneWire_Init(); // 初始化单总线OneWire_SendByte(DS18B20_SKIP_ROM); // 跳过ROM命令OneWire_SendByte(DS18B20_READ_SCRATCHPAD); // 读取暂存器命令TLSB = OneWire_ReceiveByte(); // 读取温度低字节TMSB = OneWire_ReceiveByte(); // 读取温度高字节temp = TMSB << 8 | TLSB; // 合并高低字节为16位温度值T = (float)temp / 16.0; // 转换为实际温度值return T; // 返回温度值}


http://www.ppmy.cn/devtools/151411.html

相关文章

《探秘鸿蒙NEXT中的人工智能核心架构》

在当今科技飞速发展的时代&#xff0c;华为HarmonyOS NEXT的发布无疑是操作系统领域的一颗重磅炸弹&#xff0c;其将人工智能与操作系统深度融合&#xff0c;开启了智能新时代。那么&#xff0c;鸿蒙NEXT中人工智能的核心架构究竟是怎样的呢&#xff1f;让我们一同探秘。 基础…

RK3568 Android11 锁屏界面屏蔽下拉状态栏

参考文章&#xff1a; Android R锁屏界面屏蔽下拉状态栏_pulseexpansionhandler-CSDN博客 前提增加状态栏控制显隐属性&#xff0c;以下面文章为前提补充功能 RK3568 Android11 状态栏和导航栏增加显示控制功能-CSDN博客 修改文件位置&#xff1a; frameworks/base/package…

大疆发布可折叠航拍无人机,仅重249g,支持 4800 万像素拍摄

在以往的无人机使用经历中&#xff0c;携带不便一直是个让人头疼不已的问题。那些体积硕大的无人机&#xff0c;每次出行都像是一场艰难的搬运&#xff0c;塞进车里都费劲&#xff0c;更别提轻松地穿梭在城市街头或是户外探险中了。但就在大家对这些问题习以为常、感到无奈时&a…

《基于卷积神经网络的星图弱小目标检测》论文精读

Dim small target detection based on convolutinal neural network in star image 摘要 由于低信噪比目标和复杂背景&#xff0c;星图中弱小目标的检测是一项具有挑战性的任务。本文提出了一种深度学习方法&#xff0c;用于在背景不均匀和不同类型的噪声下检测单帧星图中的弱…

Kubernetes (K8s) 入门指南

Kubernetes (K8s) 入门指南 什么是Kubernetes&#xff1f; Kubernetes&#xff0c;通常简称为 K8s&#xff08;因为从 “K” 到 “s” 之间有八个字符&#xff09;&#xff0c;是一个开源的容器编排平台&#xff0c;用于自动化部署、扩展和管理容器化应用程序。它最初由谷歌设…

Termora跨平台 SSH/SFTP/Terminal 客户端工具

前言 Termora一款强大的终端模拟与SSH客户端工具&#xff0c;集SFTP传输、跨平台兼容、Zmodem协议、SSH端口转发、配置同步、宏录制、关键词高亮、密钥管理、多会话命令发送及数据加密于一体&#xff0c;专为追求高效远程工作的您设计。无论是开发、管理还是日常任务&#xff…

k8s部署jumpserver4.0.2

k8s部署allinone方式部署jumpserver4.0.2 一、准备工作 版本信息介绍&#xff1a; jumpserver&#xff1a;allinone 4.0.2 postgresql&#xff1a;12.20 1.1、官网文档 https://github.com/jumpserver/Dockerfile/tree/master/allinone 1.2、部署数据库 docker run --nam…

如何防止服务器被入侵

要防止服务器被入侵&#xff0c;首先需要了解黑客入侵服务器的几条途径&#xff0c;经护卫神安全团队整理&#xff0c;黑客入侵大概有四条途径&#xff1a; 1、利用网站漏洞入侵 2、利用系统漏洞入侵 3、利用软件漏洞入侵 4、利用远程桌面入侵 我们需要对这些途径都做好防…