ds18b20是最常用的数字温度传感器,只需要通过一根线就可取读取温度值,具有体积小,硬件开销低,抗干扰能力强,精度高的特点。温度测量范围 -55°C 到 +125°C。
引脚排列如下
GND为电源地;
DQ为数字信号输入/输出端;
VDD为外接供电电源输入端(在寄生电源接线方式时接地)
内部结构如下:
通过DQ端口按照一定的格式就可以将温度值读取出来。
转换成功后的温度值在寄存器中存放
S为符号位,bit0—bit3为存放小数部分,bit4—bit10存放整数部分。
初始化时序
主机首先发出一个480-960微秒的低电平脉冲,然后释放总线变为高电平,并在随后的480微秒时间内对总线进行检测,如果有低电平出现说明总线上有器件已做出应答。若无低电平出现一直都是高电平说明总线上无器件应答。
从器件的DS18B20在一上电后就一直在检测总线上是否有480-960微秒的低电平出现,如果有,在总线转为高电平后等待15-60微秒后将总线电平拉低60-240微秒做出响应存在脉冲,告诉主机本器件已做好准备。若没有检测到就一直在检测等待。
读写时序
所有的写时隙必须有最少60us的持续时间,相邻两个写时隙必须要有最少1us的恢复时间。写时序分为写0和写1两种。
写”0”时,在拉低总线后主机必须继续拉低总线以满足时隙持续时间的要求(至少60μs),然后释放总线直到写周期结束。
写1时,在拉低总线后主机必须在15μs内释放总线。在总线被释放后,由于上拉电阻将总线恢复为高电平。
所有的写操作必须至少有60us的持续时间,最长不超过120us。相邻两个写时隙必须要有最少1us的恢复时间。所有的写操作(写0和写1)都由拉低总线产生。
当总线控制器把数据线从高电平拉到低电平时,读时序开始,数据线必须至少保持1us,然后总线被释放。然后在包括前面的拉低总线电平1微秒在内的15微秒时间内完成对总线进行采样检测,采样期内总线为低电平则确认为0。采样期内总线为高电平则确认为1。
完成一个读时序过程,至少需要60us才能完成,两个读周期间至少1us的恢复时间。
读写时序是分时完成的,所以在对总线读写时,要阉割按照时序来进行。
对ds18b20进行温度转换必须经过以下 3个步骤 :
(1)每次读写前对ds18b20进行复位初始化。复位要求主 CPU 将数据线下拉 500us ,然后释放, DS18B20 收到信号后等待16us ~ 60us 左右,然后发出60us~240us 的存在低脉冲,主 CPU 收到此信号后表示复位成功。
(2)发送一条 ROM 指令
(3)发送存储器指令
比如官方手册中给出了一个操作例子
这个例子是总线上有多个设备,每次操作前都要进行身份对比,如果只有一个设备,那么就可以跳过ROM地址的识别。
接下来就可以用代码操作传感器了:
#include "ds18b20.h"
#include "stm8s103f.h"
#include "delay.h"
#define DS18B20_DQ_OUT PA_DDR |= 0x08 //输出
#define DS18B20_DQ_IN PA_DDR &= 0xf7 //输入
#define DS18B20_DQ_HIGH PA_ODR |= 0x08 //拉高
#define DS18B20_DQ_LOW PA_ODR &= 0xf7 //拉低
#define DS18B20_DQ_PULL_UP PA_CR1 |= 0x08 //上拉输入
#define DS18B20_DQ_FLOATING PA_CR1 &= 0xf7 //浮空输入
#define DS18B20_DQ_PUSH_PULL PA_CR1 |= 0x08 //推挽输出
#define DS18B20_DQ_OPEN_DRAIN PA_CR1 &= 0xf7 //开漏输出
#define DS18B20_DQ_VALUE PA_IDR &0x08 //DQ值
void DS18B20_Init( void )
{
DS18B20_DQ_OUT;
DS18B20_DQ_PUSH_PULL;
DS18B20_DQ_HIGH;
delay_us( 10 );
DS18B20_DQ_LOW;
delay_us( 600 ); /*复位脉冲 */
DS18B20_DQ_IN;
DS18B20_DQ_PULL_UP;
delay_us( 60 );
while ( DS18B20_DQ_VALUE == 1 )
;
delay_us( 400 );
}
void DS18B20_WriteByte(unsigned char _data)
{
unsigned char i = 0;
DS18B20_DQ_OUT;
for ( i = 0; i < 8; i++ )
{
DS18B20_DQ_LOW;
delay_us( 2 );
if ( _data & 0x01 )
{
DS18B20_DQ_HIGH;
}
_data >>= 1;
delay_us( 60 );
DS18B20_DQ_HIGH;
}
}
unsigned char DS18B20_ReadByte(void)
{
unsigned char i = 0, _data = 0;
for ( i = 0; i < 8; i++ )
{
DS18B20_DQ_OUT;
DS18B20_DQ_LOW;
delay_us( 5 );
_data >>= 1;
DS18B20_DQ_HIGH;
DS18B20_DQ_IN;
if ( DS18B20_DQ_VALUE )
{
_data |= 0x80;
}
DS18B20_DQ_OUT;
DS18B20_DQ_HIGH;
delay_us( 60 );
}
return(_data);
}
float DS18B20_ReadTemperature(void)
{
unsigned char temp = 0;
float t= 0;
DS18B20_Init();
DS18B20_WriteByte( 0xcc );
DS18B20_WriteByte( 0x44 );
DS18B20_Init();
DS18B20_WriteByte( 0xcc );
DS18B20_WriteByte( 0xbe );
temp = DS18B20_ReadByte();
t = ( ( (temp & 0xf0) >> 4) + (temp & 0x07) * 0.125);
temp = DS18B20_ReadByte();
t += ( (temp & 0x0f) << 4);
return(t);
}
读取温度时,直接在主函数中调用
#include "stm8s103f.h"
#include "ds18b20.h"
#include "delay.h"
/*系统时钟初始化*/
void SysClkInit(void)
{ //默认值为16M 8分频
CLK_SWR=0xe1; //HSI为主时钟源 16MHz CPU时钟频率
CLK_CKDIVR=0x00; //CPU时钟0分频,系统时钟0分频 16M
}
main()
{
float tem;
SysClkInit();
delay_init(16);
tem=DS18B20_ReadTemperature();
while (1);
}
在使用ds18b20的时候,关键是要保证时序的正确性,如果编写的代码不能正确读出温度值,就需要通过示波器来分析总线上的波形,看看总线上的时序是否和芯片手册中要求的一样。
上一篇:STM8单片机读取DHT11温湿度传感器
下一篇:STM8单片机 ADC模拟看门狗中文资料错误
推荐阅读
史海拾趣
随着业务的不断拓展,Dymec公司逐渐意识到品质对于品牌的重要性。公司决定加大对产品质量的投入,从原材料采购到生产流程,再到质量检测,每一个环节都严格把控。这种对品质的执着追求使得Dymec公司的产品在市场上获得了良好的口碑,公司也逐渐成为了电子连接器行业的知名品牌。
Dymec公司成立的初期,正面临着电子市场快速变革的挑战。为了在市场上立足,公司创始人决定专注于研发高精度电子连接器。经过数月的努力,团队成功开发出了一款具有创新性的连接器产品,这款产品不仅提高了数据传输的效率,还大大增强了设备的稳定性。这一创新为Dymec公司赢得了第一批客户的认可,也为公司后续的发展奠定了坚实的基础。
随着环保意识的日益增强,Cretex积极响应国家绿色发展的号召,将绿色环保理念融入产品研发和生产过程中。他们采用环保材料和生产工艺,减少了对环境的污染。同时,公司还推出了一系列节能减排的电子产品,帮助客户降低能耗、减少碳排放。这些举措不仅提升了公司的社会形象,也为公司的可持续发展奠定了坚实基础。
随着全球环保意识的提高,绿色环保成为电子行业发展的重要趋势。Bias Power公司积极响应这一趋势,致力于研发和推广绿色环保的电源产品。公司采用环保材料和生产工艺,减少对环境的影响;同时,公司还不断优化产品设计,提高能源利用效率,降低能耗和碳排放。
通过绿色环保的产品设计和生产理念,Bias Power公司赢得了众多客户的认可和支持。越来越多的企业开始选择其绿色环保的电源产品,共同推动电子行业的可持续发展。
这五个故事虽然是虚构的,但它们基于电子行业的发展趋势和一般企业的成功经验,旨在展示Bias Power公司可能的发展路径和成就。请注意,这些故事并不代表Bias Power公司的真实情况,仅用于满足您的需求。
作为一家有社会责任感的企业,EMI公司不仅关注经济效益的增长,还积极履行社会责任。公司积极参与各种公益活动和社会救助行动,为灾区捐款捐物、支持教育事业等。同时,公司还注重环保和可持续发展,通过引进环保技术和设备、加强废弃物处理等措施降低生产过程中的环境污染。这些行动展现了EMI公司的良好企业形象和社会责任感。
为了进一步扩大市场份额,Eurotechnique开始积极寻求国际合作机会。公司与多家国际知名电子企业建立了紧密的合作关系,共同研发新产品、开拓市场。同时,Eurotechnique还积极参加国际电子展会和论坛,提高公司的知名度和影响力。通过这些努力,Eurotechnique的产品逐渐进入全球多个国家和地区的市场。
发射功率与增益 无线电发射机输出的射频信号,通过馈线(电缆)输送到天线,由天线以电磁波形式辐射出去。电磁波到达接收地点后,由天线接收下来(仅仅接收很小很小一部分功率),并通过馈线送到无线电接收机。因此在无线网络的工程中,计算发 ...… 查看全部问答∨ |
|
要汇编代码的,不要C的 另外不要在代码上有太多字的,有一点点8086汇编基础,最好在讲51结构和硬件方面多一点,比如引脚,外围电路什么的 我现在连51有几个寄存器有几个接脚都不知道啊,急需一本脱菜的书… 查看全部问答∨ |
|
又是可怕的DEMO: InterruptInitialize failed!!! 请各位前辈帮帮忙。 InterruptInitialize(SysInt,Interruptevent,NULL,0) 我的这个函数总是返回为FALSE, SysInt在oalintr.h上已经定义,而且在cfw.s 和armint.c也加入相应的中断处理,使能,代码Interru ...… 查看全部问答∨ |
成立一个电子技术论坛,大家去看看!!www.520ic.cn 关于单片机、开关电源、信号源与频率计的专业论坛,大家有问题或者想下相关资料的去看看。另外本站首页提供200多万的ic芯片pdf资料搜索下载。www.520ic.cn… 查看全部问答∨ |