一.ds18b20特点
ds18b20 数字温度计提供12位(二进制)温度读数的数字型传感器。传感器仅需要单总线接口与cpu连接,实现信号送入 ds18b20 或从 ds18b20 送出。传感器内部框图如下:
ds18b20内部框图
ds18b20的电源可以由数据线本身提供(如框图所示),可不需要再接外部电源,因此从cpu到ds18b20仅需一条数据线和地线。内部的64位rom 只读存储器,用于存放ds18b20 id编码,其前8位是单线系列编码(ds18b20的编码是19h),后面48位是芯片唯一的序列号,最后8位是以上56位的crc码(冗余校验)。数据在出产时厂家已设置好,用户不可更改。ram 数据暂存器,用于内部计算和数据存取,数据在掉电后丢失,ds18b20共9个字节ram,每个字节为8位。
ds18b20内部ram图
第1、2个字节是温度转换后的数据值信息,第3、4个字节是用户eeprom(常用于温度报警值储存)的镜像。在上电复位时其值将被刷新。第5个字节则是用户第3个eeprom的镜像。第6、7、8个字节为计数寄存器,是为了让用户得到更高的温度分辨率而设计的,同样也是内部温度转换、计算的暂存单元。第9个字节为前8个字节的crc码。eeprom 非易失性记忆体,用于存放长期需要保存的数据,上下限温度报警值和校验数据,ds18b20共3位eeprom,并在ram都存在镜像,以方便用户操作。
二.ds18b20连接图
ds18b20电源连接方式有两种,可通过数据线供电或者电源引脚直接供电;此外,无论哪种连接方式,数据线都需要外置4.7k的上拉电阻。
数据线供电的连接方式
外部电源供电的连接方式
三.ds18b20控制时序分析
1.复位时序
时序见图,主机总线发送一复位脉冲(最短为 480us,最长960us的低电平信号);接着主机将总线拉到高电平,释放总线并进入引脚接收状态;ds18b20 在检测到总线的上升沿之后等待15-60us,接着ds18b20发出存在脉冲(低电平持续 60-240 us) 。主机总线检测到低电平时间在140us内,则检测到ds18b20的应答。
//复位ds18b20void ds18b20_rst(void) { ds18b20_io_out(); //set io 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 pa0 input while (ds18b20_dq_in&&retry=200)return 1; else retry=0; while (!ds18b20_dq_in&&retry=240)return 1; return 0;}2.写时序
当主机总线从高拉至低电平时就产生写时间隙,见图时序图,从下降沿开始15us之内应将所需写的位送到总线上,ds18b20在15-60us间对总线采样,若低电平写入的位是0,若高电平,则写入的位是1,连续写入位数的间隙应大于1us。
//写一个字节到ds18b20//dat:要写入的字节void ds18b20_write_byte(u8 dat) { u8 j; u8 testb; ds18b20_io_out();//set io output; for (j=1;j>1; if (testb) { ds18b20_dq_out=0;// 写入1 delay_us(2); ds18b20_dq_out=1; delay_us(60); } else { ds18b20_dq_out=0;// 写入0 delay_us(60); ds18b20_dq_out=1; delay_us(2); } }}3.读时序
主机总线从高拉至低电平时,总线只须保持低电平1us以上后,将总线拉高,产生读时间隙,如图:
读时间在trc后到15us内有效,也就是说 t z 时刻前主机必须完成读位,并在 tinit后的 60us ~ 120 us内释放总线。主机引脚读取总线状态,若低电平读取的位是0,若高电平,则读取的位是1,连续读取位数的间隙应大于1us。
//从ds18b20读取一个位//返回值:1/0u8 ds18b20_read_bit(void) // read one bit{ u8 data; ds18b20_io_out();//set io output ds18b20_dq_out=0; delay_us(2); ds18b20_dq_out=1; ds18b20_io_in();//set io input delay_us(12); if(ds18b20_dq_in)data=1; else data=0; delay_us(50); return data;}//从ds18b20读取一个字节//返回值:读到的数据u8 ds18b20_read_byte(void) // read one byte{ u8 i,j,dat; dat=0; for (i=1;i<=8;i++) { j=ds18b20_read_bit(); dat=(j< >1); } return dat;}4.读取ds18b20温度值
ds18b20读取温度值步骤如下,其中单个传感器无需匹配rom,所以程序中跳过匹配rom。
//从ds18b20得到温度值//精度:0.1c//返回值:温度值 (-550~1250)short ds18b20_get_temp(void){ u8 temp; u8 tl,th; short tem; ds18b20_start (); // ds1820 开始转换 ds18b20_rst(); ds18b20_check(); ds18b20_write_byte(0xcc);// 跳过匹配rom ds18b20_write_byte(0xbe);// 转换 tl=ds18b20_read_byte(); // lsb th=ds18b20_read_byte(); // msb if(th >7) { 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; }
LED电子显示屏的组成以及关键技术介绍
小智AI法官审判案件,可向人自动发问
5G大杀器“果核1.0”OpenUPF一体机正式发布
实现无辐辏调节冲突的体全息波导AR 3D显示
减速器结构设计有哪四大禁忌值得注意!!
DS18B20 数字温度计特点
公共云与私有云的区别及应用
联想K5Note评测 续航和性价比非常出色
小米衰落了? 红米Note4X发布小米Note3曝光
使用C++创建传感器接口
RFID在制造业中的应用场景以及某些案例的分析
IGBT在新能源电动汽车中的应用全面解析
就华为目前的情况来看预订情况比较火爆,未来发售后有可能要加价?
AR远程协助和维护如何应用在工业领域
小米MIX/小米Note 2/小米5S/小米5S Plus对比评测
基于TMS320DM6437数字媒体处理器实现高级驾驶员辅助系统的设计
聊聊MBD开发流程
安费诺先进传感器推出IPT2000压力变送器
总投资65亿元,温州比亚迪新能源动力电池项目开工
传三星要自行研发GPU 自研GPU的好处是什么