51单片机 DS18B20温度储传感器

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); // 延迟500us

    OneWire_DQ = 1; // 释放总线

    i          = 29;

    while (--i); // 延迟70us

    AckBit = OneWire_DQ; // 读取从机响应

    i      = 227;

    while (--i); // 延迟500us

    return 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; // 返回温度值

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/953203.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

对话新晋 Apache SeaTunnel Committer:张圣航的开源之路与技术洞察

近日&#xff0c;张圣航被推选为 Apache SeaTunnel 的 Committer成员。带着对技术的热情和社区的责任&#xff0c;他将如何跟随 Apache SeaTunnel 社区迈向新的高度&#xff1f;让我们一起来聆听他的故事。 自我介绍 请您简单介绍一下自己&#xff0c;包括职业背景、当前的工作…

Linux渗透实战之Hackademic: RTB1靶场提权

0x1 前言 一、浅谈 哈喽师傅们&#xff0c;这次又到了给师傅们分享文章的时候了&#xff0c;这篇文章呢主要是给师傅们以vulnhub中的Hackademic: RTB1靶场&#xff0c;开始使用nmap进行相关渗透测试的操作&#xff0c;端口、目录扫描&#xff0c;得到一个静态的html页面&…

SpringBoot-Day1

1.Springboot入门 创建Maven工程 导入spring-boot-stater-web起步依赖 编写Controller 提供启动类 2.yml配置信息书写与获取 书写 # 发件人信息 email:user: 172349823457qq.comcode: sajdajlwhjfgfkllwhost: smtp.qq.comauth: true ​ # 学生爱好 hobbies:- 打篮球- 踢…

基于扩频解扩+汉明编译码+交织的lora通信系统matlab性能仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 2.算法运行软件版本 matlab2022a 3.部分核心程序 &#xff08;完整版代码包含详细中文注释和操作步骤视频&#xff09…

针对服务器磁盘爆满,MySql数据库始终无法启动,怎么解决

&#xff08;点击即可进入聊天助手&#xff09; 很多站长在运营网站的过程当中都会遇到一个问题,就是网站突然无法打开,数据一直无法启动 无论是强制重启还是,删除网站内的所有应用,数据库一直无法启动 这个时候,就需要常见的运维手段了,需要对服务器后台各个资源,进行逐一排查…

LeetCode1170 比较字符串最小字母出现频次

字符串算法探秘&#xff1a;最小字母频次统计与比较问题剖析 在编程的世界里&#xff0c;字符串处理问题犹如繁星般繁多且各具特色。今天&#xff0c;我们聚焦于一道饶有趣味的题目&#xff0c;它涉及到对字符串中最小字母出现频次的统计以及基于此的比较操作。这道题不仅考验…

Kafka 分区管理

分区是主题的子集&#xff0c;每个主题可以被分割成多个分区&#xff0c;一个分区有一个主副本&#xff08;Leader&#xff09;及一个或多个从&#xff08;Follower&#xff09;副本。分区允许将数据分布在多个broker上&#xff0c;这样可以提高数据的处理能力、并行性及可靠性…

xcrun: error: invalid active developer path 解决

在拉取 github 代码时&#xff0c;提示如下报错&#xff1a; xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun 原因是&#xff1a;这是由于 Xcode command line t…

2025华数杯国际赛A题完整论文讲解(含每一问python代码+数据+可视化图)

大家好呀&#xff0c;从发布赛题一直到现在&#xff0c;总算完成了2025“华数杯”国际大学生数学建模竞赛A题Can He Swim Faster的完整的成品论文。 本论文可以保证原创&#xff0c;保证高质量。绝不是随便引用一大堆模型和代码复制粘贴进来完全没有应用糊弄人的垃圾半成品论文…

Python 二次元初音未来桌宠

标题 相关资源文件已经打包成EXE文件&#xff0c;可双击直接运行程序&#xff0c;且文章末尾已附上相关源码&#xff0c;以供大家学习交流&#xff0c;博主主页还有更多Python相关程序案例&#xff0c;秉着开源精神的想法&#xff0c;望大家喜欢&#xff0c;点个关注不迷路&…

