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

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 编辑 5 x; @, h1 n; I* [
: A) W- u3 P% }8 D
手头备一块arduino uno,验证模块好坏使用!
: [, M: X! J# h$ \* b: {当然那18B20坏了只是都出来的温度是某个默认值:)
hsh506 回答时间:2015-2-3 09:55:24
一般都是时序问题,延时用time等硬件,不要用软件延时,否则软件修改,延时改变。
wamcncn 回答时间:2015-2-3 11:04:11
本帖最后由 wambob 于 2015-2-3 11:14 编辑 # H: D5 Y6 R9 F/ z( C4 e

+ k! Q- ^. E7 @9 C" Qunsigned char DS18B20_Rst(void)   //复位函数
" f7 A6 V: u% n# L- P; |: U! h. z# j{   6 G4 C6 y3 s  c) D. \8 F
    unsigned char retry = 0;
5 ^6 U3 H1 R% j" iDS18B20_out();     //设置GPIO输出
% l: t4 C1 P! _DS18B20_PIN_H;   //置1
% P0 P) d* f5 N! `DS18B20_PIN_L;
, ?- v+ O/ v7 _# I. d% bDelay_Us(500);    //延时
+ B$ l6 Y; m2 z* W6 MDS18B20_PIN_H; 3 }/ b6 n# |" k9 T: e
Delay_Us(30); . x* d* F3 U4 F/ x
    DS18B20_in();    //设置GPIO输入/ J! g8 W# ~4 c/ w# p
    while((DS18B20_IN )&& retry < 300)     //如果读到高电平,等待  调试前面都对,到这以下下出问题了,怎么修改程序也读不到18B20发出的低电平
5 w# ~% \6 b4 @0 z% L' l, G' [{    ) @) ^2 A: a# N
        retry ++;! C" f6 c/ l! K0 O$ k9 o. }
//        Delay_Us(1);
2 q+ _$ I. Z$ S5 \' l   }
+ e: j6 I' C4 x9 }! d' U" y9 vif(retry >=300)       //超时返回12 h8 H. P! s# S$ R

: y+ T7 ~, V' G, D9 S& ]  I  return 1;
# _0 Y# F$ K2 L9 [6 L+ I4 `- I. V     retry=0;; ^9 \/ X7 n% S# i
# a, N/ [9 G0 f0 `) @: `0 a
while(!(DS18B20_IN )&& retry < 300) //如果读到低电平,延时60-240US- \- j0 f) B6 D% r% K
    {
8 _& i( @+ \( @6 x. K        retry ++;8 H. e0 P. E' d. ?1 u. g$ W( m5 @
//        Delay_Us(1);
6 R  R; z& ?: O' N    }! v7 J* Q4 E) X
if(retry >= 300)                            //如果超时,返回18 i! @+ s' Q6 Y5 V' r
  return 1;$ X; }1 c5 H7 C2 i9 k! W# b3 c
, S7 a; L; K# u) t  I: C! x6 l1 ~
      return 0;1 W$ o6 r! k7 n
}
2 B3 ?+ c6 o. F- W0 H: m5 H; k5 z2 c7 D# Q
" o3 I& U& R4 K' _
在MAIN()       //检测是否复位
& Q6 z6 Y- r' p# R4 Q{
" ?/ [$ B; M) v1 G: ^( B9 ?      if(DS18B20_Rst()==0)                          // 结果总是返回1    .调试进入,发现#define DS18B20_IN            GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_2) 读输入总是为1,说明18B20 在MASTER 释放总线延时15-60US后没有发出低电平,.不要说18B20是坏的,用51单片机检测过,正常能读出温度并变化4 c: P: f( n6 U1 M5 a, ~
            
+ V- n( U2 ~0 y+ z/ s            GPIO_SetBits(GPIOA, GPIO_Pin_5);8 [8 g, L! H7 y' ^" G" v+ D
$ X. R2 t( X- p: ?$ t2 ]
}
7 G* f9 Z' f9 f% N+ Q7 e) r
木易-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:15
1 M4 y( D6 n7 ]' n一般都是读时序不对,读的延时要求非常高,时钟频率高了还好说,时钟频率低的话,多运行几句语句,DS18B20 ...

( O; L# z+ a  a- F% L. y7 s! N测试复位不通过
木易-357428 回答时间:2015-2-4 08:47:18
wambob 发表于 2015-2-3 17:55
8 X& n8 K0 ?# t1 r" z测试复位不通过

8 [/ t: A" t' ?6 w6 G复位时序要求的不严格,但你首先要确定线序对的,芯片是好的。最好用示波器或逻辑分析仪捕捉一下,看看是否有存在脉冲。

所属标签

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