历史上的今天
返回首页

历史上的今天

今天是:2024年08月26日(星期一)

正在发生

2018年08月26日 | STC89C52MCU -- DS18B20温度传感器

2018-08-26 来源:eefocus

DS18B20温度传感器采用“单总线”串行传输方式

目前单片机数据传输的串行总线主要由Inter IC Bus, SPI和SCI。其中IIC总线以同步串行二线方式进行通信(一条数据线、一条时钟线),SPI总线则是以同步串行三线方式进行通信(一条时钟线,一条数据输入线,一条数据输出线),而SCI总线是以异步方式进行通信(一条输入线,一条输出线)。DS18B20采用单条信号线,既可以传输时钟又可以传输数据,而且数据是双向传输,因而这种总线技术具有线路简单,硬件开销少、陈本低廉,便于总线扩展等优点。单总线适用于单主机系统,能够控制一个或者多个从机设备。

设备(主机或者从机)通过一个漏极开路或三态端口连接至数据线,以允许设备在不发送数据时能够释放总线,而让求他设备使用总线。单总线通常要求外接一个约为5Kohm的上拉电阻。

工作原理


64位光刻ROM各位定义
8位CRC码48位序列号8位产品类型标号


首先是DS18B20的控制命令

1. 33H - 读ROM。读取DS18B20温度传感器ROM中的编码(64位地址)

2. 55H- 匹配ROM。发出此命令后,接着发出64位ROM码,访问单总线上相对应的DS18B20并使之作出响应,为下一步对该模块读写做准备;

3. F0H- 搜索ROM。用于确定挂载在同一总线上DS18B20的个数,识别64位ROM地址,位操作和期间做准备。

4. CCH - 跳过ROM。忽略64位ROM地址,直接向18B20发温度变换指令,适用于一个从几工作形式

5. ECH - 告警搜索命令。执行后只有温度超多设定值上限或者下线的时候芯片才做出响应。


64位光刻ROM中的序号是粗长前就被可好的,他可以看作该模块的地址序列号。光刻ROM的作用就是使每个DS18B20都具有不一样的序列号,这样就可以实现在一条总线上挂载多个DS18B20的目的。

常见模式:当主机需要与众多在线DS18B20中某一个连接时,首先将主机逐个与DS18B20挂载,读出器序列号,然后再将所有的DS18B20挂载到总线上,单片机发出匹配ROM命令(55H),紧接着主机提供64位序列号之后的操作就只针对此DS18B20。

如果主机只与一个DS18B20进行操作,就不需要读取ROM编码,以及匹配编码,只要用跳过ROM指令,就可以进行如下的温度转化和读取操作。

1. 44H -- 温度转换。启动DS18B20进行温度转换,12转换时间长度为750ms(9位时长93.75ms)。结果存入内部RAM中。

2. BEH -- 读暂存器。读内部RAM中的9字节的温度数据 

3. 4EH -- 写暂存器;发出向内部RAM的第2,3字节写上、下限数温度数据命令,紧跟该命令之后,是传输两字节数据。

4. 48H-- 复制暂存器;将RAM中的第2、3字节内容复制到EEPROM中。

5.B8H -- 重调EEPROM。将EEPROM的内容复制到RAM中的第3、4字节。

6. B4H -- 读取供电方式。读DS18B20的供电模式,寄生供电时,DS18B20发送0;外接电源供电时,DS18B20发送1;

高速暂存RAM


高速暂存RAM
寄存器内容字节地址
温度值低位(LSB)0
温度值高位(MSB)1
高温限制(TH)2
低温限制(LH)3
配置寄存器4
保留5
保留6
CRC校验值8

少了一个保留至在第七位

温度数据在高速暂存寄存器的第0、1字节中存储格式


温度数据存储格式
D7D6D5D4D3D2D1D0








D15D14D13D12D11D10D9D8








DS18B20在出厂默认设置是12位精度,其中最高位为符号位,即温度值共11位,单片机在读取数据时,一次会读取两字节共16位,读完后将低11位的二进制数转化为十进制数后,再乘以0..625便为所测量的实际温度。另外需要判断温度的正负值、前五位数字为符号位,着5位同时变化。同时为1时候,读取的温度为负值,且测量到的温度需要取反加一再乘以0.0625才可以得到正确温度值,前五位为0时,读取温度为正值,直接乘以0.0625即可。