vue3学习日记5 - 项目起步

最近发现职场前端用的框架大多为vue&#xff0c;所以最近也跟着黑马程序员vue3的课程进行学习&#xff0c;以下是我的学习记录 视频网址&#xff1a; Day2-11.项目起步-静态资源引入和ErrorLen安装_哔哩哔哩_bilibili 学习日记&#xff1a; vue3学习日记1 - 环境搭建-CSDN博…

【Linux系统】—— vim 的使用

【Linux系统】—— vim 的使用 1 vim 的基本概念2 vim 的多模式3 命令模式下的命令集3.1 进入/退出其他模式3.2 光标移动命令集3.3 复制/剪切/粘贴/删除命令集3.4 撤销命令集3.5 查找命令集3.6 替换命令集3.7 进入与退出替换模式 4 批量化编译5 底行模式6 vim 小技巧7 vim简单配…

JAVA实战开源项目:课程智能组卷系统(Vue+SpringBoot) 附源码

本文项目编号 T 009 &#xff0c;文末自助获取源码 \color{red}{T009&#xff0c;文末自助获取源码} T009&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 老…

了解 Ansys Mechanical 中的网格方法:综合指南

网格是每个有限元分析 &#xff08;FEA&#xff09; 仿真的支柱。它将几何图形划分为离散单元&#xff0c;使 Ansys Mechanical 能够近似模型在各种条件下的行为。结构良好的网格可确保准确、可靠和计算高效的结果&#xff0c;而结构不佳的网格可能会导致错误、收敛问题或不必要…

【Linux】深刻理解软硬链接

一.软硬链接操作 1.软连接 touch 创建一个文件file.txt &#xff0c;对该文件创建对应的软链接改怎么做呢&#xff1f; ln -s file.txt file-soft.link .给对应文件创建软连接。 软连接本质就是一个独立的文件&#xff0c;因为我们对应的软连接有独立的inode&#xff0c;他…

施耐德M241与MR30-FBS-MT 在Machine Expert V2.0的组态过程

一、系统概述 MR30分布式IO是一个高度灵活的可扩展分布式 I/O 系统&#xff0c;MR30-FBC-MT用于通过 Modbus TCP 总线将过程信号连接到上一级控制器。 具有以下特点&#xff1a; 结构紧凑 PUSH IN端子&#xff0c;易于安装&#xff0c;布线简单 灵活性高&#xff1a;开关量模…

大数据技术在服饰行业的应用

大数据技术的快速发展为各行各业带来了深刻的变革&#xff0c;本文将详细探讨大数据技术的发展脉络&#xff0c;大数据技术推动服饰企业的数字化转型&#xff0c;旨在为相关领域的研究和实践提供参考。 什么是大数据大数据技术的发展历程大数据在服饰行业的应用总结 1&#xff…

Vue2+OpenLayers添加/删除点、点击事件功能实现(提供Gitee源码)

目录 一、案例截图 二、安装OpenLayers库 三、安装Element-UI 四、代码实现 4.1、添加一个点 4.2、删除所有点 4.3、根据经纬度删除点 4.4、给点添加点击事件 4.5、完整代码 五、Gitee源码 一、案例截图 可以新增/删除标记点&#xff0c;点击标记点可以获取到当前标…

Windows 10 ARM工控主板连接I2S音频芯片

在Windows工控主板应用中&#xff0c;音频功能是一项基本的需求&#xff0c;USB声卡在x86/x64 Windows系统上就可直接免驱使用&#xff0c;但这些USB声卡通常不提供ARM上的Windows系统驱动。本文将介绍如何利用安装在ARM上的Windows工控主板——ESM8400的I2S接口、连接WM8960音…

【Rust】错误处理机制

目录 思维导图 引言 一、错误处理的重要性 1.1 软件中的错误普遍存在 1.2 编译时错误处理要求 二、错误的分类 2.1 可恢复错误&#xff08;Recoverable Errors&#xff09; 2.2 不可恢复错误&#xff08;Unrecoverable Errors&#xff09; 三、Rust 的错误处理机制 3…