SMBUS有加上拉电阻的,Device ID.Manufacturer ID和配置寄存器里的值都可以读出来,但是唯独温度值和电压值读不出来。
其中配置寄存器里,我是这样设置的,使使能位EN=0(禁用DRDY引脚).而且配置寄存器里的低八位写不进去,即:即使写进去是1,读出来的还是0.
读出的温度值和电压值一直是0,读出的配置寄存器里的/DRDY位一直是低电平,不会是转换一直未完成吧?
(continued... 不知道为什么后面的内容看不到,重新发一下试试)
1. 确认一下ID对不对。
2.配置结存器如下,低8位本来就是写不进的,其中D7是read only,所以您看到并不是问题。
3.读出来是0,要么是根本没转换,要么是转换未完成,从手册中CR的描述可以看到,转换一次最慢也不会超过4秒。DRDY的确可以用来指示转换是否完成,但您前面提到配置 EN=0,那么DRDY是disable 的。
4.给出您的配置寄存器值,特别是MOD,它有000和111两种值,000是power down mode,it aborts the current conversion and puts the device into a low-power shutdown mode。
5.enable DRDY 看一下。
6.注意硬件设计,特别是layout,网站上有layout 方面的建议。
你好!
非常感谢您的建议,我在初始化中,给配置寄存器先复位(把0x8000写入配置寄存器中),然后在给配置寄存器初始化(把0x7800写入配置寄存器中,即MOD为111),然后读的配置寄存器的值很对(也是0x7800),Manufacturer ID,Device ID中的值也读的很准(分别是0x5449和0x0067),但是唯独电压值和温度值还是为复位后的值(0),而且配置寄存器的/DRDY位一直为低电平(0)。
关于您说的enable DRDY,我是这样做的,将/DRDY引脚引出来(已加上拉电阻),程序中,写入配置寄存器的值为0x7900。测试的结果是,DRDY引脚一直是高电平(1)。
关于硬件设计,PCB布线,说实话我是随便布的线,不知会不会有影响?但是可以准确读出来配置寄存器,Manufacturer ID,Device ID的值,又让我疑问,布线应该没有影响吧。
从测试结果来看,按照您之前说的那样,要么没有转换温度,要么转换了,没转换完成。可是为什么会出现这样的情况?确实让我困惑。还再次麻烦你提些建议。
你好!
我确实是把AGND和DGND连接了,其实我是初学者,因为之前见过有把AGND和DGND连接到一起的器件,所以这次索性也把AGND和DGND连接到一起了。
问题是不是出在这了?
我的PCB作图很简单,单面板,直接把引脚引出来的,没有什么技术含量。
今天下午按照您的建议,改变了ADRO,ADR1引脚,即改变了SMBUS的器件地址。发现当且仅有ADR0=0,ADR0=0或ADR0=1,ADR0=0这两种情况时,能读出复位值(但仍然温度寄存器里的值没有转换),我用很简单的51单片机开发板调试的。TMP006器件的电源和接地的都是用开发板上的电源端口和接地端口,不知这是否会有影响?
HI lei
多亏您的提醒,是布局的问题,我重新布局一下,寄存器里的本地温度和电压值就可以转换了,但是请问在计算时,有个校准系数s0。我测的是体温,这个值是多少合适呢?我学校没有条件去测试的,求出s0的。
S0是和具体的系统有关,同时决定于被测物体。它是描述被测物体温度系数的值。不同的物体需要做不同的校正,不知道您有没有看TMP006 的User Guide,在第6节Calibrating the System有详细提到计算方法,您可以直接用最小最大值的斜率(y2-y1)/(x2-x1)来计算即可。 S0本来就是微调的值,它的default value 是6.4E-14,可以适应于一般应用中。
HI Lei:
你好,51单片机处理浮点型的速度如何?我在想是不是因为51单片机处理浮点型的速度太慢,导致的测目标物体温度太慢?我程序里面没什么内容,只有读计算出来的物体温度和显示(显示只是显示温度)。
HI lei
抱歉,之前搞错了,不是因为浮点运算问题,我想请教您,目前的现象是:响应时间慢,而且读出的电压寄存器中的值,随着环境温度和目标温度的值变化。(如果目标温度的值大于环境温度的值,则电压寄存器的值大于零;如果目标温度的值小于环境温度的值,则电压寄存器的值小于零;否则,等于零),这是否正常?
VOBJECT 的符号确切说是和 TAMBIENT 有关系,在它们相等的时候 TOBJECT 基本就等于 TAMBIENT。稳定室温下对一般使用来说,如果您用一个和室温一样且较高辐射系数的物体置于TMP006的探测目标上,得到的 TOBJECT 大概也就等于 TAMBIENT。当然所有的前提是TMP006 拥有一个规范的layout。
你好!
不知道为什么,好奇怪哦,我的这个TMP006反应很慢,测个东西要30秒钟,我觉得是因为电压寄存器里的值变化太慢而导致的.实在是不值为何?不知你是否有代码?我想看一下是不是我的程序代码错了?(虽然这种可能性也不大,因为从寄存器里读来的电压值也不是很快稳定。)
您这里说的反应慢指的是寄存器的值变化慢,即直接测不同温度然后读V的变化。还是包含整个计算?
如果是寄存器的值变化慢有没有先换芯片试试。
另外变化慢和不稳定是不是一个意思?即其实您说慢是V 的值在测温时很难稳定下来。
您好!
是电压寄存器里的值变化慢,但是最后是可以稳定的。比如,我在测额头的时候,本来应该寄存器电压值一次性稳定在某个值的,但是,这个电压值是缓慢上升然后在稳定在某个值的。布局时,虽然我没有完全按照TMP006指导的那样布局,应该也可以吧,毕竟可以转化了。有什么原因导致TMP006电压寄存器里的值变化慢呢?
不好意思没看到您的回复。 关于您提到的问题,看起来并不是转换速度慢的问题,而是“稳定速度”慢。这个还是比较和外部的影响因素有关。而能想到的只有layout,毕竟测温芯片对布局,layout 的要求很高,这些都会是影响精度,线性度的主要原因。 还有注意线性度S0的设定。