论坛» 嵌入式开发» MCU

高工
2014-10-31 22:58 11楼
用示波器看主机发给18B20的信号是否正确,看18B20回的信号是否正确
院士
2014-10-31 23:30 12楼

一看你的延时就不专业。

出问题就再所难免。

延时要用定时器,这样才能产生精确延时

专家
2014-11-01 11:04 13楼
看延时吧,一般是延时出问题了。
高工
2014-11-01 12:50 14楼

同意楼上二位。

建议用逻辑分析仪测试下实际延时时间

助工
2014-11-01 18:37 15楼

这种情况十有八九是延时的问题,一般就算用软件计算出来的延时都要加个±几us才能达到合适的时序~

最准确的延时还是定时器和汇编

助工
2014-11-01 18:42 16楼

18B20只要时序不正确,基本显示就在哪儿了,给你分享个调试通过的!

Temp@12MHz.zip

高工
2014-11-05 11:16 17楼
时序图写的不对吧,看看是不是因为晶振原因导致的。我遇到过是因为该延时的地方延时的不准确,或者移植别人的程序的时候没有仔细修改过。郭天祥的那个程序我第一次用的时候貌似也有点问题。后来自己又写了写,小改了一下就好了。具体怎么搞的现在忘了。你仔细检查一下硬件和程序就好
工程师
2014-11-05 13:20 18楼
最近只能手机上网,不能给各位添加积分,改天一起添加积分
高工
2014-11-05 14:49 19楼
这个单总线通信,对于时序要求比较高,这个DS18B20本身不难,第一根据时序检查程序,延时部分重点检查,,然后就看硬件连接吧,就那么3个脚,仔细看看。 一般问题都是出现在时序上,如果确实没啥问题,就用proteus仿真试试吧
菜鸟
2014-12-03 18:18 20楼
  1. 好吧,大神给你解惑!读出初始85说明复位正确。用的STC是1T的吧,读的时候需要延时的时间不够。
  2. bit tempreadbit(void)//读1位函数
  3. {
  4. uint i;
  5. bit dat;
  6. ds=0;i++;//i++ 起延时作用
  7. ds=1;i++;i++; ---->这个时间不够!!加大
  8. dat=ds;
  9. i=8;while(i>0)i--;
  10. return(dat);
  11. }
  12. 还有就是每次读取最少需要60us间隔。温度转换需要几百毫秒也得注意。
共20条 2/2 1 2 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册]