历史上的今天
返回首页

历史上的今天

今天是:2024年10月26日(星期六)

2021年10月26日 | #51单片机#DS18B20硬件原理以及通信的工作时序

2021-10-26 来源:eefocus

DS18B20的硬件原理——温度存储器

DS18B20的温度测量范围:-55~+125°C。

在这里插入图片描述

如上图所示,DS18B20温度存储器一共有两个字节。LSB低字节,MSB高字节。Msb字节高位,Lsb字节低位。图中的S表示的是符号位。

通过编程,DS18B20可实现最高12位的温度存储器。以补码的格式存储在寄存器中。


结合下面寄存器温度对应存储数值的表格,理解DS18B20温度存储器。

在这里插入图片描述

ps:二进制数最低位变化1,代表温度变化0.0625°C。


DS18B20与单片机通信

单片机可通过1-Wire协议与DS18B20通信,读取温度

1-Wire总线的硬件接口简单,时序复杂。

下面可根据DS18B20工作协议过程,了解其工作时序。

1)初始化


类似于I2C寻址。开始时,1-Wire总线也需检测总线上是否存在DS18B20器件。若存在,则总线根据时序要求返回一个低电平脉冲,若不存在,则无返回脉冲,即总线保持高电平。习惯上将这个动作称为检测存在脉冲。该动作除了有检测DS18B20器件的功能外,还有通知DS18B20做准备的作用。


下图是关于存在脉冲检测的时序图,以便直观感受时间与脉冲变化的关系。

在这里插入图片描述

图中可以看到,首先单片机拉低引脚,持续480 ~ 960μs。然后,单片机释放总线,即给总线高电平。DS18B20等待15 ~ 60μs,主动拉低这个引脚。60 ~ 240μ后,DS18B20主动释放总线。之后IO口被上拉电阻拉高。


2)ROM操作指令


类似于I2C,1-Wire总线也可挂多个器件。


该操作应用于一个总线上挂多个器件的情况下,对不同器件进行区分。


每个DS18B20内部都有一个唯一的64位长的序列号。序列号值存在于DS18B20内部的ROM中。其首8位是产品类型编码,末8位是CRC效验码,中间48位是每个器件的唯一序号。单片机可通过与DS18B20的通信,获取数据发送指令。这些指令相对复杂。应用不多。这里不介绍这部分,需要时可查看手册。


下面只介绍一个总线接一个器件的指令和程序。


Skip ROM:0XCC。当总线上只有一个器件时,可跳过ROM,不进行ROM检测。


3)RAM存储器操作指令。


这里介绍两条,其他有需要再查资料。


Read Scratchpad(读暂存寄存器):0XBE。


注意:DS18B20温度数据有两个字节。读取数据时,每个字节从低位读起,先读低字节再读高字节。


Convert Temperature(启动温度转换):0X44。


发送指令后,开始温度转换。这个过程需要一定时间,时长取决于DS18B20精度。温度数据用到的位数越高,精度越高,速度越慢。例子:9位模式与12位模式的最低变化值分别为0.5和0.0625,9位的转换速度更快。


下图为9位模式下的DS18B20温度转换时间表

在这里插入图片描述

其中寄存器R1和R0决定了转换的位数。他们的出厂设置默认值为11。即12位表示温度,最大转换时间750μs。启动转换后,至少要再等750μs才能读取温度。否则就有可能读错。


4)DS18B20的位写时序


下面是一张DS18B20写入操作的时序图:

在这里插入图片描述

当要给DS18B20写入0时,单片机拉低引脚。持续时间在60~120μs之间。


图中可见,单片机先拉低15μs之后,DS18B20会在15~60μs这个时间段读取这一位,典型值是在30μs时刻读取。持续时间超过60μs,DS18B20必定读取完毕。


当要给DS18B20写入1时,单片机拉低引脚。拉低时间>1μs,紧接着马上释放总线,即拉高引脚,持续时间>60μs。


ps:DS18B20时序较严格,写的过程中最好不要有中断,但是两个位之间的间隔处是例外,可以开启中断。


5)DS18B20的位读时序

在这里插入图片描述

当读取DS18B20数据时,单片机拉低引脚,至少保持1μs,然后释放引脚,释放完毕后要尽快读取。从拉低引脚到读取引脚状态不可超过15μs。


下面是DS18B20的操作代码(读写,检测脉冲,温度转换)


#include

#include


sbit IO_18B20 = P3^5; //DS18B20通信引脚


