当前位置: 首页 > news >正文

DS18B20温度传感器

DS18B20简介

DS18B20 是由 DALLAS 半导体公司推出的一种的“一线总线(单总线)”接口的温度传感器
这种一线总线就是 三线制 SPI

DS18B20的 配置寄存器:

TM 是测试位,出厂设置就被设置为0,不需要改动,
R1、R0 是精度位,为设置1
0 1 1 1 1 1 1 1

温度寄存器格式

读取时,低位在前,高位在后,
正温度 高位前5位为 0,负温度 高位前5位为 1
’负温度 取反后 + 1*0.0625 可得到实际温度
如何转换?
以+85度 为例:
数据输出85°,0550h 换算10进制为1360,将这个值*0.0625 = 85度
负温度:-0.5
1111 1111 1111 1000 取反  0000 0000 0000 0111
换算十六进制 0x0007, 加1  0x0008,8*0.0625= 0.5 ,加上符号 -0.5°

DS18B20 时序包括:

初始化时序

写0 、1 时序

读0、1时序

DS18B20发送所有的命令和数据都是字节的低位在前


(1)单总线初始化时序

定义初始化函数:

1、主机输出低电平

2、保持低电平480us~960us

3、释放总线,为高电平

4、拉高电平延时15~60us

// 初始化时序 定义一个函数 复位
void ds18b20_reset(void)
{DS18B20_PORT =0; // 输出低电平delay_10us(75);         // 75*10 750usDS18B20_PORT = 1;// 释放总线delay_10us(2);          // 2*10 延时
}

(2)写时序

写时序包括写1 或 0 ,写时序至少60us,2次独立的写时序需要1us 恢复,

两种写0 写1 都是总线拉低位

写0,主机拉低,延时15us,45us 采样

写1 ,主机输出低电平,延时2us,然后释放总线拉高

(3)读时序

单总线流程

复位→发 SKIP ROM 命令(0XCC)→发开始转换命令(0X44)→延时→复位→发送 SKIP ROM 命令(0XCC)→发读存储器命令 (0XBE)→连续读出两个字节数据(即温度)→结束


软件编程:


// 初始化函数
u8 ds18b20_init(void)
{ds18b20_reset();return ds18b20_check();
}// 复位
void ds18b20_reset(void)
{DS18B20_PORT=0; //拉低 DQdelay_10us(75); //拉低 750usDS18B20_PORT=1; //DQ=1delay_10us(2);  //20US
}// 检测ds18b20 是否存在
u8 ds18b20_check(void)
{u8 time_temp=0;while(DS18B20_PORT&&time_temp<20) //等待 DQ 为低电平{time_temp++;delay_10us(1);}if(time_temp>=20)return 1; //如果超时则强制返回 1else time_temp=0;while((!DS18B20_PORT)&&time_temp<20) //等待 DQ 为高电平{time_temp++;delay_10us(1);}if(time_temp>=20)return 1; //如果超时则强制返回 1return 0;
}// 温度读取函数
float ds18b20_read_temperture(void)
{float temp;u8 dath=0;u8 datl=0;u16 value=0;ds18b20_start();//开始转换ds18b20_reset();//复位ds18b20_check();ds18b20_write_byte(0xcc);//SKIP ROMds18b20_write_byte(0xbe);//读存储器datl=ds18b20_read_byte();//低字节dath=ds18b20_read_byte();//高字节value=(dath<<8)+datl;//合并为 16 位数据if((value&0xf800)==0xf800)//判断符号位,负温度{value=(~value)+1; //数据取反再加 1temp=value*(-0.0625);//乘以精度}else //正温度{temp=value*0.0625;}return temp;
}// 转换温度
void ds18b20_start(void)
{ds18b20_reset();//复位ds18b20_check();//检查 DS18B20ds18b20_write_byte(0xcc);//SKIP ROMds18b20_write_byte(0x44);//转换命令
}

http://www.lryc.cn/news/175188.html

相关文章:

  • LeetCode322. 零钱兑换
  • AUTOSAR扫盲贴--不是黑神话【基本概念和方法论】
  • python抠图(去水印)开源库lama-cleaner入门应用实践
  • Nginx可视化管理工具结合cpolar实现远程访问内网服务
  • CCC数字钥匙设计【BLE】 --建立安全测距
  • Ubuntu22.04 Opencv4.5.1 CPU和GPU编译攻略,Opencv CPU和GPU编译保姆教程 亲自测试。
  • 常识判断 --- 党史
  • Rust 基础再理解
  • Opencv cuda版本在ubuntu22.04中安装办法,解决Could NOT find CUDNN的办法
  • 全网首发YOLOv8暴力涨点:Gold-YOLO,遥遥领先,超越所有YOLO | 华为诺亚NeurIPS23
  • BD就业复习第四天
  • 数据结构 | 树
  • Android11 适配
  • UML基础与应用之对象图
  • 英码科技精彩亮相火爆的IOTE 2023,多面赋能AIoT产业发展!
  • 400G QSFP-DD FR4 与 400G QSFP-DD FR8光模块:哪个更适合您的网络需求?
  • 【Android】Kotlin 中的 apply、let、with、also、run 到底有啥区别?
  • 设计模式——职责链模式
  • 小程序自定义tabbar,中间凸起
  • 数据结构-顺序栈C++示例
  • 若依cloud -【 100 ~ 103 】
  • 可转债实战与案例分析——成功的和失败的可转债投资案例、教训与经验分享
  • @NotNull注解不生效,全局异常处理
  • 【办公自动化】使用Python一键往Word文档的表格中填写数据(文末送书)
  • OpenHarmony应用核心技术理念与需求机遇简析
  • 让Pegasus天马座开发板实现超声波测距
  • C++11 多线程学习
  • 数学公式测试
  • 机器学习——SVM(支持向量机)
  • 【李沐深度学习笔记】基础优化方法