传感器学习——DS18B20

2023-11-03

DS18B20

        DS18B20是Dallas公司生产的数字温度传感器,具有体积小、适用电压宽、经济灵活的特点。它内部使用了onboard专利技术,全部传感元件及转换电路集成在一个形如三极管的集成电路内。DS18B20有电源线、地线及数据线3根引脚线,工作电压范围为3~5.5 V,支持单总线接口。


DS18B20的结构和工作原理

        DS18B20 的测量范围为 -55 ℃ ~+ 125 ℃ ; 在 -10~+ 85°C范围内,精度为 ± 0.5°C
DS18B20的外部结构如图1所示。其中,VDD为电源输入端,DQ为数字信号输入/输出端,GND为电源地

                                           在这里插入图片描述

        第0和第1字节为16位转换后的温度二进制值,其中前4位为符号位,其余12位为转换后的数据位(分辨率为12位)。如果温度大于0,则前4位值为0,只要将测到的数值乘上0.062 5即可得到实际温度值;如果温度小于0,则前4位为1,需将测得的数值取反加1后,再乘上0.062 5。第0和第1字节各位的二进制值如下:

                                         在这里插入图片描述

                                         在这里插入图片描述
        根据DS18B20的通信协议,MCU对其操作主要有如下3个步骤:读写之前,对DS18B20发送约500 μs的低电平进行复位;复位成功,发送ROM指令;发送RAM指令。MCU对DS18B20的具体操作流程如图4所示。

                                            在这里插入图片描述

程序源码

ds18b20.c

#include "ds18b20.h"
#include "delay.h" 
void DS18B20_Rst(void)    
{                 
 DS18B20_IO_OUT(); //SET PG11 OUTPUT
  DS18B20_DQ_OUT=0; //拉低DQ
  delay_us(750);    //拉低750us
   DS18B20_DQ_OUT=1; //DQ=1 
 delay_us(15);     //15US
}

//等待ds18b20回应
//返回1未检测到ds18b20的存在
//返回0存在
u8 DS18B20_Check(void)     
{   
 u8 retry=0;
 DS18B20_IO_IN();//SET PG11 INPUT  
    while (DS18B20_DQ_IN&&retry<200)
    
 {
  retry++;
  delay_us(1);
   };  
 if(retry>=200)return 1;
 else retry=0;
    while (!DS18B20_DQ_IN&&retry<240)
     {
  retry++;
  delay_us(1);
   };
 if(retry>=240)return 1;     
 return 0;
}
//从ds18b20读取一个位
//返回值1/0

u8 DS18B20_Read_Bit(void)     // read one bit
{
  u8 data;
 DS18B20_IO_OUT();//SET PG11 OUTPUT
  DS18B20_DQ_OUT=0; 
 delay_us(2);
   DS18B20_DQ_OUT=1; 
 DS18B20_IO_IN();//SET PG11 INPUT
 delay_us(12);
 if(DS18B20_DQ_IN)data=1;
  else data=0;  
  delay_us(50);           
  return data;
}
//从ds18b20读取一个字节
//返回值:读到的数据
u8 DS18B20_Read_Byte(void)    // read one byte
{        
    u8 i,j,dat;
    dat=0;
 for (i=1;i<=8;i++) 
 

  {
        j=DS18B20_Read_Bit();
        dat=(j<<7)|(dat>>1);
    }          
    return dat;
}
//写一个字节到ds18b20
//dat:要写入的字节

void DS18B20_Write_Byte(u8 dat)     
 {             
    u8 j;
    u8 testb;
   DS18B20_IO_OUT();//SET PG11 OUTPUT;
    for (j=1;j<=8;j++) 
     {
        testb=dat&0x01;
        dat=dat>>1;
        if (testb) 
        {
            DS18B20_DQ_OUT=0;// Write 1
            delay_us(2);                            
            DS18B20_DQ_OUT=1;
            delay_us(60);             
                    }
        else 
        {
            DS18B20_DQ_OUT=0;// Write 0
            delay_us(60);             
            DS18B20_DQ_OUT=1;
            delay_us(2);                          
        }
            }
}
//开始温度转换
void DS18B20_Start(void)// ds1820 start convert
{                        
    DS18B20_Rst();    
   DS18B20_Check();  
    DS18B20_Write_Byte(0xcc);// skip rom
    DS18B20_Write_Byte(0x44);// convert
} 
//初始化ds18b20的io口 DQ同时检测DS的存在
//返回1:不存在
//返回0:存在

