长篇鬼故事 - 数字温度传感器 DSB 详解

2023-02-20 00:50:56 阅读 :

数字温度传感器 DSB 详解

本文核心词:学习笔记,DS18B20,代码分享,温度传感器,问题探讨

一、数字温度传感器(DS18B20)参数信息介绍

返回16位二进制温度数值

主机和从机通信使用单总线one-wire,即使用单线进行数据的发送和接收

电源可以使用数据线本身提供而不需要外部电源,但在实际应用过程中,确保DS18B20能够获得充足的驱动电流,成为能够返回二进制温度数值的关键。接线模式下文介绍。

每个DS18B20都有全球唯一的64位-ID,此特性决定了它可以将任意多的DS18b20挂载到一根总线上,通过ROM搜索读取相应DS18B20的温度值

DS18B20的测温范围也极其宽泛,测温范围为-55到+125,每秒增量为0.5

DS18B20返回的16位二进制数代表此刻探测的温度值,其高五位代表正负。如果高五位全部为1,则代表返回的温度值为负值。如果高五位全部为0,则代表返回的温度值为正值。后面的11位数据代表温度的绝对值,将其转换为十进制数值之后,再乘以0.0625即可获得此时的温度值。

返回温度值正负与绝对值区分布返回二进制温度值分布

封装形式

引脚功能描述二、DS18B20的工作过程即时序

DS18B20所有的操作都是从器件初始化开始

ROM操作指令:

Read ROM(读 ROM) [33H]

Match ROM(匹配 ROM) [55H]

Skip ROM(跳过 ROM] [CCH]

Search ROM(搜索 ROM) [F0H]

Alarm search(告警搜索) [ECH]

读时序

写时序

存储器操作指令:

Write Scratchpad(写暂存存储器) [4EH]

Read Scratchpad(读暂存存储器) [BEH]

Copy Scratchpad(复制暂存存储器) [48H]

Convert Temperature(温度变换) [44H]

Recall EPROM(重新调出) [B8H]

Read Power supply(读电源) [B4H]

三、常见接线方式

单只DS18B20接线示意图

vpU提供单片机输出电压 3.3v

多只DS18B20接线示意图

VPU提供单片机输出电压3.3V

寄生电源模式接线示意图

不需要额外供电只需要数据线提供驱动电流四、详细程序

//复位DS18B20

void DS18B20_Rst(void)

{

DS18B20_IO_OUT(); //SET PG11 OUTPUT

DS18B20_DQ_OUT=0; //拉低DQ

delay_us(750);//拉低750us

DS18B20_DQ_OUT=1; //DQ=1

delay_us(15);//15US

}

//等待DS18B20的回应

//返回1:未检测到DS18B20的存在

//返回0:存在

u8 DS18B20_Check(void)

{

u8 retry=0;

DS18B20_IO_IN();//SET PG11 INPUT

while (DS18B20_DQ_INretry200)

{

retry++;

delay_us(1);

};

if(retry=200)return 1;

else retry=0;

while (!DS18B20_DQ_INretry240)

{

retry++;

delay_us(1);

};

if(retry=240)return 1;

return 0;

}

//从DS18B20读取一个位

//返回值:1/0

u8 DS18B20_Read_Bit(void)

{

u8 data;

DS18B20_IO_OUT();//SET PG11 OUTPUT

DS18B20_DQ_OUT=0;

delay_us(2);

DS18B20_DQ_OUT=1;

DS18B20_IO_IN();//SET PG11 INPUT

delay_us(12);

if(DS18B20_DQ_IN)data=1;

else data=0;

delay_us(50);

return data;

}

//从DS18B20读取一个字节

//返回值:读到的数据

u8 DS18B20_Read_Byte(void)

{

u8 i,j,dat;

dat=0;

for (i=1;i=8;i++)

{

j=DS18B20_Read_Bit();

dat=(j7)|(dat1);

}

return dat;

}

//写一个字节到DS18B20

//dat:要写入的字节

void DS18B20_Write_Byte(u8 dat)

