打印

ds18b20温度传感器时序问题,请教大家

[复制链接]
5697|20
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 时间啊 于 2013-4-10 22:57 编辑

1,51上电各端口默认高电平吗?我用的是STC89C52RC。2,ds18b20数据端口有个上拉电阻,作用是什么?是提供电流吧?3,一个端口加上拉电阻后,这个端口没事儿的时候都是高电平。这句话是不是这样理解:在不对端口做任何操作的情况下,且51上电默认是高电平的情况下,才是这样。4,18b20时序:初始化,主芯片先把端口从高拉到低,持续480到960us,然后主芯片再拉高电平持续15到60us,然后等待,读取18b20的反馈信号。我看英文datasheet说,持续那15到60us是resistor pullup,感觉西方人说话思维奇怪,搞的跟数据线上没人管了似的是由于上拉电阻,强制把电平拉高的,明明是程序主动拉高的。看感觉西方的datasheet词不达意,还是我的错误思维?问题可笑,望耐心解释。

相关帖子

沙发
huangxz| | 2013-4-10 23:48 | 只看该作者
在touch_present的时候,拉低480us是主机拉的,然后主机变成输入状态,总线由上拉电阻拉高,如果存在ds18b20则在15us以后会有ds18b20拉低,所以楼主的说法是有误的,one-wire是ibutton的规范接口,ds18b20只是用one-wire的一种芯片而已,希望楼主要使用one-wire接口,首先要理解one-wire协议

使用特权

评论回复
板凳
时间啊|  楼主 | 2013-4-11 08:14 | 只看该作者
huangxz 发表于 2013-4-10 23:48
在touch_present的时候,拉低480us是主机拉的,然后主机变成输入状态,总线由上拉电阻拉高,如果存在ds18b20则 ...

谢谢。还有一事不明,主机拉低480us后,主机变成输入状态,怎么理解?是不是要读引脚数据,主机得把电平拉高?总线由上拉电阻拉高这句话好像暗示了电平拉高是由电阻完成的?我理解是由主机和电阻一起完成的,而且主机占主导地位,因为主机若要输出低电平,上拉电阻无论如何拉不高电平的,上拉电阻就是起到了增大电流的作用。我理解对吗?有点较真了。

使用特权

评论回复
地板
huangxz| | 2013-4-11 10:26 | 只看该作者
时间啊 发表于 2013-4-11 08:14
谢谢。还有一事不明,主机拉低480us后,主机变成输入状态,怎么理解?是不是要读引脚数据,主机得把电平 ...

(1)主机变成输入状态并不一定是读取引脚数据,而是把主机的IO方向设为输入,此时相当于悬空,所以one-wire完全由电阻拉高,与主机无关
(2)如果主机输出低电平,则上拉电阻也无法把电平拉高


黑粗线代表主机,灰粗线代表器件
黑西线代表上拉


使用特权

评论回复
5
时间啊|  楼主 | 2013-4-11 11:49 | 只看该作者
huangxz 发表于 2013-4-11 10:26
(1)主机变成输入状态并不一定是读取引脚数据,而是把主机的IO方向设为输入,此时相当于悬空,所以one-wire完 ...

你好,非常感谢,我在用C编程,还没用汇编,程序上显示那个端口先拉低480us再赋值为1,赋值为1这个动作目的是把IO设置为输入状态吗?一般说来C程序可以使端口拉低也可以拉高,那拉高这个行为就是代表了端口改为输入态吗?做led实验时,我的小灯是共阳的,连在P0口上,P0有上拉电阻,当端口赋值为高时,是不是端口也在悬空输入状态,总线上的电平也由上拉电阻拉高,所以小灯灭了?

使用特权

评论回复
6
huangxz| | 2013-4-11 13:57 | 只看该作者
时间啊 发表于 2013-4-11 11:49
你好,非常感谢,我在用C编程,还没用汇编,程序上显示那个端口先拉低480us再赋值为1,赋值为1这个动作目 ...

据了解,51单片机的p0口输出形式可以是OC的,所以当输出高电平是与输入状态是等效的,我前面是以avr,pic的结构来说明,对于51,楼主还是看下手册,具体情况还是以数据手册为准。

这是网上的一个例子。

使用特权