u8 DS18B20_Init(void)
{
 GPIO_InitTypeDef  GPIO_InitStructure;
 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOG, ENABLE);
  //GPIOG9
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//普通输出模式
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//50MHz
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉­
  GPIO_Init(GPIOG, &GPIO_InitStructure);//初始化
 
  DS18B20_Rst();
 return DS18B20_Check();
}  
//从ds18b20得到温度值
//精度:0.1c
//返回值:温度值(-550~1250)
short DS18B20_Get_Temp(void)
{
    u8 temp;
    u8 TL,TH;
   short tem;
    DS18B20_Start ();                    // ds1820 start convert
    DS18B20_Rst();
    DS18B20_Check();  
    DS18B20_Write_Byte(0xcc);// skip rom
    DS18B20_Write_Byte(0xbe);// convert     
    TL=DS18B20_Read_Byte(); // LSB   
    TH=DS18B20_Read_Byte(); // MSB   
    if(TH>7)
    {
        TH=~TH;
        TL=~TL; 
        temp=0;//温度为负
    }else temp=1;//温度为正
    tem=TH; //获得高八位
    tem<<=8;        
    tem+=TL;//获得低八位
    tem=(double)tem*0.625;//转换    
 if(temp)return tem; //放回温度值
 else return -tem;    
}



        

ds18b20.h

#ifndef __DELAY_H
#define __DELAY_H       
#include <sys.h>   
void delay_init(u8 SYSCLK);
void delay_ms(u16 nms);
void delay_us(u32 nus);


#endif


————————————————
版权声明:本文为CSDN博主「互相学习3」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_46156693/article/details/104459040

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

