你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

18B20都读不出数来?

[复制链接]
wamcncn 发布时间:2015-2-3 00:39
这学的,嵌入啊,你真为难我,读懂了时序也不见得能写出来.别人的都不靠谱,真正弄懂还得靠自己.,睡觉,眼看就快1点了
收藏 评论10 发布时间:2015-2-3 00:39

举报

10个回答
阳光_~~ 回答时间:2015-2-3 01:37:21
这个东西,用个示波器钩钩波形,就搞定了。时序对了,就不会读不出数据的。
shanji 回答时间:2015-2-3 09:13:09
通常是时序不对,对比下手册
wu1169668869 回答时间:2015-2-3 09:43:29
本帖最后由 wu1169668869 于 2015-2-3 09:44 编辑 . A$ {' S: j1 t* W3 L: |

5 w/ ~( h) l& m  l2 x$ F7 T2 X手头备一块arduino uno,验证模块好坏使用!
; v1 U" {6 y$ {, [- ^当然那18B20坏了只是都出来的温度是某个默认值:)
hsh506 回答时间:2015-2-3 09:55:24
一般都是时序问题,延时用time等硬件,不要用软件延时,否则软件修改,延时改变。
wamcncn 回答时间:2015-2-3 11:04:11
本帖最后由 wambob 于 2015-2-3 11:14 编辑 1 n: h6 g- r) B
8 \" e/ e4 v2 U. k! D% f/ i! d; D
unsigned char DS18B20_Rst(void)   //复位函数/ X* Z% [; o$ M% z- ~5 ?7 G* |' u
{   
+ q5 D9 [0 W  ?/ B; N& U, i  [    unsigned char retry = 0;
& I: b" I* ^# M+ |$ DDS18B20_out();     //设置GPIO输出
6 B* c% A9 w4 w3 @" L- dDS18B20_PIN_H;   //置1
7 |7 t% E* y7 k9 a" O! |8 `+ CDS18B20_PIN_L; / C  ?/ d" i$ y0 W; Z2 a4 D
Delay_Us(500);    //延时: J: k( V( i0 P* a7 ~* v0 R1 [3 ?5 W
DS18B20_PIN_H;
9 b- A+ T" K; w( bDelay_Us(30);
" f4 q( g, H6 N# n0 L# \7 J7 ?6 d    DS18B20_in();    //设置GPIO输入; i. _+ {9 n  Q+ w
    while((DS18B20_IN )&& retry < 300)     //如果读到高电平,等待  调试前面都对,到这以下下出问题了,怎么修改程序也读不到18B20发出的低电平1 F0 `1 [3 o9 ]" c7 m# o4 X+ O
{    8 n0 O9 |# [4 t7 E! f/ D0 X4 Y
        retry ++;) Y. T2 L1 S0 B. Z/ }% I  h
//        Delay_Us(1);
. Z& c) q+ V2 L   }8 v, g" P/ }# j9 s2 C$ ^
if(retry >=300)       //超时返回1) m/ M3 n6 k, b- Q

4 ?- B! e- z$ S% O: \  return 1; 3 I" D8 P7 A/ V. X
     retry=0;, z7 V8 E% s. C# q4 c
( n% F5 l0 V5 S5 U
while(!(DS18B20_IN )&& retry < 300) //如果读到低电平,延时60-240US! u6 @. ?& U" q2 n
    {. f% ^- A' S0 F! z: @8 `" n
        retry ++;
" e( _3 x! K6 z; b3 q//        Delay_Us(1);( X5 a5 C+ Q  |4 ?8 g0 _
    }0 b0 |( y9 s8 b4 E" v
if(retry >= 300)                            //如果超时,返回1. I% r0 Z! k1 M! h- G- G) T4 G
  return 1;
4 ^0 T& v" ?( W/ o0 y' S" ^* A7 X3 F# R- T5 G1 U( ~' J
      return 0;$ @+ |7 }) U# e, R1 e
}
3 I; ~" V% g, n5 g4 l
7 h5 K+ E/ j, ]& H7 D3 d/ ?- y/ u! R$ }( T
在MAIN()       //检测是否复位
3 j( z! r% }4 i, s; z% X! Z5 N{- f% O) ?# I- B- p' b# e" S7 X
      if(DS18B20_Rst()==0)                          // 结果总是返回1    .调试进入,发现#define DS18B20_IN            GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_2) 读输入总是为1,说明18B20 在MASTER 释放总线延时15-60US后没有发出低电平,.不要说18B20是坏的,用51单片机检测过,正常能读出温度并变化3 @( z! F! p  L
            
" ]$ r+ j4 s8 @" V. `* N0 A            GPIO_SetBits(GPIOA, GPIO_Pin_5);& h- _) n3 H. {3 v. ~
9 T% L, m# H: x
}
2 ~6 N. u1 E% }: Z* `
木易-357428 回答时间:2015-2-3 14:15:09
一般都是读时序不对,读的延时要求非常高,时钟频率高了还好说,时钟频率低的话,多运行几句语句,DS18B20的采样时间就过了。延时别搞什么硬件延时,中断不能太频繁,影响到了芯片的采样。
damiaa 回答时间:2015-2-3 14:21:02
按照时序去编成,检查的时候按照程序把时序画出来检查。IO切合多注意。
chendiand 回答时间:2015-2-3 14:46:22
注意时序就好了
wamcncn 回答时间:2015-2-3 17:55:33
木易-357428 发表于 2015-2-3 14:153 s2 w. o" @4 b0 F8 W, |0 t0 K
一般都是读时序不对,读的延时要求非常高,时钟频率高了还好说,时钟频率低的话,多运行几句语句,DS18B20 ...
2 ~% a! i: W' z) X2 P
测试复位不通过
木易-357428 回答时间:2015-2-4 08:47:18
wambob 发表于 2015-2-3 17:55# S! m3 }9 U4 }
测试复位不通过

. F5 f$ m2 x1 w# ~复位时序要求的不严格,但你首先要确定线序对的,芯片是好的。最好用示波器或逻辑分析仪捕捉一下,看看是否有存在脉冲。

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版