//软件延时函数,延时(t*10)μs

void Delay(unsigned char t)

{

do{

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

}while(--t);

}


//复位总线,获取存在脉冲,准备启动一次读写操作

bit Get18B20Ack()

{

bit ack;

EA = 0; //禁止中断

IO_18B20 = 0; //产生500微秒复位脉冲

Delay(50);

IO_18B20 = 1;

Deylay(60);

ack = IO_18B20; //读取存在脉冲

while(!IO_18B20); //等待存在脉冲结束

EA = 1; //重新使能总中断


return ack;

}


//向DS18B20写入一个字节,dat为待写入字节

void Write18B20(unsigned char dat)

{

unsigned char mask;


EA = 0; //禁止中断

for(mask = 0X01;mask!=0;mask<<=1) //低位在前,依次移出8个bit

{

IO_18B20 = 0; //产生2微秒低电平脉冲

_nop_();

_nop_();

if((mask&dat) == 0) //输出该bit值

IO_18B20 = 0;

else

IO_18B20 = 1;

Delay(6); //延时60微秒

IO_18B20 = 1; //拉高通信引脚

}

EA  = 1; //重新使能总中断

}


//从DS18B2读取一个字节,返回值为读到的字节

unsigned char Read18B20()

{

unsigned char dat;

unsigned char mask;


EA = 0; //禁止总中断

for(mask = 0X01;mask != 0;mask <<= 1)//低位在先,依次采集8个bit

{

IO_18B20 = 0; //产生2微秒低电平脉冲

_nop_();

_nop_();

IO_18B20 = 1;     //结束低电平脉冲,等待18B20输出数据

_nop_();   //延时2微秒

_nop_();

if(!IO_18B20)     //读取通信引脚上的值

dat &= ~mask;

else

dat |= mask;

Delay(60);   //再延时60微秒

}

EA = 1; //重新使能总中断


return dat;

}


//启动一次18B20温度转换,返回值为表示是否启动成功

bit Start18B20()

{

bit ack;


ack = Get18B20Ack(); //执行总线,获取18B20应答

if(ack == 0) //若18B20正确应答,则启动一次转换

{

Write18B20(0XCC); //跳过ROM操作

Write18B20(0X44); //启动一次温度转换

}


return ~ack; //ack=0表示操作成功,故取反返回值

}


//读取DS18B20转换的温度值,返回值为是否读取成功

bit Get18B20Temp(int *temp)

{

bit ack;

unsigned char LSB,MSB; //16bit温度值的高低字节


ack = Get18B20Ack(); //执行总线,获取18B20应答

if(ack == 0) //若18B20正确应答,则启动一次转换

{

Write18B20(0XCC); //跳过ROM操作

Write18B20(0XBE); //发送读命令

LSB = Read18B20(); //读温度值的低字节

MSB = Read18B20(); //读温度值的高字节

*temp = ((int)MSB<<8)+LSB;//合并成为16bit整型数

}

return ~ack;//ack=0表示操作成功,故取反返回值

}

推荐阅读

史海拾趣

Fibrefab Limited公司的发展小趣事

面对全球环境问题日益严峻的现状,Fibrefab积极响应环保号召,推动绿色生产和可持续发展。公司采用环保材料和生产工艺,降低产品生产和使用过程中的能耗和排放。同时,Fibrefab还积极参与环保公益活动和社会责任项目,为保护环境贡献自己的力量。这一举措不仅提升了Fibrefab的企业形象和社会责任感,也为其长期发展奠定了坚实基础。

GuangDong Province MengCo Semiconductor Co., Ltd公司的发展小趣事
对于变频器报警问题,应首先检查变频器本身的故障代码和状态指示灯,根据提示进行相应的故障排除和修复。
G-Mag Usa公司的发展小趣事

面对数字化转型的浪潮,G-Mag在2020年决定全面拥抱智能制造。公司投入巨资建设智能工厂和数字化管理平台,引入先进的自动化设备和人工智能技术优化生产流程和管理效率。通过数字化转型,G-Mag实现了生产过程的智能化、自动化和可视化监控,大大提高了生产效率和产品质量。同时,G-Mag还利用大数据和云计算技术分析市场需求和消费者行为,为产品研发和市场推广提供精准的数据支持。在数字化转型的推动下,G-Mag不仅提升了自身的竞争力,还为整个电子行业的智能化发展树立了标杆。

Comtronic Gmbh-Verbindungstechnik公司的发展小趣事

