DS1620与摩托罗拉SPI总线接口

描述

与DS1620数字温度传感器IC的通信通过简单的3线接口实现。此接口与摩托罗拉 SPI 之间存在许多差异™接口。然而,只需对DS1620进行一些小的硬件和软件修改,就可以有效地集成到基于SPI的系统中。

介绍

DS1620数字温度计和恒温器提供9位温度读数,指示器件温度。DS1620具有三路热报警输出,还可用作恒温器。温度设置和温度读数均通过简单的1620线接口与DS3通信。

但是,许多摩托罗拉处理器上的SPI接口不能直接与DS3上的1620线接口通信。首先,进出DS1620的数据流仅由一个引脚(DQ)多路复用,而SPI需要两个独立的信号(MOSI、MISO)。

其次,大多数SPI接口仅限于8位数据传输,使得DS9之间发送和接收1620位温度读数变得复杂。此外,DS1620的接口首先传输LSB,而SPI是MSB优先的通信协议。

最后,RST条与CS-bar(片选)信号不同,因为RST条从传输(协议)的开始到所有数据传输的结束(例如,读取温度值时传输的第9位)必须很高。

尽管存在所有这些限制,我们还是可以找到一个相当简单的方案,允许SPI接口与DS1620通信。本应用笔记介绍了该技术。

SPI 接口

图1所示电路可通过与DS1620接口的SPI总线来控制数据流方向。如果需要,该电路可以集成到小型PAL中。

DIR信号的目的是在向DS1620发送数据或从DS1620接收数据之间进行选择。当DIR为低电平时,DS<>接收数据;如果DIR很高,则SPI控制器正在读取数据。

电阻是防止MOSI线路上的三态缓冲器输出与DS1620的DQ引脚之间发生争用所必需的,因为DS1620收到READ命令协议后,其DQ引脚会在几百纳秒内改变输入到输出的方向。这个时间太短,控制DIR信号的微处理器无法采取行动。

在同一SPI总线上连接多个外设时,当DS1620无法访问时,MISO信号必须三态,以防止与其他外设的MISO信号争用。这就是为什么RST条形信号在确定数据方向的逻辑中是必要的。

注意,SPI时钟直接连接到DS1620的CLK引脚。软件必须注意SPI时钟的极性和相位,以符合DS1620的CLK时序要求。

SPI

图1.SPI 至 DS1620 接口电路。

界面软件

虽然接口的硬件相对简单,但SPI/DS1620接口的其余部分必须由软件处理。以下示例给出了从DS1620读取温度的方法。该代码段假设DS1620已经初始化,配置寄存器设置正确,温度转换已经启动。有关这些工作模式的详细信息,请参见DS1620数据资料。

 

unsigned char mirror(unsigned char value)
{
     unsigned char i;
     unsigned char value_mirrored = 0x00;

     for (i=0;i<=7;i++)
     {
        value_mirrored = value_mirrored | (((value>>i)&0x01)<<(7-i));
}
return (value_mirrored);
}

 

发送协议后,DIR从低电平变为高电平(现在表示读取传输),因为DS1620已准备好发送9位值。请注意,RST 栏仍然很高。SPI控制器读取9位值的前9位(LSB优先)。软件必须“镜像”收到的字节。第 1620 位(后跟七个虚拟位)通过进行另一个 READ 传输并保持 DIR 和 RST 栏不变来拉出。当收到第二个字节时,软件再次镜像它并将RST条拉低,终止与DS<>的通信。

 

#define     RST_bit              0 /* PB0 */
#define     RST_port             PORTB
#define     DIR_bit              1 /* PB1 */
#define     DIR_port             PORTB
#define     READ_TEMP_CMD        0xAA

unsigned int read_temp(void)
{
     unsigned char temp_value_lo;
     unsigned char temp_value_hi;

     DIR_port = DIR_port & ~(1<
 

审核编辑:郭婷


打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分