DS18B20温度传感器的使用方法
使用DS18B20温度传感器测温
第11章使用DS18B20温度传感器测温11.1 概述现实生产生活中,小到测量体温的温度计,大到航天飞机的温控系统,处处都离不开温度测量。
工业生产中的三大指标(流量、压力、温度)之一就是温度,温度测量可以说是无处不在,遍布了我们生活生产的方方面面。
DS18B20温度传感器是美国DALLAS半导体公司生产的数字化温度传感器,它与以往模拟量温度传感器不同,数字化是其一大特点,它能将被测环境温度直接转化为数字量,并以串行数据流的形式传输给单片机等微处理器去处理。
DS18B20温度传感器的另一个主要特点是它是单总线的,即它与单片机等微处理器连接时,只需占用一个I/O管脚,并且不再需要其它任何外部元器件,这大大简化了它与但单片机之间的接口电路。
11.2 DS18B20温度传感器介绍目前,使用最普遍的DS18B20温度传感器是三脚TO-92直插式封装这一种,这种封装的DS18B20实物如图11-1所示。
可以看到它体积很小,只有三只管脚,外形与一般的三极管极其相似。
图11-2是其三脚TO-92直插式封装图,表11-1列出了DS18B20各个引脚的定义。
如图11-1 如图11-2表11-1 DS18B20引脚定义。
1、DS18B20温度传感器特性简介◆独特的单总线(一条线)接口,与微处理器通信只需一个I/O管脚,且硬件连接无需其它外部元件;◆测量结果直接输出数字量,可直接与微处理器通信;◆供电电压范围3.0V~5.5V;在寄生电源方式下可有数据线供电;◆测温范围-55℃~+125℃;在-10℃~+85℃范围内,测量精度可达±0.5℃;◆可编程的9~12位测温分辨率,对应的可分辨温度值分别为0.5℃,0.25℃,0.125℃,0.0625℃;12位分辨率时的温度测量转换最长时间(上限)只有750ms;◆每一片DS18B20都有自己独一无二的芯片号码;多片DS18B20可以并联在一条数据总线上实现不同地点的多点组网;◆应用范围包括温度调控,工业现场测温,消费类产品,温度计及热敏系统等。
数字温度传感器DS18B20C-25页说明
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※DS1B820单总线数字温度计※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※一、概述1.1一般说明DS18B20数字温度计提供9至12位(可设置)温度读数,指示器件的温度。
信息经过单线接口送入DS18B20或从DS18B20送出,因此从中央处理器到DS18B20仅需连接一条线(另加上地线)。
读、写和完成温度变换所需的电源可以由数据线本身提供,而不需要外部电源。
因为每一个DS18B20有唯一的系列号(silicon serial number),因此多个DS18B20可以连接在于同一条单线总线上。
这允许在许多不同的地方放置DS18B20温度传感器。
此特性可广泛地应用于HVAC环境控制,建筑物、设备或机械内的温度检测,以及过程监视和控制中的温度检测。
1.2特性·独特的单线接口,只需1个接口引脚即可通信·多点并接能力使分布式温度检测的应用得以简化·不需要外部元件·可用数据线供电,若外加电源,范围3V至5.5V·不需备份电源·测量范围从-55℃至+125℃,对应的华氏温度范围是-67℉至257℉。
·在-10℃至+85℃内的准确度为±0.5℃。
·可编程设定9至12位的温度分辨率·在750毫秒(最大值)内把温度变换为12位数字值·用户可设置,非易失性的温度告警值·告警搜索命令可在众多的器件中,快速识别出超过设定的“告警温度”值的器件。
·应用范围包括恒温控制,工业系统,消费类产品,温度计或任何热敏系统25/11.3引脚排列1.4详细的引脚说明TSOC8脚SOIC TO92符说明151GND地线242DQ数据输入/输出引脚。
漏极开路结构,详见“寄生电源”一节。
DS18B20数字温度传感器(0001)
DS18B20数字温度传感器DS18B20温度传感器DS18B20,常用的温度传感器,具有体积小,硬件开销低,抗干扰能力强,精度高的特点。
面对着扁平的那一面,左负右正,一旦接反就会立刻发热,有可能烧毁!同时,接反也是导致该传感器总是显示85℃的原因。
引脚封装TO-92封装1 接地接地2 数字信号输入输出,一线输出:源极开路3 电源可选电源管脚。
见"寄生功率"一节细节方面。
电源必须接地,为行动中,寄生虫功率模式。
DS18B20数字温度传感器接线方便,封装成后可应用于多种场合,如管道式,螺纹式,磁铁吸附式,不锈钢封装式,型号多种多样,有LTM8877,LTM8874等等。
主要根据应用场合的不同而改变其外观。
封装后的DS18B20可用于电缆沟测温,高炉水循环测温,锅炉测温,机房测温,农业大棚测温,洁净室测温,弹药库测温等各种非极限温度场合。
耐磨耐碰,体积小,使用方便,封装形式多样,适用于各种狭小空间设备数字测温和控制领域。
①、独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。
②、测温范围-55℃~+125℃,固有测温误差(注意,不是分辨率,这里之前是错误的)1℃。
③、支持多点组网功能,多个DS18B20可以并联在唯一的三线上,最多只能并联8个,实现多点测温,如果数量过多,会使供电电源电压过低,从而造成信号传输的不稳定。
④、工作电源: 3.0~5.5V/DC (可以数据线寄生电源)⑤、在使用中不需要任何外围元件⑥、测量结果以9~12位数字量方式串行传送⑦、不锈钢保护管直径Φ6⑧、适用于DN15~25, DN40~DN250各种介质工业管道和狭小空间设备测温⑨、标准安装螺纹M10X1, M12X1.5, G1/2”任选⑩、PVC电缆直接出线或德式球型接线盒出线,便于与其它电器设备连接。
应用范围1 该产品适用于冷冻库,粮仓,储罐,电讯机房,电力机房,电缆线槽等测温和控制领域2 轴瓦,缸体,纺机,空调,等狭小空间工业设备测温和控制。
DS18B20数字温度传感器应用详解
DS18B20数字温度传感器应用详解电路图参考图:在传统的模拟信号远距离温度测量系统中,需要很好的解决引线误差补偿问题、多点测量切换误差问题和放大电路零点漂移误差问题等技术问题,才能够达到较高的测量精度。
另外一般监控现场的电磁环境都非常恶劣,各种干扰信号较强,模拟温度信号容易受到干扰而产生测量误差,影响测量精度。
因此,在温度测量系统中,采用抗干扰能力强的新型数字温度传感器是解决这些问题的最有效方案,新型数字温度传感器DS18B20具有体积更小、精度更高、适用电压更宽、采用一线总线、可组网等优点,在实际应用中取得了良好的测温效果。
新的"一线器件"DS18B20体积更小、适用电压更宽、更经济。
美国Dallas半导体公司的数字化温度传感器DS1820是世界上第一片支持 "一线总线"接口的温度传感器,在其内部使用了在板(ON-B0ARD)专利技术。
全部传感元件及转换电路集成在形如一只三极管的集成电路内。
一线总线独特而且经济的特点,使用户可轻松地组建传感器网络,为测量系统的构建引入全新概念。
现在,新一代的DS18B20体积更小、更经济、更灵活。
使你可以充分发挥“一线总线”的优点。
目前DS18B20批量采购价格仅10元左右。
DS18B20、DS1822 "一线总线"数字化温度传感器同DS1820一样,DS18B20也支持"一线总线"接口,测量温度范围为-55°C~+125°C,在-10~+85°C范围内,精度为±0.5°C。
DS1822的精度较差为±2°C。
现场温度直接以"一线总线"的数字方式传输,大大提高了系统的抗干扰性。
适合于恶劣环境的现场温度测量,如:环境控制、设备或过程控制、测温类消费电子产品等。
与前一代产品不同,新的产品支持3V~5.5V的电压范围,使系统设计更灵活、方便。
Ds18b20温度传感器使用手册
Ds18b20温度传感器使用手册一、传感器实物图二、引脚说明(1)1 VCC 3.0~5.5V/DC 3 GND42 DQ 数字信号输入/输出端(2)1 5 GND2 63 VCC 3.0~5.5V/DC 74 DQ 数字信号输入/输出8端三、软件设计功能说明:ds18b20采集温度并显示在1602液晶上#include <reg52.h>#include <stdio.h>#define uchar unsigned char#define uint unsigned intsbit ds=P2^4; //温度传感器信号线uint temp;float f_temp;sbit rs=P1^0; //sbit lcden=P1^2; // 液晶sbit wr=P1^1; //void delay(uint z)//延时函数{uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}/***********液晶**************/void write_com(uchar com){//写液晶命令函数rs=0;lcden=0;P0=com;delay(3);lcden=1;delay(3);lcden=0;}void write_date(uchar date){//写液晶数据函数rs=1;lcden=0;P0=date;delay(3);lcden=1;delay(3);lcden=0;}void init() //液晶初始化{lcden=0;write_com(0x38);write_com(0x0e);write_com(0x06);write_com(0x01);}/***********ds18b20**********/void dsreset(void) //18B20复位,初始化函数{uint i;ds=0;i=103;while(i>0)i--;ds=1;i=4;while(i>0)i--;}bit tempreadbit(void) //读1位函数{uint i;bit dat;ds=0;i++; //i++ 起延时作用ds=1;i++;i++;dat=ds;i=8;while(i>0)i--;return (dat);}uchar tempread(void) //读1个字节{uchar i,j,dat;dat=0;for(i=1;i<=8;i++){j=tempreadbit();dat=(j<<7)|(dat>>1); //读出的数据最低位在最前面,这样刚好一个字节在DAT里}return(dat);}void tempwritebyte(uchar dat) //向18B20写一个字节数据{uint i;uchar j;bit testb;for(j=1;j<=8;j++){testb=dat&0x01;dat=dat>>1;if(testb) //写1{ds=0;i++;i++;ds=1;i=8;while(i>0)i--;}else{ds=0; //写0i=8;while(i>0)i--;ds=1;i++;i++;}}}void tempchange(void) //DS18B20 开始获取温度并转换{dsreset();delay(1);tempwritebyte(0xcc); // 写跳过读ROM指令tempwritebyte(0x44); // 写温度转换指令}uint get_temp() //读取寄存器中存储的温度数据{uchar a,b;dsreset();delay(1);tempwritebyte(0xcc);tempwritebyte(0xbe);a=tempread(); //读低8位b=tempread(); //读高8位temp=b;temp<<=8; //两个字节组合为1个字temp=temp|a;f_temp=temp*0.0625; //温度在寄存器中为12位分辨率位0.0625°temp=f_temp*10+0.5; //乘以10表示小数点后面只取1位,加0.5是四舍五入f_temp=f_temp+0.05;return temp; //temp是整型}uchar change(uchar a) //将数字转换为字符{uchar b;if(a==0) b='0';if(a==1) b='1';if(a==2) b='2';if(a==3) b='3';if(a==4) b='4';if(a==5) b='5';if(a==6) b='6';if(a==7) b='7';if(a==8) b='8';if(a==9) b='9';return b;}void dis_temp(uint t) //显示程序{uchar a,b;write_com(0x80+0x40);a=t/100;b=change(a);write_date(b); //十位数delay(5);a=t%100/10;b=change(a); //个位数write_date(b);delay(5);write_date(0x2e); //小数点delay(5);a=t%100%10;b=change(a); //十分位write_date(b);delay(5);write_date(0xdf); //摄氏度的符号delay(5);write_date(0x43);delay(5);}void main(){wr=0;init();while(1){write_com(0x01);tempchange();dis_temp(get_temp());delay(500);}}。
DS18B20温度传感器的控制方法
DS18B20温度传感器的控制方法DS18B20的初始化:(1)先将数据线置高电平“1”。
(2)延时(该时间要求的不是很严格,但是尽可能的短一点)(3)数据线拉到低电平“0”。
(4)延时750微秒(该时间的时间范围可以从480到960微秒)。
(5)数据线拉到高电平“1”。
(6)延时等待(如果初始化成功则在15到60毫秒时间之内产生一个由DS18B20所返回的低电平“0”。
据该状态可以来确定它的存在,但是应注意不能无限的进行等待,不然会使程序进入死循环,所以要进行超时控制)。
(7)若CPU读到了数据线上的低电平“0”后,还要做延时,其延时的时间从发出的高电平算起(第(5)步的时间算起)最少要480微秒。
(8)将数据线再次拉高到高电平“1”后结束。
DS18B20的写操作:(1)数据线先置低电平“0”。
(2)延时确定的时间为15微秒。
(3)按从低位到高位的顺序发送字节(一次只发送一位)。
(4)延时时间为45微秒。
(5)将数据线拉到高电平。
(6)重复上(1)到(6)的操作直到所有的字节全部发送完为止。
(7)最后将数据线拉高。
DS18B20的读操作:(1)将数据线拉高“1”。
(2)延时2微秒。
(3)将数据线拉低“0”。
(4)延时15微秒。
(5)将数据线拉高“1”。
(6)延时15微秒。
(7)读数据线的状态得到1个状态位,并进行数据处理。
(8)延时30微秒。
根据DS18B20的通讯协议,主机(单片机)控制DS18B20完成温度转换必须经过三个步骤:每一次读写之前都要对DS18B20进行复位操作,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操作。
复位要求主CPU将数据线下拉500微秒,然后释放,当DS18B20收到信号后等待16~60微秒左右,后发出60~240微秒的存在低脉冲,主CPU收到此信号表示复位成功。
表2 ROM指令表指令约定代码功能读ROM 33H 读DS1820温度传感器ROM中的编码(即64位地址)符合ROM 55H 发出此命令之后,接着发出64 位ROM 编码,访问单总线上与该编码相对应的DS1820 使之作出响应,为下一步对该DS1820 的读写作准备。
温度传感器DS18B20的应用
被拉低, 在之后的15 μs内必须释放单总线。
4. DS18B20 初始化。
void init_18b20( uchar channel)
{
DDRC |=BIT( channel) ;
/ /口位变成输出
PORTC &=~BIT( channel) ;
/ /输出为零, 拉低
总线
delayus( 250) ;
很多智能化的温度传感器使用同步串行总线技 术 , 如 : Microwire /Plus ( NSC) 等 均 采 用 串 行 总 线 协 议, 而DS18B20采用的是1-Wire总线协议。1-Wire是 DALLAS公司的一项专有技术, 它采用一根信号线实 现信号的双向传输, 接口简单、节省I /O口线、便于扩 展和维护。
PORTC |=BIT( channel) ; / /口位为高电平
DDRC |=BIT( channel) ; / /口位变成输出
}
5.写 DS18B20。
void write_18b20( uchar wr_data, uchar sensor_channel)
{
static uchar m;
for( m=0; m<=7; m++)
图6 温度监测系统硬件结构图
使 用 方 便 的 一 线 数 字 式 温 度 传 感 器DS18B20, 全天候不间断地采集屯积物内部多层的现场环境温 度, 并将环境温度由INTERNET或LAN实时传送到异 地。DS18B20铺设方便、结构简单、监测准确、成本低 廉, 成功而有效地成为温度传感器的更新换代产品。 〔作者通联: 河南省工业学校 450002〕
1.DS18B20 的复位时序。
图2 DS 18B20复位时序
DS18B20数字式温度传感器的使用方法介绍
2 ) 读出( B E H) 。用此命令读 出寄存器 中的内容 , 从第 1 字节开始 , 直到读完第 9 字节 , 如果仅需要寄存器 中部分 内容 , 主机可以在合适时 刻发送 复位命令结束该过程。 3 ) 复制( 4 8 H ) 。用该命令把暂存器第 2 ~ 4 字节转存 到D S l 8 B 2 0的 E E R O M中, 如果 D S 1 8 B 2 0 是 由信号 线供 电, 主机发 出此命令后 , 总线 必须保证至少 1 0 m s 的上拉 , 当发 出命令后 , 主机发 出读时 隙来读总线 , 如果转存正在进行 , 读结果为 0 , 转存结束为 1 。 4 ) 开始 转换 ( 4 4 H ) 。D S 1 8 B 2 0收到该命令 后立刻 开始温度 转换 , 不需要其它数据 。此时 D S 1 8 B 2 0处于空闲状态 , 当温度 转换正在进行 时, 主机 读总线将收 到0 , 转换结束 为 1 。如果 D S 1 8 B 2 0 是 由信 号线供 电, 主机 发出此命令后 主机必 须立即提供至少相应 于分辨率 的温度转 换时 间的上拉电平。 5 ) 回调 ( B 8 H ) 。执 行该 命 令把 E E R O M 中 的内容 回调 到 寄存 器 T H、 T L 和设置寄存器单元中 , D S 1 8 B 2 0 上 电时能 自动 回调 , 因此设备上 电后 T H、 T L就存 在有 效数据 。该命 令发 出后 , 如果 主机 跟着读总 线 ,
D S 1 8 B 2 0 测 温原理如 图所示 , 图中低 温度系数 晶振的振荡频率受 温度影响小用 于产生 固定频率的脉 冲信号送 给计数器 1 。高温度 系数 晶振随温度变 化其振荡率 明显改变 , 所 产生的信号作 为计 数器 2的脉 冲输 入 。计 数 器 l 和 温度 寄存 器被 预置 在一 5 5 。 c所对 应 的一个 基数 值 。计数 器 l 对低温 度系数 晶振 产生的脉 冲信 号进行减 法计数 , 当计 数器 1 的预置值减 到0 时, 温度 寄存器 的值将加 1 , 计数器 1 的预置将重 新被装入 , 计数器 1 重新 开始对低温度 系数晶振产 生的脉冲信号进行 计数 , 如此循环直到计数器 2 计数到 0 时, 停止温度寄存 器值 的累加 , 此 时温度寄存器中的数值即为所测温度。斜率累加器用于补偿和修 正测 温过程 中的非线性 , 其 输 出用 于修正计数器 1的预置值 。D S 1 8 B 2 0在 正常使用 时的测温分辨率为 0 . 5 ℃。
DS18B20温度传感器使用方法以及代码
第7章DS18B20温度传感器7.1 温度传感器概述温度传感器是各种传感器中最常用的一种,早起使用的是模拟温度传感器,如热敏电阻,随着环境温度的变化,它的阻值也发生线性变化,用处理器采集电阻两端的电压,然后根据某个公式就可以计算出当前环境温度。
随着科技的进步,现代的温度传感器已经走向数字化,外形小,接口简单,广泛应用在生产实践的各个领域,为我们的生活提供便利。
随着现代仪器的发展,微型化、集成化、数字化、正成为传感器发展的一个重要方向。
美国DALLS半导体公司推出的数字化温度传感器DS18B20采用单总线协议,即单片机接口仅需占用一个I/O端口,无需任何外部元件,直接将环境温度转化为数字信号,以数码方式串行输出,从而大大简化了传感器与微处理器的接口。
7.2 DS18B20温度传感器介绍DS18B20是美国DALLAS半导体公司继DS1820之后最新推出的一种改进型智能温度传感器。
与传统的热敏电阻相比,他能够直接读出被测温度并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。
可以分别在93.75 ms和750 ms内完成9位和12位的数字量,并且从DS18B20读出的信息或写入DS18B20的信息仅需要一根口线(单线接口)读写,温度变换功率来源于数据总线,总线本身也可以向所挂接的DS18B20供电,而无需额外电源。
因而使用DS18B20可使系统结构更趋简单,可靠性更高。
他在测温精度、转换时间、传输距离、分辨率等方面较DS1820有了很大的改进,给用户带来了更方便的使用和更令人满意的效果。
1.DS18B20温度传感器的特性①独特的单线接口方式:DS18B20与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。
②在使用中不需要任何外围元件。
③可用数据线供电,电压范围:+3.0~ +5.5 V。
④测温范围:-55 ~+125 ℃。
固有测温分辨率为0.5 ℃。
⑤通过编程可实现9~12位的数字读数方式。
亿学通电子 DS18B20 温度传感器使用手册
1) DS18B20 是DALLAS 公司生产的一线制数字温度传感器; 2) 具有3 引脚TO-92 小体积封装形式; 3) 温度测量范围为-55℃~+125℃; 4) 电源供电范围为3V~5.5V ; 5) 可编程为9 位~12 位数字表示;6) 测温分辨率可达0.0625℃,被测温度用符号扩展的16 位数字量方式串行输出;7) 其工作电源既可在远端引入,也可采用寄生电源方式产生;8) 多个DS18B20 可以并联到3 根(VDD、DQ 和GND)或2 根(利用DQ 线供电、GND)线上,CPU 只需一根端口线就能与总线上的多个串联的DS18B20 通信,占用微处理器的端口较少,可节省大量的引线和逻辑电路。
一线总线独特而且经济的特点,使用户可轻松地组建传感器网络,为测量系统的构建引入全新概念。
TO-92封装的DS18B20DS18B20 的管脚排列及不同封装形式如图 2所示,DQ 为数字信号输入/输出端;GND 为电源地;VDD 为外接供电电源输入端(在寄生电源接线方式时接地,见),NC 表示无连接。
管脚图DS18B20内部结构如图3所示,主要由4 部分组成:64 位ROM 、温度传感器、非易失性存储的温度报警触发器TH 和TL 、配置寄存器。
DS18B20管脚DS18B20概述DS18B20内部结构图非常适用于远距离多点温度检测系统。
DQ-数据输入输出。
漏极开路1 线接口。
也在寄生电源模式时给设备提供电源。
访问DS18B20 的顺序如理初始化;DS18B20读写 连接图应用领域ROM 命令(接着是任何需要的数据交换);DS18B20 函数命令(接着是任何需要的数据交换)。
每一次访问DS18B20 时必须遵循这一顺序,如果其中的任何一步缺少或打乱它们的顺序,DS18B20 将不会响应。
(1)初始化时序所有与DS18B20 的通信首先必须初始化:控制器发出复位脉冲,DS18B20 以存在脉冲响应。
DS18B20温度传感器实训教程
(2)程序编写、编译。
a.编写主函数程序main.c如下:
#include "reg52.h"
#include"temp.h"
typedef unsigned int u16;
typedef unsigned char u8;
sbit LSA=P2^2;
sbit LSB=P2^3;
2硬件连接3程序烧入芯片1选择单片机型号串口号打开程序文件关闭单片机电源再点击下载程序然后打开电源程序显示下载操作成功即可
DS18B20
1、
1、掌握DS18B20温度传感器设计与制作及其特性;
2、熟练KeiluVision5软件及程序烧入软件基础运用;
3、了解并使用单片机开发试验仪做基础实验。
4、学会基础的C51单片机程序编写并看懂较为复杂的程序。
{
Ds18b20Init();
Delay1ms(1);
Ds18b20WriteByte(0xcc);//跳过ROM操作命令
Ds18b20WriteByte(0xbe);//发送读取温度命令
}
/*******************************************************************************
for(j=8; j>0; j--)
{
DSPORT = 0;//先将总线拉低1us
i++;
DSPORT = 1;//然后释放总线
i++;
i++;//延时6us等待数据稳定
bi = DSPORT;//读取数据,从最低位开始读取
DS18B20温度传感器应用
0.0000
0.0625 0.1250 0.1875 0.2500 0.3125 0.3750
1000
1001 1010 1011 1100 1101 1110
0.5000
0.5625 0.6250 0.6875 0.7500 0.8125 0.8750 0.9375
0.4375 1111 温度数值的小数部分
• 发出存在脉冲:拉低总线60-240us。Βιβλιοθήκη DS18B20操作——写1位
WBIT: CLR BUS NOP NOP NOP NOP NOP • 写“0”:单片机拉低总线至少60us后,释放(拉高)总线 MOV BUS , C • 写“1”:单片机拉低总线1us~15us后,拉高总线至少60us LCALL DELAY60 SETB BUS 注:DS18B20会在总线拉低后的15~60us以内采样总 线,以此来确定写0还是写1。 RET
•
•
• •
DS18B20操作—读1字节
RLC A
RRC A
READBYTE: MOV R6 , #8 LP:LCALL RBIT RRC A DJNZ R6, LP RET
CY CY A.7 A.7 A.0 A.0
DS18B20特点
• 测温范围为-55~+125℃ • 最高12位数值输出,分辨率可达 到0.0625 ℃ • 电压范围:3.0~5.5V,在寄生电 源方式下可由数据线供电 • DS18B20在与微处理器连接时仅 需要一条口线即可实现双向通讯 • 测量结果直接输出数字温度信号, 以"一线总线"串行传送给CPU
读暂存器
0BEH
写暂存器
4EH
复制暂存器
48H
重调 EEPROM
DS18B20的连接介绍
DS18B20的连接介绍要连接DS18B20,我们需要以下几个步骤:步骤一:准备材料首先,我们需要准备一些材料:1.DS18B20温度传感器。
2.4.7K欧姆电阻。
3.杜邦线或其他适合的连接线。
4.单片机或其他微控制器。
步骤二:连接电路接下来,我们需要将DS18B20与单片机电路连接起来。
1.将DS18B20的引脚与单片机的引脚相连。
DS18B20有三个引脚:VCC(供电),DATA(数据)和GND(地)。
-将DS18B20的VCC引脚连接到单片机的电源引脚,一般为3.3V或5V;同时也可以使用外部供电源。
-将DS18B20的DATA引脚连接到单片机的数据引脚。
在连接前,我们需要在单片机上配置该引脚为输入/输出模式,并设置为上拉模式。
(如果单片机的引脚没有上拉电阻,可以外接一个4.7K欧姆电阻以确保正常工作)-将DS18B20的GND引脚连接到单片机的地引脚。
步骤三:编写代码接下来,我们需要在单片机上编写代码以读取DS18B20的数据。
1. 初始化总线:首先需要初始化1-Wire总线通信协议,设置引脚为上拉输入模式。
2. 设备:使用1-Wire总线协议设备。
DS18B20通过ROM的方式进行寻址,因此需要设备的ROM代码。
3. 发送命令:通过1-Wire总线协议向DS18B20发送命令。
可以发送读取温度的命令,或者其他需要的命令。
4. 接收数据:通过1-Wire总线协议接收DS18B20返回的数据。
将接收到的数据转换成摄氏温度或华氏温度并进行计算。
5.循环读取:可以使用一个循环结构,不断读取DS18B20的温度数据。
步骤四:运行程序最后,我们需要将代码烧录到单片机中,然后启动程序以开始读取DS18B20的温度数据。
综上所述,连接DS18B20并读取温度数据需要准备材料、搭建电路、编写代码、烧录程序等步骤。
同时需要注意的是,在操作过程中要仔细阅读DS18B20的数据手册,确保正确连接和使用,以避免因操作不当而造成的损坏或错误数据的情况发生。
DS18B20温度传感器流程图
Y
发温度转换 开始 命令
1 a1
1 a1
பைடு நூலகம்2 a2
3 a3
4 a4
5 b1
6 b2
7 b3
8 b4
2 b1
2 b1
5 b1
6 b2
7 b3
8 b4
开始
温度零 下?
Y
温度值取补码 置“-”标志
计算小数位温 度BCD码
N 置“+”标志
计算整数位温 度BCD码
结束
DS18B20
主控制器
AT89C2051
显示器 扫描驱动
预置 低温度系数振荡器
发DS18B20复位命令
发跳过ROM命令
CRC校验正确?
Y
发读取温度命令
移入温度暂存器 N
Y
读取操作,CRC校验 N
结束
9字节完?
温度子程序
64位ROM和单线接口 存缓速高
存储器与控制逻辑
温度传感器 温度触发器 TH 低温触发器 TL
配置寄存器 8位CRC发生器
1 a1
2 a2
3 a3
4 a4
1 a1
斜率累加器 减法计数器
计数比较器 预置
高温度系数振荡器
减到0
增加
减法计数器2
温度寄存器
停止
减到0
I/O C
Vdd
64位ROM和单线接口 存缓速高
存储器与控制逻辑
温度传感器 温度触发器 TH 低温触发器 TL
配置寄存器 8位CRC发生器
温度数据移入 显示寄存器
发DS18B20复位命令 发跳过ROM命令
发温度转换开始命令
十位数0?
Y
百位数0?
温度传感器ds18b20
温度传感器ds18b20温度传感器DS18B201. 简介温度传感器DS18B20是一种数字温度传感器,可用于测量环境温度。
该传感器由Maxim Integrated公司生产,并在许多应用中得到了广泛的应用,如家庭自动化、气象站、工业控制等。
DS18B20采用了数字化接口,并具有高精度、可编程分辨率和低功耗等特点。
2. 技术规格DS18B20的技术规格如下:- 工作电源:3.0V至5.5V- 测量范围:-55°C至+125°C- 分辨率:可编程为9、10、11或12位- 精度:±0.5°C(在-10°C至+85°C范围内)- 通信接口:一线式数字接口3. 工作原理DS18B20采用了一线式数字接口,这意味着它只需要一根数据线进行通信。
传感器从控制器接收命令,并通过数据线将温度数据发送回控制器。
传感器的数据线同时起到了供电的作用。
DS18B20通过内部的精密温度传感器测量环境温度。
传感器将温度转换为数字信号,并通过数据线将其发送给控制器。
传感器的分辨率可以根据需要进行编程,从而在精度和响应速度之间进行平衡。
4. 使用方法使用DS18B20温度传感器非常简单。
首先,将传感器的电源引脚连接到可用的电源引脚,并将数据线连接到控制器的GPIO引脚。
然后,通过控制器向传感器发送命令,请求温度数据。
传感器将在一段时间后将温度数据发送回控制器,控制器可以读取这些数据并进行相应的处理。
DS18B20还具有一些特殊的命令,如启动温度转换、复位传感器和读取ROM代码等。
这些命令可以通过与控制器的通信来实现。
5. 应用领域温度传感器DS18B20在许多应用中得到了广泛的应用。
以下是一些常见的应用领域:- 家庭自动化:DS18B20可以用于监测室内温度,从而实现智能化的温控系统。
- 气象站:DS18B20可以用于监测室外温度,并将数据发送到气象站系统进行分析和显示。
温度传感器DS18B及LCD1602的使用
温度传感器DS18B及LCD1602的使用温度传感器DS18B20是一种数字温度传感器,可以通过单线数字接口与单片机进行通信。
它采用了Dallas的1-Wire总线协议,具有高精度、低功耗、长传输距离等特点。
而LCD1602是一种常用的字符型液晶显示屏,可以显示16×2个字符。
使用DS18B20温度传感器需要先进行硬件连接。
它需要三个引脚,即VCC、GND和DQ。
VCC连接到3.3V或5V电源,GND连接到地线,DQ连接到单片机的一个GPIO口。
在连接时要注意使用上拉电阻将DQ引脚连接到VCC,以确保通信的可靠性。
在软件方面,需要使用1-Wire总线的协议进行通信。
可以使用基于C语言或者Arduino的库来实现。
在Arduino中,可以使用OneWire库来方便地读取DS18B20的数据。
首先需要创建一个OneWire对象,并指定DQ引脚,然后在setup(函数中初始化该对象。
接下来在loop(函数中可以使用`reset_search(`函数来连接的设备,并通过`search(`函数来获取设备的地址。
而后使用`reset(`函数重置总线,`select(`函数选择设备进行通信,`write(`函数发送指令,`read(`函数读取数据。
其中,读取温度数据需要先发送读取温度的指令,使用`read_bytes(`函数读取9个字节的数据,低字节在前,高字节在后,然后将读取到的数据处理转换为摄氏温度。
接下来是LCD1602的使用。
LCD1602需要连接到单片机的多个引脚,包括VCC、GND、SCL、SDA等。
在Arduino中,可以使用LiquidCrystal库来方便地控制LCD1602、首先需要创建一个LiquidCrystal对象,并指定连接的引脚,然后在setup(函数中初始化该对象。
接下来可以使用一系列函数来向LCD1602写入数据,如`begin(`函数用于初始化LCD1602,`print(`函数用于显示字符,`setCursor(`函数用于设置光标位置等。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
这是关于DS18B20的读写程序,数据脚,晶振
;温度传感器18B20汇编程序,采用器件默认的12位转化,最大转化时间750微秒
;可以将检测到的温度直接显示到AT89C51的两个数码管上
;显示温度00到99度,很准确无需校正!
ORG 0000H
;单片机内存分配申明!
TEMPER_L EQU 29H;用于保存读出温度的低8位
TEMPER_H EQU 28H;用于保存读出温度的高8位
FLAG1 EQU 38H;是否检测到DS18B20标志位
a_bit equ 20h ;数码管个位数存放内存位置
b_bit equ 21h ;数码管十位数存放内存位置
MAIN:
LCALL GET_TEMPER;调用读温度子程序
;进行温度显示,这里我们考虑用网站提供的两位数码管来显示温度
;显示范围00到99度,显示精度为1度
;因为12位转化时每一位的精度为度,我们不要求显示小数所以可以抛弃29H的低4位;将28H中的低4位移入29H中的高4位,这样获得一个新字节,这个字节就是实际测量获得的温度
;这个转化温度的方法可是我想出来的哦~~非常简洁无需乘于系数
MOV A,29H
MOV C,40H;将28H中的最低位移入C
RRC A
MOV C,41H
RRC A
MOV C,42H
RRC A
MOV C,43H
RRC A
MOV 29H,A
LCALL DISPLAY;调用数码管显示子程序
CPL
AJMP MAIN
; 这是DS18B20复位初始化子程序
INIT_1820:
SETB
NOP
CLR
;主机发出延时537微秒的复位低脉冲
MOV R1,#3
TSR1:MOV R0,#107
DJNZ R0,$
DJNZ R1,TSR1
SETB ;然后拉高数据线
NOP
NOP
MOV R0,#25H
TSR2:
JNB ,TSR3;等待DS18B20回应
DJNZ R0,TSR2
LJMP TSR4 ; 延时
TSR3:
SETB FLAG1 ; 置标志位,表示DS1820存在
CLR ;检查到DS18B20就点亮
LJMP TSR5
TSR4:
CLR FLAG1 ; 清标志位,表示DS1820不存在
CLR
LJMP TSR7
TSR5:
MOV R0,#117
TSR6:
DJNZ R0,TSR6 ; 时序要求延时一段时间
TSR7:
SETB
RET
; 读出转换后的温度值
GET_TEMPER:
SETB
LCALL INIT_1820;先复位DS18B20
JB FLAG1,TSS2
CLR
RET ; 判断DS1820是否存在若DS18B20不存在则返回
TSS2:
CLR ;DS18B20已经被检测到!!!!!!!!!!!!!!!!!!
MOV A,#0CCH ; 跳过ROM匹配
LCALL WRITE_1820
MOV A,#44H ; 发出温度转换命令
LCALL WRITE_1820
;这里通过调用显示子程序实现延时一段时间,等待AD转换结束,12位的话750微秒LCALL DISPLAY
LCALL INIT_1820;准备读温度前先复位
MOV A,#0CCH ; 跳过ROM匹配
LCALL WRITE_1820
MOV A,#0BEH ; 发出读温度命令
LCALL WRITE_1820
LCALL READ_18200; 将读出的温度数据保存到35H/36H
CLR
;写DS18B20的子程序(有具体的时序要求)
WRITE_1820:
MOV R2,#8;一共8位数据
CLR C
WR1:
CLR
MOV R3,#5
DJNZ R3,$
RRC A
MOV ,C
MOV R3,#21
DJNZ R3,$
SETB
NOP
DJNZ R2,WR1
SETB
RET
READ_18200: ; 读DS18B20的程序,从DS18B20中读出两个字节的温度数据MOV R4,#2 ; 将温度高位和低位从DS18B20中读出
MOV R1,#29H ; 低位存入29H(TEMPER_L),高位存入28H(TEMPER_H)
RE00:
MOV R2,#8;数据一共有8位
RE01:
CLR C
SETB
NOP
NOP
CLR
NOPNOP
NOP
SETB
MOV R3,#8
RE10:
DJNZ R3,RE10
MOV C,
MOV R3,#21
RE20:
DJNZ R3,RE20
RRC A
DJNZ R2,RE01
MOV @R1,A
DEC R1
DJNZ R4,RE00
RET
;显示子程序
display: mov a,29H;将29H中的十六进制数转换成10进制mov b,#10 ;10进制/10=10进制
div ab
mov b_bit,a ;十位在a
mov a_bit,b ;个位在b
mov dptr,#numtab ;指定查表启始地址
mov r0,#4
dpl1: mov r1,#250 ;显示1000次
dplop: mov a,a_bit ;取个位数
MOVC A,@A+DPTR ;查个位数的7段代码
mov p0,a ;送出个位的7段代码
clr ;开个位显示
acall d1ms ;显示1ms
setb
mov a,b_bit ;取十位数
MOVC A,@A+DPTR ;查十位数的7段代码
mov p0,a ;送出十位的7段代码
clr ;开十位显示
acall d1ms ;显示1ms
setb
djnz r1,dplop ;100次没完循环
djnz r0,dpl1 ;4个100次没完循环
ret
;1MS延时
D1MS: MOV R7,#80
DJNZ R7,$
RET
;实验板上的7段数码管0~9数字的共阴显示代码
numtab: DB 0CFH,03H,5DH,5BH,93H,0DAH,0DEH,43H,0DFH,0DBH END。