面对数字化转型的浪潮,G-Mag在2020年决定全面拥抱智能制造。公司投入巨资建设智能工厂和数字化管理平台,引入先进的自动化设备和人工智能技术优化生产流程和管理效率。通过数字化转型,G-Mag实现了生产过程的智能化、自动化和可视化监控,大大提高了生产效率和产品质量。同时,G-Mag还利用大数据和云计算技术分析市场需求和消费者行为,为产品研发和市场推广提供精准的数据支持。在数字化转型的推动下,G-Mag不仅提升了自身的竞争力,还为整个电子行业的智能化发展树立了标杆。

东通电子公司的发展小趣事

为满足日益增长的市场需求,东通电子在2003年新建了厂房,并于2004年整体搬迁至新址进行生产和经营。随着生产规模的扩大,公司的产能得到了大幅提升,月生产有感箔式电容器3000万只,无感金属化、无感箔式电容器4500万只。此外,东通电子还积极开拓国际市场,产品出口到多个国家和地区,实现了国际化的发展。

宇阳科技(EYANG)公司的发展小趣事

多年来,宇阳科技凭借其在MLCC领域的持续创新和卓越表现,荣获了多项荣誉。从2005年被国家商务部评为企业诚信度“双A”企业,到2008年国内首创的0201超微型MLCC开发成功并量产,再到2018年获中国电子学会科学技术奖科技进步类二等奖,宇阳科技的技术实力和市场地位得到了广泛的认可。

问答坊 | AI 解惑

电子类问题,十万火急! 求高手解答!谢谢!

1.  电源变压器、短路线、电阻、晶体三极管等元器件装插顺序,大功率晶体管不能和()靠的太正。     A   大功率电阻  B  高压电容  C  热敏元件 2.   ...…

查看全部问答>

求cmos摄像头数据采集和视频压缩等方面的教程和资料~~~~~

我最近想用FPGA开发一个视频采集,需要查找cmos摄像头的采集的数据的格式,视频压缩算法,不知道哪位高人有这方面的开发经验或者有相关的资料或者教程,我的邮箱是xyg1985109@163.com。。。。 不胜感激!!…

查看全部问答>

高频开关电源电路组成及稳压原理

高频开关电源由以下几个部分组成: 一、主电路 从交流电网输入、直流输出的全过程,包括: 1、输入滤波器:其作用是将电网存在的杂波过滤,同时也阻碍本机产生的杂波反馈到公共电网。 2、整流与滤波:将电网交流电源直接整流为较平滑的直流电, ...…

查看全部问答>

SPI ,I2C,SCI 的区别

http://wenku.baidu.com/view/05f60e2de2bd960590c6771f.html…

查看全部问答>

关于新唐cortex-m0 nano100系列的学习讨论

关于新唐cortex-m0 nano100系列的学习讨论 有哪位朋友在学习,我们可以共同学习哈,…

查看全部问答>

超声波测距程序,各位大神帮忙看看,谢谢了!

超声波程序       #include #define uint unsigned int #define uchar unsigned char uchar flag0 = 0;  //单片机发出10个脉冲标志位 uchar flag1 ;  //测量标志位 long time;     ...…

查看全部问答>

CC430的WOR需要做timeslot同步吗?

小弟还没会爬就得逼者去走 ,马上要用CC430F5137做RF通信,一个主机与若干个从机通信,但要求一端的从机必须用WOR以减少功耗。传输协议是自定义的,上面的设计下来是把时间分成timeslot,比如0~0xF,各个从机只会在属于自己的timeslot唤醒收发数据 ...…

查看全部问答>

涨姿势——手机的每一步操作功耗全知道

上周,我们实验室从安捷伦的代理商深圳世强购买了一台N6705B直流电源分析仪用于咱们在汽车功能模块电压瞬太特性测试和电池仿真测试。好家伙,看起来还不如安捷伦2000系列的示波器高大上,价格却一点不含糊,4通道10W+,不过功能确实强大。不过,据 ...…

查看全部问答>

TI尾缀的含义

lm2623有很多尾缀,不知道具体什么含义,请教下高手,谢谢。 如lm2623amm和lm2623mm…

查看全部问答>

IP核设计的时钟占空比输出为啥不是1:1?

利用IP核设计的时钟占空比1:1,为什么程序下到实验板后从SignalTap II中看波形不是1:1,倒像是2:1. 有没有人碰到和我一样的情况,是本来就没错,还是哪里出了问题? …

查看全部问答>