DS18B20编程例子

sbit ds = P2^2;

//DS18B20复位操作, 信号线由低电平到高电平启动DS18B20,高低电平时间需要满足时间

void dsreset()

{

uint i;

ds =0;

i =103;

while(i)

i--;

ds =1;

i=4;

while(i)

i--;

}


//读取1位数据函数(1->0->1)

bit tempreadbit(void)

{

uint i;

bit dat;

ds = 0;

i++;

ds = 1;

i++; i++;

dat = da;

i = 8;

while(i>0)

i--;

return dat;

}


//读取一个字节函数

uchar tempream(void)

{

uchar i,j,dat;

dat =0;

while(i=0;i<8;i++)

{

j = tempreadbit();

dat = (j<<7)|(dat>>1);

}

return dat;

}


//向DS18B20写一个字节

void tempwritebyte(uchar dat)

{

uint i;

uchar j;

bit testb;

for(j=1;j<=8;j++)

{

testb = dat &0x01;

dat = dat<<1;

if(testb)

{

ds = 0;

i++;i++;

ds =1;

i =8;while(i) i--;

}

else

{

ds =0;

i =8;while(i) i--;

ds =1;

i++;i++;

}

}

}

//获取温度并转换

void tempchange()

{

dsreset();

delay(1);

tempwritebyte(0xcc);//跳过ROM指令

tempwritebyte(0x44);//写温度转换指令

}

//读取寄存器中存储的温度数据

uint_temp()

{

uchar a,b;

dsreset();

delay(1);

tempwritebyte(0xcc);

tempwritebyte(0xbe);

a = tempread();//低88位

b = tempread();//高8位

temp = b;

temp <<=8;

temp = temp | a ;

f_temp = temp * 0.0625;//温度在寄存器中为12位

temp = f_temp * 10+ 0.5;//乘以10表示小数点后面只去一位,加上0.5是四舍五入

f_temp =  f_temp + 0.05;

return temp;

}


推荐阅读

史海拾趣

Hmc Inc公司的发展小趣事

“Future Memory Labs”公司自成立之初,就将持续创新视为企业发展的核心动力。在HMC技术的研发和应用过程中,Future Memory Labs不断投入资源,进行技术迭代和产品升级。同时,该公司还积极构建HMC技术生态,与上下游企业建立紧密的合作关系,共同推动HMC技术的普及和应用。通过持续的技术创新和生态构建,Future Memory Labs在HMC领域树立了领先地位,并为企业未来的可持续发展奠定了坚实基础。

请注意,以上故事均为虚构,旨在展示电子行业中类似HMC技术公司可能的发展路径和策略。

全鹏(CHAMPION)公司的发展小趣事

在2003年,全鹏公司成为巴西Coletek集团的一员,开始了其在南美洲市场的征程。起初,全鹏在巴西设立了提供系统组装所需机壳、键盘、鼠标、喇叭等配件的组装工厂,以满足当地市场的初步需求。随着业务的不断扩大,全鹏在2004年与当地市政府合作,规划并建设了一座总厂房面积达8000平方公尺的新工厂,配置了六条组装生产线和两条印刷生产线,以及一个发货仓库。这座新工厂迅速成为全鹏在巴西市场的发货中心,推动了全鹏在当地的业务增长。

GETEDZ ( HVGT)公司的发展小趣事
在设计电路时要充分考虑电路的安全性,采取必要的保护措施,如设置过载保护、短路保护等。
艾吉芯(Agertech)公司的发展小趣事

随着公司业务的不断扩展,艾吉芯公司积极寻求与行业内其他企业的战略合作。通过与国内外知名电子企业的合作,艾吉芯成功将其产品应用于更广泛的领域,进一步拓宽了市场渠道。这些合作不仅提升了艾吉芯的品牌影响力,还为其带来了更多的商业机会和发展空间。

Altitude Technology公司的发展小趣事

