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

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 编辑
1 [0 J) c, K( ?5 G6 T5 h' H  T. a& _( E& D) S1 [
手头备一块arduino uno,验证模块好坏使用!9 Y  }/ J3 p4 ^/ D- {
当然那18B20坏了只是都出来的温度是某个默认值:)
hsh506 回答时间:2015-2-3 09:55:24
一般都是时序问题,延时用time等硬件,不要用软件延时,否则软件修改,延时改变。
wamcncn 回答时间:2015-2-3 11:04:11
本帖最后由 wambob 于 2015-2-3 11:14 编辑 8 c) N# E5 V6 z: ~2 p! A8 i7 ^! A! F  ]
( Y! t# L. z# l+ r% A
unsigned char DS18B20_Rst(void)   //复位函数
7 N; F) x) Q$ Y{   8 e8 {, t! q% |: v
    unsigned char retry = 0;5 R8 I( n/ N9 l" s
DS18B20_out();     //设置GPIO输出
, J0 P! `8 A& ZDS18B20_PIN_H;   //置1
5 Q" `; g7 G: [- `! [DS18B20_PIN_L;
' ~; e( i3 l: n8 D0 E- E) ODelay_Us(500);    //延时
6 P. u) N) g* f9 @' X7 e- s1 L1 `DS18B20_PIN_H; # I* w) b! V5 n& H/ Z7 o: \
Delay_Us(30); ' ~( Q+ c  S4 g! F3 L! ~% A
    DS18B20_in();    //设置GPIO输入# K% @. L5 N9 y" |" E) S
    while((DS18B20_IN )&& retry < 300)     //如果读到高电平,等待  调试前面都对,到这以下下出问题了,怎么修改程序也读不到18B20发出的低电平0 I0 \) r8 X) \% j4 s
{   
  T3 h  G6 b3 `. f, R3 A        retry ++;
" K5 [2 B  e2 W" L/ Z- i' U//        Delay_Us(1);: r  |0 y# c5 I) I; L+ ]. D4 d  J" k+ S
   }/ Y; z! i* I$ [5 U: X
if(retry >=300)       //超时返回1
' H* j, H1 [6 b6 C8 v! H- Q3 `0 Q. }% ^! t7 ~: E
  return 1; * D0 t- L# b- _% D$ y! s& H
     retry=0;" {( C. e& U: n" n6 p7 l; ~, l
/ E* M  `' o0 M4 ]; i7 X& F( q
while(!(DS18B20_IN )&& retry < 300) //如果读到低电平,延时60-240US
. U/ ?/ _& s$ t% s( }% I, `    {! W. O( _& ~2 x
        retry ++;3 `2 t0 K) u. Q2 h5 s# u6 j
//        Delay_Us(1);+ l7 J- Z+ C8 j' }: f
    }
1 z" [0 H' g' q/ wif(retry >= 300)                            //如果超时,返回1
+ ]% [0 [. a( x) u& F  return 1;- J. s/ \- E! [0 l+ n9 q; u' ?

* X7 I1 j) Z4 W% V" [      return 0;0 P- _- N6 P( O8 X* Q
}$ c! Q  \7 @% D8 p* o
3 p$ ^% c3 P5 u
2 q0 C8 g7 r! |) C" ]( b6 L( N3 s
在MAIN()       //检测是否复位
/ e* X2 U' k. C4 v9 h{  ]! B1 O/ n/ U
      if(DS18B20_Rst()==0)                          // 结果总是返回1    .调试进入,发现#define DS18B20_IN            GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_2) 读输入总是为1,说明18B20 在MASTER 释放总线延时15-60US后没有发出低电平,.不要说18B20是坏的,用51单片机检测过,正常能读出温度并变化) }6 h4 p$ W3 C  ]1 ^/ j8 B: h
            
& X  m+ Y, z; l4 {6 g* V2 h1 y- F            GPIO_SetBits(GPIOA, GPIO_Pin_5);
& s4 Y% F  I6 d% w. \2 D6 n5 F" J$ p
4 l( `8 }, y* Z! Z% {$ K% _/ y}
* \' w! W+ E9 b/ u  H& m# v0 l
木易-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
, o2 b3 b0 R) C* }) A+ p一般都是读时序不对,读的延时要求非常高,时钟频率高了还好说,时钟频率低的话,多运行几句语句,DS18B20 ...
- @& z/ `8 X7 v0 b
测试复位不通过
木易-357428 回答时间:2015-2-4 08:47:18
wambob 发表于 2015-2-3 17:55
+ z9 y" O) v6 x& O6 Y, Y- d测试复位不通过

7 s+ d; Y& F  I6 w% S* F& p! }复位时序要求的不严格,但你首先要确定线序对的,芯片是好的。最好用示波器或逻辑分析仪捕捉一下,看看是否有存在脉冲。
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版