传感器学习——DS18B20 的相关文章

  • 在stm32上对于火焰模块的应用分析

    在stm32上对于火焰模块的应用分析 一 火焰模块 接线说明 供电 3 3v G 接地 GND AO模拟输入 DO数字输出 以stm32f407举例说明 AO接入 PF7 DO接入 PA4 实际上也可以不接 因为本实例没用到 二 火焰模块的
  • STM32-土壤湿度传感器

    目录 0 说明 1 传感器介绍 2 代码说明 2 1 ADC初始化函数 adc c 2 2 GPIO初始化函数 2 3 主函数 0 说明 本篇文章主要是说明怎么使用STM32单片机读取土壤湿度传感器采集到的数据 包括模拟和数字数据 并且附带
  • 关于激光雷达盲区0.4m问题

    https xw qq com amphtml 20220302A03F6I00 盲区 吸点 激光雷达探测器一般有几到几十纳秒的Dead Time Dead Time指是接收到一个激光脉冲后到再能接受一个新激光脉冲所需的最短时间 当一束激光
  • arduino实战 2——利用arduino做一个人体传感器

    arduino是较为简单的单片机 易上手 所以利用arduino开始探索之旅吧 目录 一 材料清单 一 模块介绍 1 HC SR501 2 HC SR04 二 实物展示 1 工作流程 2 连线 二 代码 1 代码展示 2 代码的理解 三 写
  • Qcom 平台 camera 之 RAW+YUV图抓取

    目录 前言 抓取注意事项 dumping mask bit 定义 Andorid5 8 HAL1 拍照 RAW 调试 抓取拍照 RAW 图 Android9 0 Android9 0 HAL1 preview RAW 操作步骤 抓取的脚本
  • 【雕爷学编程】Arduino动手做(65)---红外寻迹传感器

    37款传感器与执行器的提法 在网络上广泛流传 其实Arduino能够兼容的传感器模块肯定是不止这37种的 鉴于本人手头积累了一些传感器和执行器模块 依照实践出真知 一定要动手做 的理念 以学习和交流为目的 这里准备逐一动手尝试系列实验 不管
  • 通过 rqt_plot 完成ATI F/T 力和力矩传感器六轴数据可视化

    基于该篇博客https blog csdn net qq 34935373 article details 103481401 实现了通过ROS节点的方式启动ATI sensor 完成配置归零和设置软件矢量偏移 并且获取六轴数据 实时的打印
  • 基于物联网的视觉暂留风扇设计

    论文下载 知网链接 版权所有 有相关问题或索要完整代码实现请联系作者gzn00417或邮箱gzn00417 foxmail com 基于物联网的视觉暂留风扇设计 郭茁宁1 林亦宁2 何胜阳2 哈尔滨工业大学计算机科学与技术学院 黑龙江 哈尔
  • L298N芯片驱动电机

    L298N芯片驱动电机 一 控制原理 L298N可以控制两个电机 具体原理为IN1 IN2 IN3 IN4四个输入端口接收控制器发出的电信号 两个输出端分别控制两组直流电机转动 输入端的逻辑控制表如下 GPIO GPIO 0 GPIO 1
  • MS5611气压计 I2C驱动代码 STM32

    文章目录 前言 通信接口 IIC 一 MS5611的5种命令 RESET 重启芯片 READ PROM D1 D2 CONVERSION READ ADC RESULT 二 实现代码 1 初始化 2 读取数据 3 补偿温度数据 前言 这篇博
  • 基于nb-iot和arduino的气象站(一)

    基于nb iot和arduino的气象站 一 温湿度和紫外线传感器 上一篇已经介绍了项目的大概情况 这一篇先讲温湿度传感器和紫外线传感器的使用 一 温湿度传感器 我使用的温度传感器为DHT21 DHT21数字温湿度传感器是一款含有已校准数字
  • STM32配合火焰传感器的火灾报警

    实验材料 STM32F03 我这里用的是正点原子的战舰 火焰传感器 还有个蜂鸣器 我这个开发板自带 也是可外接的 火焰传感器介绍 工作原理 传感器模块在环境火焰光谱或者光源达不到设定阈值时 DO 口输出低电平 当外界环境火焰光谱或者光源超过
  • NPN与PNP型传感器的区别

    NPN与PNP型传感器其实就是利用三极管的饱和和截止 输出两种状态 属于开关型传感器 但输出信号是截然相反的 即高电平和低电平 NPN输出是低电平0 PNP输出的是高电平1 沧正称重传感器 NPN与PNP型传感器 开关型 分为六类 1 NP
  • HX711称重模块的使用

    HX711称重模块的使用 先贴一段文字 见多了可以跳过直接看下面 满量程输出电压 激励电压 灵敏度1 0mv v 例如 供电电压是5v 乘以灵敏度1 0mv v 满量程5mv 相当于有5Kg 重力产生时候产生5mV 的电压 2 概述 711
  • ADS1115(ADC)16 位分辨率的高精度模数转换器的操作步骤

    ADS1113 ADS1114 和ADS1115 是具有16 位分辨率的高精度模数转换器 ADC 采用超小型的无引线QFN 10 封装或MSOP 10 封装 ADS1113 4 5 在设计时考虑到了精度 功耗和实现的简易性 ADS1113
  • 讲一点点自动驾驶技术(1)概论

    讲一点点自动驾驶技术 1 概论 作为一个自动驾驶小菜鸟工程师 小Q入门才两三年时间 最近空闲时间比较多 利用这个平台把自己对于无人驾驶技术所看所学的东西在这进行一个整理 一来自己看着方便 二来供大家交流学习 Xiao Xi ps 如果大家觉
  • Arduino与人体感应模块

    工具 1 Arduino 开发板 1 2 人体感应模块传感器 1 这个人体感应传感器有三个引脚 分别是VCC OUT GND 同之前的红外线传感器一样输出的是数字信号 所以要将OUT接入digital pwm引脚 这里我接入3号引脚 下面是
  • 单片机设计_单路测温系统(AT89C51、DS18B20温度传感器、LCD1602)

    单片机测温系统 想要更多项目私wo 一 简介 此系统主要由AT89C51 DS18B20温度模块和LCD1602组成 大致的原理是DS18B20温度采集到的数据传送给AT89C51的P3 3 INT1 外部中断1 最后通过LCD1602显示
  • 关于6轴传感器LSM6DSLTR的调试说明

    关于6轴传感器LSM6DSLTR的调试说明 AP的检测脚需要配置为pull down的 不能配置为pull up 否则中断脚一直是高 sensor的int1脚配置为open drain模式 可以配置wakeup中断 阈值设置为1 2g产生中
  • ESP8266 WIFI

    手机APP esp8266 单片机之间究竟是如何连接的呢 esp8266与单片机是串口连接 esp8266仅作为网络模块使用 不需要写代码 单片机通过串口发送AT指令 esp8266执行AT指令 设置为STA模式 AP模式或混合模式 生成W

