社区
单片机/工控
帖子详情
DS18B20问题:温度跳变,比如从18直接跳23,然后又跳回,不知道如何解决?
老顽童
2009-12-21 11:37:59
也不知道是不是我转换频率高了?我2S转换一次。
...全文
1708
26
打赏
收藏
DS18B20问题:温度跳变,比如从18直接跳23,然后又跳回,不知道如何解决?
也不知道是不是我转换频率高了?我2S转换一次。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
26 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
sim卡2
2010-08-05
打赏
举报
回复
我的也有跳变,1-15度这之间稳定,但是,但是15度时,显示32度,到了48度时,又显示64度!我怀疑是温度的计算出问题了!
kyzf
2009-12-23
打赏
举报
回复
楼主 能分享下吗?
你的DS18b20那些故障到底是什么问题? 怎么解决的? 谢谢哦
老顽童
2009-12-23
打赏
举报
回复
感谢各位帮助,已经解决。接分吧。哈哈
mrmou
2009-12-23
打赏
举报
回复
============================================================
tcdzyq
2009-12-22
打赏
举报
回复
可能:
1 温度确实在跳
2 时序不对
lyj2009
2009-12-22
打赏
举报
回复
楼主外挂了几个18B20? 如果只有一个,不是采样频率的问题,觉得可能是时序问题,可能程序被中断或者其它地方有BUG。
codesnail
2009-12-22
打赏
举报
回复
采样频率高一些
老顽童
2009-12-22
打赏
举报
回复
看了其他帖子,很多人提到国产假货和原厂的问题,不知道如何识别时原厂还试国产山寨货?
老顽童
2009-12-22
打赏
举报
回复
[Quote=引用 8 楼 kyzf 的回复:]
楼主首先 注意下: 读取温度时,对应的延时;另外可以考虑测量N次后,取平均值,再显示一次;
(N可以自由设定;比如测量5次,显示一次)
楼主可以看看:
http://www.unsp.com/app/html/200619181102.shtml
[/Quote]
谢谢你的提示,只是我想先从硬件或时序上解决。
kyzf
2009-12-22
打赏
举报
回复
楼主首先 注意下: 读取温度时,对应的延时;另外可以考虑测量N次后,取平均值,再显示一次;
(N可以自由设定;比如测量5次,显示一次)
楼主可以看看:
http://www.unsp.com/app/html/200619181102.shtml
老顽童
2009-12-22
打赏
举报
回复
谢谢楼上各位,我先去测试下。
qzf368
2009-12-22
打赏
举报
回复
读的时候要关中断
baizi258
2009-12-22
打赏
举报
回复
#pragma disable
#pragma rb(0)
对DS18B20读写时的函数加上关中断、选寄存器组等加预处理指令,可以看一下时序的波形是否正确;
老顽童
2009-12-22
打赏
举报
回复
//DS18B20的读时序
//对于DS18B20的读时序分为读0时序和读1时序两个过程。
//对于DS18B20的读时隙是从主机把单总线拉低之后,在
//15us之内就得释放单总线,以让DS18B20把数据传输到
//单总线上。DS18B20在完成一个读时序过程,至少需要
//60us才能完成。
uchar DS18B20_read()
{
uchar i,in_data,k;
in_data=0;
EA=0;
for(i=0;i<8;i++) //串行发送数据
{
in_data+=in_data;//循环左移1位
DQ=0;
//NOP;
DQ=1;
NOP;
NOP;
NOP;
k=DQ; //读DQ端
if(k==1) //读到的数据是1
{
in_data=in_data|0x01;
}
else
{
in_data=in_data|0x00;
}
NOP;
NOP;
NOP;
NOP;
//sdelay(n)=10+n*7 us
sdelay(6); //延时45us(总60us)
DQ=1;
}
EA=1;
return(in_data);
}
老顽童
2009-12-22
打赏
举报
回复
//DS18B20的写时序
//对于DS18B20的写时序仍然分为写0时序和写1时序两个过程。
//对于DS18B20写0时序和写1时序的要求不同,当要写0时序时,
//单总线要被拉低至少60us,保证DS18B20能够在15us到45us之
//间能够正确地采样IO总线上的“0”电平,当要写1时序时,
//单总线被拉低之后,在15us之内就得释放单总线。
void DS18B20_write(uchar in_data) //写DS18B20的子程序(有具体的时序要求)
{
uchar i,out_data,k;
out_data=in_data;
EA=0;
for(i=0;i<8;i++) //串行发送数据
{
DQ=0;
k=out_data&0x01;
if(k==0x01) //判断数据 写1
{
DQ=1;
}
else //写0
{
DQ=0;
}
sdelay(10); //延时80us(60-120us)
DQ=1;
out_data>>=1; //循环左移1位
}
EA=1;
}
老顽童
2009-12-22
打赏
举报
回复
void Get_Temper(void)
{
uchar T_L,T_H;
DsTemp=0;
DS18B20_init(); //DS18B20初始化
NOP;
if(DS18B20) //判断DS1820是否存在?若DS18B20不存在则返回
{
DsTemp=0;
DS18B20_write(0xcc); // 跳过ROM匹配
DS18B20_write(0x44); //发出温度转换命令
//等待转换结束
while(DQ==0) ldelay(1);
DS18B20_init(); //DS18B20初始化
if(DS18B20) //判断DS1820是否存在?若DS18B20不存在则返回
{
DS18B20_write(0xcc);//跳过ROM匹配
DS18B20_write(0xbe);//发出读温度命令
T_L=DS18B20_read(); //数据读出
T_H=DS18B20_read();
NOP;
T_sign=T_H>0x80?1:0; //温度符号
T_H=T_H&0x07;
NOP;
DsTemp=(T_H*256+T_L)>>4; //温度转换常数
DsTempF=((T_L&0x0F)*10)>>4;
}
}
}
mjwang
2009-12-22
打赏
举报
回复
你在读温度时序中有没有被其他程序中断了,比如用了RTOS,或是有频繁的中断程序,我以前在一个系统里想用,因为有RTOS,温度总是跳,后来才知道DS18B20对时序要求十分严格,在读的期间不能被打断,所以后来选择使用其他芯片了。
空影
2009-12-22
打赏
举报
回复
2s的采用周期已经足够转换时间了,应该是代码的问题,建议楼主把代码传来看下
宇帆
2009-12-22
打赏
举报
回复
估计时序哪里没有处理好,是采集过来的数据有问题呢?还是你显示处理那有问题呢?这要看你代码了
lbing7
2009-12-22
打赏
举报
回复
如果,不能确定自己的延时能超过DS18B20的转换时间的话
那就读18B20的状态,然后确认它是否轮换完成
在读数据的时候如果没有把握
就读CRC出来自己算一下。。。
什么跳变什么的
这个很可能是你的总线协议的问题
本来就是数字电路读寄存器,怎么可能会乱变呢?
呵呵
加载更多回复(6)
通过VHDL编程实现FPGA芯片与
DS
18
B20
温度
传感器的数据传输
通过VHDL编程实现FPGA芯片与
DS
18
B20
温度
传感器的数据传输
单片机课程设计之基于
DS
18
B20
的多点
温度
测量系统的设计.doc
单片机使用系统设计 课 题:基于
DS
18
B20
的多点
温度
测量系统的设计 姓 名: 班 级: 学 号: 指导老师: 日 期: 引 言 在粮库测温系统、冷库测温系统、智能化建筑控制系统、中央空调系统等多种系统中都 需要多点
温度
测量系统。因此,多点
温度
测量技术实现尤为重要。美国Dallas公司推出 的数字
温度
传感器DSl8B20,电源供电范围在3.0~5.5V;
温度
测量范围为- 55~+125 ;具有独特的单总线接口,仅需要占用一个通用I/O端口即可完成和微处理器 的通信;在- 10~+85
温度
范围内具有±0.5 精度;用户可编程设定9~12位的分辨率。以上特性使得 DSl8B20非常适用于构建高精度、多点
温度
测量系统。
DS
18
B20
简介 DSl8B20是美国Dallas半导体公司推出的一种智能数字
温度
传感器。和传统的热敏电阻相 比,它能够
直接
读出被测
温度
,并且可根据实际要求通过编程实现9~12位的数字值读数 方式;可以分别在93.75ms和750 ms内完成9位和12位的数字量;从
DS
18
B20
读出信息或写入
DS
18
B20
信息仅需要1根口线(单 线接口);
温度
变换功率来源于数据总线,总线本身也可以向所挂接的
DS
18
B20
供电,而 无需额外电源。使用
DS
18
B20
可使系统结构更趋简单,可靠性更高。 1系统硬件设计 由
DS
18
B20
和Atmel公司推出的单片机AT89C51以及相关外围电路组成的高精度、多点
温度
测量系统的结构框图如图1所示。系统采用8片
DS
18
B20
构成小型
温度
传感器网络[3],通 过并行连接方式连接至单片机的通用I/O端口。单片机获得
温度
信息后,通过特定的算法 ,将处理后的
温度
信息通过LED显示出来,同时通过串行口送上位机处理。
DS
18
B20
内部均有一个独立的64位序列号,单片机通过序列号可以对一条总线上的多支D S
18
B20进行控制,读取它们的
温度
。但是,要完成这个操作,软件设计比较复杂,同时 存在一个缺点——速度太慢。无法适用于一些实时性要求高的测温场合。所以本次设计采 取一种利用单片机的并口,同步快速读取8支
DS
18
B20
的方法。 2系统软件设计 2.1 并行同步快速读取8支
DS
18
B20
的方法 对于一支
DS
18
B20
,我们要输出或输入各类数据时,可以采用位寻址,比如:sbit DQ=P3^3; DQ=0; DQ=1; 而对于8支
DS
18
B20
,如果还采用位寻址的方法,采用单总线,通过查询序列号依次读取 ,程序就非常复杂,而且速度会大大减慢,所以将位寻址扩展为字节寻址,比如: #define DQ P3; DQ=0x00; DQ=0xff; 即可一次输出或输入8个位数据,从而达到同步读取的目的。 2.2 系统的
温度
合成处理 采用上述方法一次读取8支
DS
18
B20
的时间不超过1秒,但读取的数据在RAM中并不顺序排 列的。必须用软件合成处理,才能得到所需要的
温度
值。如表- 1所示,纵向排列的是存放每次读取数据的Buf,而横向才是我们需要的
温度
值,此时设计 一个将纵向数据转为横向
温度
的程序,连续执行两次,就可以将
DS
18
B20
的高和低字节全 部合成标准的
温度
数据。 2.3 系统软件流程图 主程序执行流程如图2所示,主程序先对各
DS
18
B20
进行初始化,然后重复调用写命令和 读数据模块,最后将数据处理后送入LED显示。 2. 4 系统电路图 3系统仿真 Proteus软件是Labcenter公司的一款电路设计和仿真软件,它包括ISIS、ARES等软件模 块,ARES模块主要用来完成PCB的设计,而ISIS模块用来完成电路原理图的绘制和仿真。 Proteus的软件仿真基于VSM技术,它和其他软件最大的不同也是最大的优势就在于它能 仿真大量的单片机芯片,比如MCS- 51系列、PIC系列等等,以及单片机外围电路,比如键盘、LED、LCD等等。通过Proteus 软件的使用我们能够轻易地获得一个功能齐全、实用方便的单片机实验环境。 本设计的核心部分为八点
温度
数据的快速准确读取,完成电路设计和软件编程后,将程 序在KEIL下编译,装入单片机,进行仿真,可以看到,同步快速多点
温度
测量得到了实 现。仿真中的一个画面如下面图3中的效果所示,此时采集的是第5通路的测量
温度
。 4系统运行和数据分析 根据系统软件和硬件设计方案搭建实际系统电路,依次采集八路
温度
测量数据,并且在 LED数码管上显示所测
温度
,同时和现场
温度
计测量值进行比较,系统运行结果如下,见 表-2: 表-2 传感器和
温度
计数据对照 测量结果数据和
温度
计
直接
测量吻合,符合仿真结果,本系统的测量范围为0-99 ,DS
18
B20数字值读取位数为8位,精确到1 ,满足日常测量使用。另外可以通过改变DS
18
B2 0数字值读取位数提高精度,也可以根据实际使用要求扩大量程。在
基于FPGA的
温度
显示(
ds
18
b20
).zip
本资料归于网络整理,仅供参考学习用。如有侵权,请联系删除!! qq:1391074994 1. 资料都是有论文和程序的,程序大部分是quartus的工程,有几个是ise或者vivado的工程,代码文件就是里面的V文件。 2. 我收集的每个小项目都会开源出来,欢迎关注我的博客并下载学习。 3. 每个项目的实际的项目要求和实现的现象我就不挨个去描述了,太多了!!40多个小项目。(一个包里面只有一个小项目哈) 4. 有的项目可能会有多个程序,因为用的代码有点差异,比如密码锁,就会分显示的数码管的显示个数的不同以及用的是verilog个vhdl 的差别: 5. 报告的话博客专栏里面只是展示了一小部分。链接:https://blog.csdn.net/weixin_44830487/category_10987396.html?spm=1001.2014.3001.5482
第七章 畅学多功能实验箱底板
DS
18
B20
接口模块资源详解
两路
DS
18
B20
接口 2路
DS
18
B20
接口,可以外接
温度
传感器测量
温度
。1) 原理图 2) 实物图 3) 接口说明
温度
传感器的插口为U5、U7,共两路
温度
传感器接口,留接口能更方便外接传感器,比如外接探头式的
DS
18
B20
。模块控制接口为JP35,接MCU。4) 实现现象
DS
18
B20
_moodlcb_dsb8b20防水吗?_terminal_chuanganqi_
防水
DS
18
B20
温度
传感器和Arduino结合可以用到很多地方,比如土壤
温度
检测、热水箱
温度
控制等等,但是防水的
DS
18
B20
温度
传感器必须还要接一个上拉电阻才能使用,为此我们设计的Plugable Terminal转换器就派上用场了。 Plugable Terminal转接器数字口增加了上拉电阻,使用
跳
线帽切换使用,这样可以
直接
将防水
DS
18
B20
温度
传感器连接到Arduino上了。
单片机/工控
27,373
社区成员
28,771
社区内容
发帖
与我相关
我的任务
单片机/工控
硬件/嵌入开发 单片机/工控
复制链接
扫一扫
分享
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章