{

u8 j;

u8 testb;

DS18B20_IO_OUT();//SET PG11 OUTPUT;

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

{

testb=dat0x01;

dat=dat1;

if (testb)

{

DS18B20_DQ_OUT=0;// Write 1

delay_us(2);

DS18B20_DQ_OUT=1;

delay_us(60);

}

else

{

DS18B20_DQ_OUT=0;// Write 0

delay_us(60);

DS18B20_DQ_OUT=1;

delay_us(2);

}

}

}

//开始温度转换

void DS18B20_Start(void)

{

DS18B20_Rst();

DS18B20_Check();

DS18B20_Write_Byte(0xcc);// skip rom

DS18B20_Write_Byte(0x44);// convert

}

//初始化DS18B20的IO口 DQ 同时检测DS的存在

//返回1:不存在

//返回0:存在

u8 DS18B20_Init(void)

{

GPIO_InitTypeDefGPIO_InitStructure;

// RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOG, ENABLE); //使能PORTG口时钟

//

// GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;//PORTG.11 推挽输出

// GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

// GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

// GPIO_Init(GPIOG, GPIO_InitStructure);

// GPIO_SetBits(GPIOG,GPIO_Pin_11);//输出1

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOA, GPIO_InitStructure);

GPIO_SetBits(GPIOA,GPIO_Pin_1);//输出1

DS18B20_Rst();

return DS18B20_Check();

}

//从ds18b20得到温度值

//精度:0.1C

//返回值:温度值 (-550~1250)

short DS18B20_Get_Temp(void)

{

u8 temp;

u8 TL,TH;

short tem;

DS18B20_Start ();// ds1820 start convert

DS18B20_Rst();

DS18B20_Check();

DS18B20_Write_Byte(0xcc);// skip rom

DS18B20_Write_Byte(0xbe);// convert

TL=DS18B20_Read_Byte(); // LSB

TH=DS18B20_Read_Byte(); // MSB

if(TH7)

{

TH=~TH;

TL=~TL;

temp=0;//温度为负

}else temp=1;//温度为正

tem=TH; //获得高八位

tem=8;

tem+=TL;//获得底八位

tem=(float)tem*0.625;//转换

if(temp)return tem; //返回温度值

else return -tem;

}

//从ds18b20得到序列号

void DS18B20_Get_Code(u8 *code)

{

DS18B20_Start ();// ds1820 start convert

DS18B20_Rst();

delay_ms(1);

DS18B20_Write_Byte(0x33);// convert

for(int i=0;i8;i++)

{

*(code+i)=DS18B20_Read_Byte();

}

}

//获得温度,匹配序列号

u16Get_Temp_U16_Match_Code(u8 *code)

{

u16 temp;

u8 TL,TH;

DS18B20_Start();// ds1820 start convert

DS18B20_Rst();

delay_ms(2);

DS18B20_Write_Byte(0x55);// 匹配序列号命令

for(int i=0;i8;i++)

{

DS18B20_Write_Byte(code[i]);

}

DS18B20_Write_Byte(0xbe);// convert

TL=DS18B20_Read_Byte(); // LSB

TH=DS18B20_Read_Byte(); // MSB

temp= (u16)TH8;

temp |= TL;

return temp;

}

//获得温度,匹配序列号

shortGet_Temp_Match_Code(u8 *code)

{

u16 temp;

u8 TL,TH;

short tem;

DS18B20_Rst();

DS18B20_Start ();// ds1820 start convert

DS18B20_Rst();

delay_ms(1);

DS18B20_Write_Byte(0x55);// 匹配序列号命令

for(int i=0;i8;i++)

{

DS18B20_Write_Byte(code[i]);

}

DS18B20_Write_Byte(0xbe);// convert

TL=DS18B20_Read_Byte(); // LSB

TH=DS18B20_Read_Byte(); // MSB

if(TH7)

{

TH=~TH;

TL=~TL;

temp=0;//温度为负

}else temp=1;//温度为正

tem=TH; //获得高八位

tem=8;

tem+=TL;//获得底八位

tem=(float)tem*0.625;//转换

if(temp)return tem; //返回温度值

else return -tem;

}

在最近的DS18B20的使用过程中,所遇到的诸多问题如下