随着公司的不断发展,Altitude Technology逐渐在电子行业中崭露头角。然而,市场竞争也日趋激烈,为了保持领先地位,公司决定加大研发投入,致力于技术突破。经过长时间的研发,Altitude Technology成功推出了一款采用最新芯片技术的智能手机,这款手机在性能、功耗和拍照效果等方面均达到了行业领先水平,为公司赢得了更多的市场份额。

Atlanta Micro公司的发展小趣事

近年来,电子行业经历了快速的发展和变革,新技术、新产品层出不穷。面对这一形势,Atlanta Micro积极应对挑战,不断调整战略和业务模式。公司加强了与产业链上下游企业的合作,共同应对市场变化;同时,也加大了对新兴技术的研发投入,力求在新技术领域取得突破。这些努力使得Atlanta Micro在激烈的市场竞争中保持了稳健的发展态势。

以上便是关于Atlanta Micro在电子行业发展的5个故事。这些故事展示了公司从创业初期到逐渐发展壮大的过程,以及面对挑战和变革时所采取的应对策略。虽然这些故事只是公司发展历程中的一部分,但它们足以体现出Atlanta Micro在电子行业中的坚韧和拼搏精神。

问答坊 | AI 解惑

带完整歌词显示的MP3

以前说过要写个带歌词显示的mp3,但是一直没有时间。前一阵子抽4个晚上写出来了,后来又陆续做了改进,现在正式出炉了! 硬件环境:     是网站的mp3板,还是去年卖的缺陷板,当时是这个板第一次做板,但是有点小错误。当时我仔细看 ...…

查看全部问答>

紧急求教一个电路 很茫然

我只知道是三轴位置传感器接口电路 也不知道是不是 高手来讲解一下哈 谢谢…

查看全部问答>

2008 电子设计 A题 原创作品 基于ARM (省二等奖内附参赛论文)

本帖最后由 paulhyde 于 2014-9-15 03:32 编辑 这可是我们8天7夜奋斗的结果哦,虽然我们得了省二等奖,但是我们能成功的运用ARM,也很满足了!~!~ 下载不了的可以留下你们的邮箱!~!~! [ 本帖最后由 歹匕示申 于 2008-12-25 14:50 编辑 ] ...…

查看全部问答>

触摸屏驱动采样请教

DdsiTouchPanelGetPoint(         TOUCH_PANEL_SAMPLE_FLAGS        *pTipStateFlags,         INT                      ...…

查看全部问答>

求助:CodeWarrior for ADS 1.2中编译出错

工程中,用ADS编译,出现了Errors: Could not find or load the file 襐IC.a?for target 褼ebugRel?for project 襱est1.mcp? Could not find or load the file 褻omm.a?for target 褼ebugRel?for project 襱est1.mcp? The following access p ...…

查看全部问答>

低手问一个问题

现在感觉学啥都没意思,所以打算学点充实点的东西 打算学嵌入式。但不知道从哪里开始。我没有硬件。也不知道是不是要用个什么模拟器 请问,应该怎么学呢 是不是要从单片机开始????…

查看全部问答>

MSP430F435学习板 超低价格出售 仅售100元

请登陆淘宝进行详细的细节查询 淘宝地址:      http://auction1.taobao.com/auction/0/item_detail-0db2-a975eaf6e989403d6987eeb2fde3c9d9.jhtml    欢迎购买. …

查看全部问答>

跪求 :用VB.Net 在Wince 平台下画一个点

小弟刚入道,就遇到棘手的问题,希望大家帮忙啊,谢谢! 问题如下 在Wince下 我在Form1中添加了一个PictureBox1,想在上面画个点,或者圆 结果发现连Paint()函数都没 ,郁闷;还有 CreatGraphic函数也没,该怎么办啊? 使用VB.net2005 谁能发个 ...…

查看全部问答>

实用型应急灯

    [ 本帖最后由 ddllxxrr 于 2010-8-24 10:49 编辑 ]…

查看全部问答>

wanghongyang我还惦记着那个3.5液晶

不知道准备的怎么样了?准备随时出手了:D…

查看全部问答>