评论回复
7
时间啊|  楼主 | 2013-4-11 14:38 | 只看该作者
本帖最后由 时间啊 于 2013-4-11 14:39 编辑
huangxz 发表于 2013-4-11 13:57
据了解,51单片机的p0口输出形式可以是OC的,所以当输出高电平是与输入状态是等效的,我前面是以avr,pic的结 ...


谢谢,查阅资料,显示P1P2P3为准双向口,写入1时可用作输入。是不是可以这样理解,写1既可以用作输入,其本身又是一种输出高电平的状态?如果正确,那关于18b20的问题,我用的是P3口,那块芯片怎么知道他是在输入态准备接收输入还是处于平常主动拉高电平的状态?在程序上,不管是设置其为输入态还是主动拉高电平,都是一句话P3_2=1。这牵扯到到底是主机芯片拉高了电平,还是因为这条线现在处于浮空输入态,单靠上拉电阻拉高了电平?望指教。

使用特权

评论回复
8
huangxz| | 2013-4-11 14:46 | 只看该作者
因为这条线现在处于浮空输入态,单靠上拉电阻拉高了电

使用特权

评论回复
9
liusensen| | 2013-4-11 14:50 | 只看该作者
浮空输入态   

使用特权

评论回复
10
时间啊|  楼主 | 2013-4-11 15:14 | 只看该作者
huangxz 发表于 2013-4-11 14:46
因为这条线现在处于浮空输入态,单靠上拉电阻拉高了电

大哥,感谢不厌其烦的指导,但是小弟比较笨,还是不甚明白,我看了P3口的结构,向寄存器写入1时端口会为高电平,为什么会是悬空态?加了上拉电阻就变成悬空态了?

使用特权

评论回复
11
huangxz| | 2013-4-11 16:03 | 只看该作者
时间啊 发表于 2013-4-11 15:14
大哥,感谢不厌其烦的指导,但是小弟比较笨,还是不甚明白,我看了P3口的结构,向寄存器写入1时端口会为 ...

看手册吧,因为我这没有51的资料,你看io口的结构就可以看出来的

使用特权

评论回复
12
合肥优视科技| | 2013-4-11 16:56 | 只看该作者
:D

使用特权

评论回复
13
时间啊|  楼主 | 2013-4-11 16:57 | 只看该作者
liusensen 发表于 2013-4-11 14:50
浮空输入态

你好,非常感谢,假如单片机P3口要读引脚的话得向寄存器写1,这会导致端口高电平。ds18b20时序是主机先拉低480到960us,然后这条线上的上拉电阻又把线上电平拉高,然后传感器又回复一个低电平信号。现在的问题是  主机拉高是为了读,拉高这个动作是主机做出的,但是datasheet上说这个动作是resistor pullup,好像暗示是上拉电阻做出的,和主机没关系。实在弄不清楚了,望指教。

使用特权

评论回复
14
lark100| | 2013-4-11 23:41 | 只看该作者
数字电路有三种状态:高电平、低电平、和高阻状态,有些应用场合不希望出现高阻状态,可以通过上拉电阻或下拉电阻的方式使处于稳定状态,具体视设计要求而定!
一般说的是I/O端口,有的可以设置,有的不可以设置,有的是内置,有的是需要外接,I/O端口的输出类似于一个三极管的C,当C接通过一个电阻和电源连接在一起的时候,该电阻成为上拉电阻,也就是说,该端口正常时为高电平;C通过一个电阻和地连接在一起的时候,该电阻称为下拉电阻。

上拉电阻是用来解决总线驱动能力不足时提供电流的问题的。一般说法是上拉增大电流,下拉电阻是用来吸收电流。