多个DS18B20挂载在一条总线,再通过ROM搜索时会存在单个或者多个DS18B20初始化不成功,需要不断更换DS18B20直至,能够通过ROM搜索完成所有DS18B20温度数值的读取,这种挂载同根总线上的DS18B20无法顺利使用任意多个DS18B20实现,实在让人困扰

以上就是数字温度传感器 DSB 详解全部内容;搜索关键词(学习笔记,DS18B20,代码分享,温度传感器,问题探讨)还能找到更多精彩内容。

本文标题:数字温度传感器 DSB 详解 - 长篇鬼故事
本文地址:http://www.chinaggs.net/changpianguigushi/26521.html

相关文章

  • 最好的bothnewyear

    最好的bothnewyear本文核心词:bothnewyear他,叫Both,1988年2月29日生日,(没错,就是那个四年一过生日的人),毕业于泰国朱拉隆功大学,现在是一名拥有四家诊所的牙医;他,叫Newyear,1995...

    2022-11-06 长篇鬼故事
  • 亚洲最美瑜伽教练

    母其弥雅性感写真照...

    2022-12-02 长篇鬼故事
  • 冯绍峰女友是谁?

    又一对娱乐圈情侣被曝了出来,那就是冯绍峰和郭碧婷!据说两人春节期间窝在豪宅三天三夜,除夕之夜,冯绍峰父母还送来了热乎饭菜,一起吃年夜饭过大年!那么郭碧婷是冯绍峰的女友吗?冯...

    2022-11-18 长篇鬼故事
  • 朱军事件是什么 案子有结果了吗?

    在很多观众的心中央视主持人除了多才多艺也是正义的使者,但是之前因为赵忠祥事件导致央视主持人的形象大跌,不过赵忠祥事件致死都没有得到一个明确的结果。而同样身为央视主持...

    2022-10-27 长篇鬼故事
  • 郭鑫年的原型

    据悉,在电视剧《创业时代》中,郭鑫年的原型人物是talkbox创始人郭秉鑫。该剧主要围绕着软件工程师郭鑫年所设计的一款名为“魔盒”的手机软件为主题,讲述了创业者在创业过程中...

    2022-11-21 长篇鬼故事
  • 第七层楼梯

    【第七层楼梯】简介:上世纪五十年代初,我国地产业开始迅速崛起,同时也迎来了中国地产业的第一个辉煌时期。随着房价的不断飙升,更多的人也开始加入到此行业中来,希望能从中分一杯羹。一件事情,一旦有更多的人参与进来,这...

    2021-09-11 长篇鬼故事
  • 一波未平一波又起 哈萨克斯坦现不明肺炎 致死率远超新冠

    一波未平一波又起 哈萨克斯坦现不明肺炎 致死率远超新冠,一波未平一波又起 哈萨克斯坦现不明肺炎 致死率远超新冠本文核心词:2020开年,新冠疫情爆发,给全球国家都蒙上了一层病毒的隐形,而截止今日,虽然国内疫情已经基本扑灭,但全球总确诊人数已经远远越过千万...

    2023-02-15 长篇鬼故事
  • 2021山东农业大学各专业录取分数线 山东农业大学录取分数线

    山东农业大学录取分数线 2020山东农业大学各专业录取分数线一、院校简介今天咱来更新山东省一所老牌劲旅院校——山东农业大学,为什么说是老牌院校,因为山东农大创办于1906年...

    2022-11-16 长篇鬼故事
  • 芈月传芈茵结局被郭隗所杀

    芈月传芈茵结局是什么?芈茵是芈月和芈姝的异母姐姐,楚国的庶出公主。在楚威后淫威下长大的她自卑而善妒,善于讨好又工于心计。她从小就明白自己的身份和将要面对的命运,却心有不...

    2023-02-17 长篇鬼故事
  • 世界上最难的脑筋急转弯

    十大世界上最难的脑筋急转弯: 1、在一个夜黑风高的夜晚,一个人伸手不见五指,这是为什么? 2.什么东西开始软软的,越搅和越硬,越搅和越粗? 3、你身上有一个东西,你自己不能用右手拿,也...

    2022-11-09 长篇鬼故事
你可能感兴趣