EALLOW:
GpioMuxRegs.GPBDIR.bit.GPIOB1=0;
EDIS;
如果SDA=0,则TMSS20F2812开始从ADT75中读取数据的高字节;SDA=1,表示ADT75忙或者损坏,结束数据读取。
(4)读取数据
当检测到ADT75的应答信号为0时,开始读取温度值。I2C总线的数据传输是以字节为单位的,首先读取温度值的高字节(温度值的整数部分,最高位为符号位),读取的数据存放在retc中。每接收1位数据,retc左移1位。若SDA=1,retc加1;SDA=0,retc不变。
高8位数据传输完后,TMS320F2812传给ADT75一个低电平的应答信号,由Mack()函数完成。此时,需要将GPIOB1端口的数据传输方向改为输出:
EALLOW:
GpioMuxRegs.GPBDIR.bit.GPIOB1=1;
EDIS:
然后开始接收温度值的低字节(温度值的小数部分),读取成功后由TMS320F2812发送一个非应答位,表示本次温度值的读取结束,进入停止状态。
(5)结束数据传输
结束数据传输由Stop()函数完成,结束条件如下:
Delay(50);
至此,读取一个温度值的全过程结束。在程序调试过程中发现,当设置断点单步运行时,无法检测到ADT75发出的低电平应答信号,应答信号始终为1;若不设断点连续执行时,则可以检测到低电平应答信号。这点是ADT75和其他I2C总线器件(如E2PROM芯片AT24C256)的不同之处,在调试程序的过程中要注意该细节。
ADT75的温度转换周期为100 ms。在本设计中,每隔大约250 ms读取一次温度值,可以实现监测光纤延迟线系统温度的变化。
结 语
在光纤延迟线系统的硬件设计中,ADT75完全能够满足实时温度采集的要求,而且测温准确,灵敏度高。由于使用了I2C总线接口,所以温度检测电路结构简单,占用空间小,串行接口占用TMS320F2812的资源少,可靠性高,功耗低,不易受环境干扰。实验证明,设计和运行都达到了令人满意的效果。