IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 51单片机读取DS18B20(单总线) -> 正文阅读

[嵌入式]51单片机读取DS18B20(单总线)

一、DS18B20简介

DS18B20是一种常见的数字温度传感器,其控制命令和数据都是以数字信号的方式输入输出,相比较于模拟温度传感器,具有功能强大、硬件简单、易扩展、抗干扰性强等特点

  • 测温范围: -55°C 到+125°C
  • 通信接口: 1-Wire (单 总线)
  • 其它特征:可形成总线结构、内置温度报警功能、可寄生供电

DS18B20器件框图

?

图中:

1. 64-BT ROM:作为器件地址。用于总线通信的寻址。每个DS18B02都有一个ID号,用来寻址,相当于一个大门,当只有一个单总线设备时,可以选择跳过这个大门;

2. SCRATHPAD,属于RAM, (暂存器)公用于总线的数据交互

3. EEPROM用于保存温度触发阚值和配置参数

4. MEMORY CONTROL LOGIC 内存控制逻辑,相当于管家,操作底下的暂存器;

5. TEMPERATURE SENSOR 是温度传感器,直接将数据处理好放在暂存器中;

6. 最后两个都是设置阈值的,用于报警;

7. 第四个是配置寄存器,设置分辨率,默认最高分辨率0.0625,可以设置为0.5的分辨率,使得运算的更快一些;

8. 第五个是校验寄存器;

下图为DS18B20内部存储器结构

?无法通过写数据直接给EEPROM写数据,只能写入到暂存器中,通过发送指令,再让暂存器中的数据复制到EEPROM。

?二、单总线介绍

  • 单总线(1-Wire BUS) 是由Dallas公司开发的-种通用数据总线一根通信线: DQ
  • 异步、半双工
  • 单总线只需要一根通信线即可实现数据的双向传输,当采用寄生供电时,还可以省去设备的VDD线路,此时,供电加通信只需要DQ和GND两根线

设备的DQ均要配置成开漏输出模式
DQ添加一个上拉电阻,阻值一般为4.7KQ左右
若此总线的从机采取寄生供电,则主机还应配一个强上拉输出电路

?

1. 初始化

主机将总线拉低至少480us,然后释放总线,等待15~60us后, 存在的从机会拉低总线60~ 240us以响应主机,之后从机将释放总线

2.发送一位数据

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

3.接收一位数据

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

?

4. 发送一个字节

?

5.接收一个字节

?

6.DS18B20操作流程

  • 初始化:从机复位,主机判断从机是否响应
  • ROM操作:ROM指令+本指令需要的读写操作
  • 功能操作:功能指令+本指令需要的读写操作,相当于RAM操作对暂存器的操作

  • MATCH ROM[55h] ?匹配ROM,相当于设备的地址
  • SKIP ROM[CCh] 跳过ROM,只有一个设备在总线上,因此可以直接跳过ROM(大门),进行通信
  • CONVERT T[44h] ?温度传递指令,发送该指令,DS18B20中的温度传感器就将数据传送到暂存器当中
  • WRITE SCRATCHPAD[4Eh] 写暂存器指令,该指令是将EEPROM中的数据写到暂存器当中
  • READ SCRATCHPAD[BEh] 读暂存器指令,该指令是将暂存器当中的数据都读出来,但实际操作时我们只需要前两个温度的字节
  • COPY SCRATCHPAD[48h] ?复制暂存器,将ROM中的数据写入到EEPROM中,如果想要实现掉电不丢失,就先把数据写入到ROM中,再通过调用该指令,写入到EEPROM中
  • RECALL E2[B8h] 覆盖暂存器指令,该指令是将EEPROM中的数据覆盖掉暂存器中的数据
    ?

?7.DS18B20数据帧

8.DS18B20数据存储格式

?其中低四位表示小数,高五位表示符号,中间是整数部分

?

?

?9.温度操作

/**
  * @brief  DS18B20开始温度变换
  * @param  无
  * @retval 无
  */
void ds18b20_convert_temp(void)
{
	one_wire_init();
	one_wire_send_byte(DS18B20_SKIP_ROM);
	one_wire_send_yte(DS18B20_CONVERT_T);
 
}
 
/**
  * @brief  DS18B20读取温度
  * @param  无
  * @retval 温度数值
  */
float ds18b20_read_temp(void)
{
	unsigned char temp_lsb, temp_msb;
	int           temp_i;
	float         temp_f;
	
	one_wire_init();
	
	one_wire_send_byte(DS18B20_SKIP_ROM);	
	one_wire_send_byte(DS18B20_READ_SCRATCHPAD);
	
	temp_lsb = one_wire_receive_byte();
	temp_msb = one_wire_receive_byte();
	
	temp_i = (temp_msb << 8) | temp_lsb;
	temp_f = temp_i / 16.0;             //因为低四位表示的是小数部分,因此 temp_i 直接读出来并不是实际的值,
	                                    //要把小数部分摘出来,除以16相当于把低四位给滤出来
	return temp_f;
}

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-06-20 23:06:12  更:2022-06-20 23:06:50 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 0:50:51-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码