上拉就是将不确定的信号通过一个电阻嵌位在高电平,电阻同时起限流作用,1TTL驱动CMOS时,如果TTL输出最低高电平低于CMOS最低高电平时,提高输出高电平值2 OC门必须加上拉,提高电平值3 加大输出的驱动能力(单片机较常用)4 CMOS芯片中(特别是门的芯片),为防静电干扰,不用的引脚也不悬空,一般上拉,降低阻抗,提供泄荷通路5 提高输出电平,提高芯片输入信号的噪声容限,增强抗干扰6 提高总线抗电磁能力,空脚易受电磁干扰7 长线传输中加上拉,是阻抗匹配抑制反射干扰上拉是对器件注入电流,下拉是输出电流,弱强只是上拉电阻的阻值不同,没有什么严格区分,对于非集电极(或漏极)开路输出型电路(如普通门电路)提升电流和电压的能力是有限的,上拉电阻的功能主要是为集电极开路输出型电路输出电流通道。上拉电阻:   就是从电源高电平引出的电阻接到输出   1,如果电平用OC(集电极开路,TTL)或OD(漏极开路,CMOS)输出,那么不用上拉电阻是不能工作的, 这个很容易理解,管子没有电源就不能输出高电平了。   2,如果输出电流比较大,输出的电平就会降低(电路中已经有了一个上拉电阻,但是电阻太大,压降太高),就可以用上拉电阻提供电流分量, 把电平“拉高”。(就是并一个电阻在IC内部的上拉电阻上, 让它的压降小一点)。当然管子按需要该工作在线性范围的上拉电阻不能太小。当然也会用这个方式来实现门电路电平的匹配。上,就是指高电平;所谓下,是指低电平。上拉,就是通过一个电阻将信号接电源,一般用于时钟信号数据信号等。下拉,就是通过一个电阻将信号接地,一般用于保护信号。这是根据电路需要设计的,主要目的是为了防止干扰,增加电路的稳定性。

使用特权

评论回复
15
时间啊|  楼主 | 2013-4-12 09:06 | 只看该作者
lark100 发表于 2013-4-11 23:41
数字电路有三种状态:高电平、低电平、和高阻状态,有些应用场合不希望出现高阻状态,可以通过上拉电阻或下 ...

你好,非常感谢,但还是不明白,向P3口寄存器写1,就会输出1,这时候数据线上的数据就是高电平了啊,那重置ds18b20时序上的resistor pullup到底是什么意思?好像暗示了数据线现在处于不确定状态,电平只是由上拉电阻拉高的?我认为还是主机拉高的,只是有了上拉电阻,高电平更高一些了,电流大一些。怎么理解,望正面回答。

使用特权

评论回复
16
yiucing| | 2013-4-12 10:12 | 只看该作者
resistor pullup
应该是你将端口设为输入(向端口寄存器写1)
端口会利用内部上拉电阻将电平拉高

使用特权

评论回复
17
时间啊|  楼主 | 2013-4-12 10:37 | 只看该作者
yiucing 发表于 2013-4-12 10:12
resistor pullup
应该是你将端口设为输入(向端口寄存器写1)
端口会利用内部上拉电阻将电平拉高 ...

太感谢了,终于明白了,是指内部上拉电阻。

使用特权

评论回复
18
yiucing| | 2013-4-12 12:30 | 只看该作者
时间啊 发表于 2013-4-12 10:37
太感谢了,终于明白了,是指内部上拉电阻。

反正是上拉电阻把电平拉高,可以是外部也可以是内部
18b20手册上写的是外部上拉电阻
By the end of the read time slot, the DQ pin will pull
back high via the external pullup resistor.

另外,有些mcu端口是开漏的,若没有外部上拉电阻,即使你向端口置1,输出也不会是高电平的,端口是悬空的

使用特权

评论回复
19
时间啊|  楼主 | 2013-4-12 13:07 | 只看该作者
yiucing 发表于 2013-4-12 12:30
反正是上拉电阻把电平拉高,可以是外部也可以是内部
18b20手册上写的是外部上拉电阻
By the end of the r ...

谢谢,假设讨论不是开漏的P3 口,数据线上的电平想拉高还得端口先置1啊!对于P3口,外部上拉电阻的作用无非是提高电流,提升一下高电平时的电压,说到最后还是得主芯片把端口拉高才行啊。说上拉电阻把电平拉高,除非他是开漏的端口,处于悬空不确定态,那外部高电平才完全是上拉电阻的作用。

使用特权

评论回复
20
yiucing| | 2013-4-12 13:29 | 只看该作者
说到最后还是得主芯片把端口拉高才行啊

这就是靠内部上拉电阻的啊
端口置1,只是你想表达输出为1的愿望,但如果没有上拉电阻(内部或者外部),这个愿望也是不能实现滴。。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

14

帖子

0

粉丝