社区
单片机/工控
帖子详情
DS18B20问题:温度跳变,比如从18直接跳23,然后又跳回,不知道如何解决?
老顽童
2009-12-21 11:37:59
也不知道是不是我转换频率高了?我2S转换一次。
...全文
3141
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)
Pico
温度
记录入门:用内部Flash实现断电不丢数
MicroPython文件系统是嵌入式设备持久化存储的基础能力,其核心在于理解Flash的擦写机制、缓存策略与同步原理。RP2040芯片内置的2MB QSPI Flash被MicroPython映射为/flex目录,支持标准Python文件操作,但需配合uos.sync()确保数据真正落盘,避免断电丢失。该方案规避了SD卡供电敏感、SPI Flash驱动复杂等工程痛点,特别适合
DS
18
B20
等单总线传感器在农业监测、工业巡检等离线场景下的长期温湿度数据记录,兼顾可靠性、兼容性与低门槛部署。
ESP32 MicroPython玩转
DS
18
B20
温度
传感器:从接线到读取数据的保姆级避坑指南
本文详细介绍了如何使用ESP32和MicroPython驱动
DS
18
B20
温度
传感器,从硬件接线到软件配置的全过程。涵盖三种供电模式对比、常见
问题
排查及
解决
方案,特别针对One-Wire通信的优化技巧,帮助开发者快速实现稳定的
温度
监测系统。
MicroPython驱动MY
18
E20:单总线时序与跨平台可靠实现
单总线传感器是嵌入式系统中低引脚数
温度
采集的关键方案,其核心在于精确的物理层时序控制与协议层状态机设计。MY
18
E20作为
DS
18
B20
的超低功耗替代型号,虽兼容1-Wire电气规范,但在
温度
转换触发机制、CRC校验依赖性及寄生供电强上拉要求等关键环节存在显著差异。这些差异
直接
决定电池供电节点在低温、长线缆或高噪声场景下的长期可靠性。本文聚焦MicroPython生态下MY
18
E20的深度适配,覆盖PIO纳秒级时序重构、忙信号动态检测、位运算CRC8实现及跨MCU平台驱动封装,为环境监测、工业传感等对稳定性
树莓派Pico与MicroPython
温度
监测系统:从传感器选型到数据采集实战
嵌入式系统开发中,传感器数据采集是连接物理世界与数字世界的核心技术。其原理是通过微控制器的模拟或数字接口,将
温度
等物理量转换为可处理的电信号。这项技术的价值在于为物联网、环境监控和智能设备提供了实时感知能力。在应用场景上,它广泛用于智能家居温控、工业设备过热预警以及农业大棚监测等领域。本文以树莓派Pico微控制器和MicroPython编程语言为平台,深入探讨了
温度
监测系统的构建。通过分析模拟传感器与数字传感器的差异,并结合
DS
18
B20
等热词设备,详细讲解了硬件连接、驱动编写以及数据滤波等工程实践。项目还
Pico文件系统与
DS
18
B20
数据记录实战指南
MicroPython嵌入式开发中,文件系统操作与传感器数据采集是两大基础能力。理解FAT文件系统在资源受限设备上的运行原理,掌握USB双模(MSD/CDC)切换机制,是实现稳定存储的前提;而
DS
18
B20
凭借1-Wire协议、寄生供电和硬件CRC校验,在低功耗、少引脚的RP2040平台上展现出远超DHT22等传感器的可靠性。本文聚焦树莓派Pico平台,详解VfsFat驱动配置、原子写入、日志轮转、SD卡挂载及断电保护等工程实践要点,覆盖从‘写不进文件’到‘30天无人值守稳定记录’的全链路技术闭环,适用于物
单片机/工控
27,522
社区成员
28,798
社区内容
发帖
与我相关
我的任务
单片机/工控
硬件/嵌入开发 单片机/工控
复制链接
扫一扫
分享
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章