温度传感器 DS18B20
1. 实物图
2. 64位(激)光刻只读存储器
开始8位(28H)是产品类型标号,接着的48位是该DS18B20自身的序列号,最后8位是前面56位的循环冗余校验码
光刻ROM的作用是使每一个DS18B20都各不相同,这样就可以实现一根总线上挂接多个DS18B20的目的
3. 温度寄存器
高字节的前5位是符号位,如果测得的温度大于0,这5位为‘0’,只要将测到的数值乘以0.0625即可得到实际温度;如果温度小于0,这5位为‘1’,测到的数值需要先减1再取反再乘以0.0625即可得到实际温度
4. 温度与数据关系
12-bit精度,0x550 * 0.0625 = 85
5. 精度寄存器
6. ROM指令表
7. RAM指令表
8. 时序图
初始化:
1.数据线拉到低电平“0”
2.延时480微秒(该时间的时间范围可以从480到960微秒)
3.数据线拉到高电平“1”
4.延时等待80微秒。如果初始化成功则在15到60微秒时间内产生一个由DS18B20所返回的低电平“0”。根据该状态可以来确定它的存在,但是应注意不能无限的进行等待,不然会使程序进入死循环
5.若CPU读到了数据线上的低电平“0”后,还要做延时,其延时的时间从发出的高电平算起(第3步的时间算起)最少要480微秒
读:
1.将数据线拉低“0”
2.延时1微秒
3.将数据线拉高“1”,释放总线准备读数据
4.延时15微秒
5.读数据线的状态得到1个状态位,并进行数据处理
6.延时45微秒
7.重复1~6步骤,直到读完一个字节
写:
1.数据线先置低电平“0”
2.延时1微秒
3.按从低位到高位的顺序发送数据(一次只发送一位)
4.延时60微秒
5.将数据线拉到高电平
6.延时1微秒
7.重复1~6步骤,直到发送完整的字节
9. 举例
sbit DSPORT = P3 ^ 7;
u8 ds18b20Init()
{
u8 i = 0;
DSPORT = 0;
i = 70;
while(i--); //642us
DSPORT = 1;
i = 0;
while(DSPORT)
{
delay1ms(1);
i++;
if(i > 5)
{
return 0;
}
}
return 1;
}
void ds18b20Write(u8 d)
{
u8 i = 0, j = 0;
for(j = 0; j < 8; j++)
{
DSPORT = 0;
i++; //延时
DSPORT = d & 0x01;
i = 6;
while(i--); //延时68us
DSPORT = 1;
d >>= 1;
}
return;
}
u8 ds18b20Read()
{
u8 i = 0, j = 0;
u8 d = 0, t = 0;
for(j = 8; j > 0; j--)
{
DSPORT = 0;
i++; //延时
DSPORT = 1;
i++;
i++;
t = DSPORT;
d = (d >> 1) | (t << 7);
i = 4;
while(i--);
}
return d;
}
void ds18b20ChangeTemp()
{
ds18b20Init();
delay1ms(1);
ds18b20Write(0xcc); //忽略ROM
ds18b20Write(0x44); //温度转换
return;
}
void ds18b20ReadTemp()
{
ds18b20Init();
delay1ms(1);
ds18b20Write(0xcc);
ds18b20Write(0xbe); //读取RAM
return;
}
int readTemp()
{
int temp = 0;
u8 tmph = 0, tmpl = 0;
ds18b20ChangeTemp();
ds18b20ReadTemp();
tmpl = ds18b20Read(); //低字节
tmph = ds18b20Read(); //高字节
temp = tmph;
temp <<= 8;
temp |= tmpl;
return temp;
}
温度传感器 DS18B20的更多相关文章
- 树莓派 Zero W+温度传感器DS18B20
树莓派 Zero W+温度传感器DS18B20 作者:陈拓chentuo@ms.xab.ac.cn 2018.05.28/2018.06.01 0. 概述 用树莓派 Zero W读取DS18B20温 ...
- ARM Linux驱动篇 学习温度传感器ds18b20的驱动编写过程
ARM Linux驱动篇 学习温度传感器ds18b20的驱动编写过程 原文地址:http://www.cnblogs.com/NickQ/p/9026545.html 一.开发板与ds18b20的入门 ...
- 【蓝桥杯单片机11】单总线温度传感器DS18B20的基本操作
[蓝桥杯单片机11]单总线温度传感器DS18B20的基本操作 广东职业技术学院 欧浩源 单总线数字温度传感器DS18B20几乎成了各类单片机甚至ARM实验板的标配模块来,在蓝桥杯的往届省赛和国赛中,这 ...
- 使用DS18B20设计温控系统
datasheet真的是得看看啊,比如DS18B20,不然程序都不好写,美国DALLAS半导体公司推出的数字化温度传感器DS18B20采用单总线协议,即与单片机接口仅需要一个IO口,无需任何外部原件, ...
- ds18b20采集温度并上报服务器
交叉编译器:arm-linux-gcc-4.5.4 Linux内核版本:Linux-3.0 主机操作系统:Centos 6.5 开发板:FL2440 温度传感器:ds18b20 注:此程序的客户端是在 ...
- ds18b20驱动及应用程序
---------------------------------------------------------------------------------------------------- ...
- Arduion学习(三)驱动温度传感器
一.实验目的: 1.将温度值打印显示在串口监视器 1.将温度值打印显示在串口,不同温度段显示不同的灯光,并在温度过高或过低时利用蜂鸣器报警. 二.实验准备: 1.查阅相关资料,了解本次实验所用到的引脚 ...
- 【AllJoyn专题】基于AllJoyn和Yeelink的传感器数据上传与指令下行的研究
接触高通物联网框架AllJoyn不太久,但确是被深深地吸引了.在我看来,促进我深入学习的原因有三点:一.AllJoyn开源,对开源的软硬件总会有种莫名的喜爱,虽然或许不会都深入下去:二.顺应潮流,物联 ...
- 树莓派Zero W添加音频输出
编译:陈拓 chentuo@ms.xab.ac.cn 2018.06.07/2018.07.14 原文:Adding Basic Audio Ouput to Raspberry Pi Zero ht ...
随机推荐
- centos中screen的使用
只是讲解几个简单的操作,例如,创建新窗口,切换到新窗口,删除窗口.(因为我要启动elk,所以需要使用到screen) 一.创建一个新窗口: 安装完成后,直接敲命令screen就可以启动它.但是这样启动 ...
- 05-06 Flutter JSON和序列化反序列化、创建模型类转换Json数据、轮播图数据渲染:Flutter创建商品数据模型 、请求Api接口渲染热门商品 推荐商品
Config.dart class Config{ static String domain='http://jd.itying.com/'; } FocusModel.dart class Focu ...
- ABAP程序拆分JOB
[ZDQFI_601_JOB 调用 ZDQFI_601拆分JOB] data: name type tbtcjob-jobname. data: number type tbtcjob-jobcoun ...
- 动态中位数-POJ 3784
题目: 依次读入一个整数序列,每当已经读入的整数个数为奇数时,输出已读入的整数构成的序列的中位数. 输入格式 第一行输入一个整数P,代表后面数据集的个数,接下来若干行输入各个数据集. 每个数据集的第一 ...
- Centos7服务器环境搭建
1.Apache安装 yum install httpd systemctl start httpd.service #启动 systemctl stop httpd.service#停止 syste ...
- 解决Vue跨域问题 : 正向代理与反向代理
你需要做一个反向代理的东西 ===> 打开你的vue项目的config文件夹下的index.js 找到以下代码 dev: { proxyTable: { '/api': { target: ...
- Hadoop之HDFS客户端操作
1. HDFS 客户端环境准备 1.1 windows 平台搭建 hadoop 2.8.5 2. 创建Maven工程 # pom.xml <dependencies> <depend ...
- 在vue项目中,将juery设置为全局变量
1.首先执行:npm install jQuery --save-dev,在package.json里加入jQuery. 2.修改build下的webpack.base.conf.js 方法一: 首 ...
- 改变checkbox默认样式
input[type='checkbox']{ width: 5rem; height: 5rem; -webkit-appearance: none; /*清除复选框默认样式*/ backgroun ...
- SpringBoot 项目如何在tomcat容器中运行
一. SpringBoot内嵌容器的部署方式 SpringBoot内部默认提供内嵌的tomcat容器,所以可以直接打成jar包,丢到服务器上的任何一个目录,然后在当前目录下执行java -jar de ...