随机推荐

  • 剪映专业版 for Mac(全能易用的剪辑软件)v2.3

    剪映专业版 for Mac 界面更清晰 面板更强大 布局更适合电脑端用户 适用更多专业剪辑场景 延续剪映移动端全能易用的风格 无论你是剪辑师 学生 vlogger 剪辑爱好者 博主 都能够迅速上手操作 制作更专业 更高阶的视频效果 元宇宙
  • error LNK2005: _DllMain@12 已经在 dllmain.obj 中定义

    error LNK2005 DllMain 12 已经在 dllmain obj 中定义 今天遇到了同样的问题 搜索搜到了这里 后来解决了 创建解决方案时 用的是WIN32 DLL 添加了MFC ATL的支持 自动生成文件中是没有现成的Dl
  • RMPE: Regional Multi-person Pose Estimation 论文解读

    paper title RMPE Regional Multi person Pose Estimation paper link https arxiv org pdf 1612 00137 pdf project https www m
  • ubuntu18 Swin-Transformer-Object-Detection

    1 目标检测 https github com SwinTransformer Swin Transformer Object Detection 原文地址 https arxiv org abs 2103 14030 代码地址 https
  • 剑指offer-11-数值的整数次方

    文章目录 0 问题 1 一般思路 2 最优方法 快速求幂算法 3 完整代码 0 问题 给定一个double类型的浮点数base和int类型的整数exponent 求base的exponent次方 保证base和exponent不同时为0 1
  • 【转】VS2008快捷键使用技巧

    http www cnblogs com aplomb articles 2171819 html 最近在网上搜集了一些VS2008的快捷键使用技巧 希望能给你带来帮助 提高你的开发效率 1 拷贝和删除一行之前 你不必选中该行 我很讨厌看到
  • java反射机制判断对象所有属性是否全部为空

    判断1个对象所有属性是否为空 可以使用反射机制实现 核心参考代码 判断该对象是否 返回ture表示所有属性为null 返回false表示不是所有属性都是null public static boolean isAllFieldNull Ob
  • PyTorch基础:神经网络工具箱torch.nn(nn.Module类)

    nn Module类 nn Module是PyTorch提供的神经网络类 并在类中实现了网络各层的定义及前向计算与反向计算机制 在初始化中定义模型结构与参数 在函数forward 中编写网络前向过程即可 一般把网络中具有可学习参数的层 如全
  • 重载与重写的再理解

    函数重载 必须要在一个类中进行 子类无法重载父类的函数 父类同名函数将被名称覆盖 重载是在编译期间根据参数类型和个数决定函数调用 函数重写 必须是发生在子类和父类之间的 子类与父类必须有相同的函数原型 使用virtual使多态 如果不使用v
  • Shell 脚本中判断字符串是否为空

    判断一个字符串是否为空的方法 方法一 if str 如果str是空字符串则返回真 方法二 if x str x 如果str是空字符串则返回真 方法三 if z str 如果str是空字符串则返回真 注意 前面三种方式判断字符串的时候最好使用
  • 【matlab】指数分布、均匀分布、正态分布

    指数分布 产生参数为0 1的指数分布的命令应为exprnd 1 0 1 题目要求 顾客到来间隔时间服从参数为0 1的指数分布 指数分布的均值为1 0 1 10 产生参数为0 1的指数分布的命令应为exprnd 1 0 1 指两个顾客到达商店
  • 不支持的 HTTP 请求方法 POST

    url书写有问题 微信redirect uri到后台不需要urlEncode
  • 开漏输出与推挽

    1 推挽输出 可以输出高 低电平 连接数字器件 输出 0 时 N MOS 导通 P MOS 高阻 输出0 输出 1 时 N MOS 高阻 P MOS 导通 输出1 不需要外部上拉电路 开漏输出 输出端相当于三极管的集电极 适合于做电流型的驱
  • Node处理文件(遍历文件夹删除指定文件)

    需求 遍历DATA文件夹删除txt文件 const path require path const fs require fs const dir DATA fs readdir dir err files gt files forEach
  • CodeBlock编译 mqtt

    下载源码编译 git clone https github com eclipse paho mqtt c git cd paho matt c make sudo make install 如果编译遇到错误 安装openssl 1 1 1
  • 【机器学习】Excel对数据线性回归分析

    目录 一 实验目的 二 高尔顿数据集 1 父子身高 2 母子身高 三 Anscombe四重奏 四 参考 一 实验目的 1 线性回归练习 父亲高则儿子高 父亲矮则儿子矮 即父亲与儿子身高相关 且为正相关 母高高一窝 父高高一个 即母亲的身高比
  • 【python】 定义一个Person类,它包含数据成员age, name和gender。从Person中派生一个类Employee,在新类中添加一个数据成员,存储个人的number.等等

    定义一个Person类 它包含数据成员age name和gender a 从Person中派生一个类Employee 在新类中添加一个数据成员 存储个人的number 再从Employee中派生一个类Executive 每个派生类都应该定义
  • 商业智能BI专题报告(精选九篇)

    BI Business Intelligence 即商业智能 它是一套完整的解决方案 把企业的运营数据转化为信息或知识 辅助企业做出明智的业务经营决策的工具 将无序 零散 孤立的数据转换成整合的 规律的 有价值的数据资产 将其以直观 形象的
  • linux磁盘性能测试

    linux磁盘性能测试 1 测试磁盘写能力 time dd if dev zero of test db bs 8k count 1000000 oflag direct 因为 dev zero是一个伪设备 不产生IO 所以主要都集中在te
  • 传感器学习——DS18B20

    DS18B20 DS18B20是Dallas公司生产的数字温度传感器 具有体积小 适用电压宽 经济灵活的特点 它内部使用了onboard专利技术 全部传感元件及转换电路集成在一个形如三极管的集成电路内 DS18B20有电源线 地线及数据线3