社区
单片机/工控
帖子详情
DS18B20问题:温度跳变,比如从18直接跳23,然后又跳回,不知道如何解决?
老顽童
2009-12-21 11:37:59
也不知道是不是我转换频率高了?我2S转换一次。
...全文
3110
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)
ESP32 MicroPython玩转
DS
18
B20
温度
传感器:从接线到读取数据的保姆级避坑指南
本文详细介绍了如何使用ESP32和MicroPython驱动
DS
18
B20
温度
传感器,从硬件接线到软件配置的全过程。涵盖三种供电模式对比、常见
问题
排查及
解决
方案,特别针对One-Wire通信的优化技巧,帮助开发者快速实现稳定的
温度
监测系统。
基于PIC单片机与TC77的SPI
温度
监测系统设计与优化
在嵌入式系统开发中,SPI通信协议因其高速、全双工和简单的硬件接口,成为连接微控制器与各类传感器的核心技术。其工作原理基于主从设备间的同步串行数据传输,通过时钟、数据线和片选信号实现高效通信。这一技术价值在于为资源受限的嵌入式设备提供了稳定可靠的外设扩展能力,广泛应用于工业控制、环境监测和消费电子等领域。本文聚焦于SPI接口的典型应用——数字
温度
传感器TC77与PIC单片机的集成,深入解析其硬件连接、低功耗驱动开发及抗干扰设计,为构建高精度、低功耗的
温度
监测方案提供实践指导。
温度
监控为何是服务器基础设施的首要防线
环境
温度
是数据中心基础设施最基础的生命体征,其异常变化
直接
关联硬件可靠性、元器件寿命与系统稳定性。从半导体漏电流指数级增长,到电解电容加速老化,再到硬盘磁头悬浮失稳,
温度
失控引发的是物理层的‘慢性故障’而非瞬时宕机。因此,专业级温湿度监控并非锦上添花,而是实现基础设施可观测性的第一道防线——它将不可见的热力学风险转化为可量化、可告警、可追溯的数字信号。NetBotz等专用设备凭借高精度探头布放、毫秒级响应、本地化断网告警及视频取证能力,在真实生产环境中显著优于树莓派等通用方案,尤其适用于金融、医疗、SaaS
STM32串口DMA驱动HLW8032踩坑记:如何稳定读取电能数据并处理芯片异常
本文详细介绍了如何使用STM32串口DMA驱动HLW8032电能计量芯片,
解决
数据
跳
变
、校验失败等常见
问题
。通过DMA配置、数据帧解析优化及异常处理机制,实现稳定读取电能数据,适用于交流电管理控制系统等应用场景。
BMP581高精度气压传感器Arduino驱动详解
气压传感器是环境感知与高度测量的核心器件,其原理基于压阻效应或电容式微机械结构,将大气压力转换为可读电信号;高分辨率(如0.0156 Pa)依赖精密校准、
温度
补偿算法与低噪声硬件设计;技术价值体现在亚厘米级海拔分辨能力,显著提升无人机定高、微气象监测与结构健康诊断的可靠性;典型应用场景涵盖嵌入式高度计、IoT气象站及电池供电型便携设备;本库深度集成Bosch BMP5 API协议栈与Arduino生态,提供即插即用的C++硬件抽象层,并兼顾SPI/I²C双接口、多功耗模式及FreeRTOS兼容性,是BMP5
单片机/工控
27,522
社区成员
28,798
社区内容
发帖
与我相关
我的任务
单片机/工控
硬件/嵌入开发 单片机/工控
复制链接
扫一扫
分享
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章