TI中文支持网
TI专业的中文技术问题搜集分享网站

ADS1118的硬件SPI通讯问题

        我是使用一个8位的MCU与ADS1118通过硬件SPI通讯的,最初连续发送读取的问题比较困扰我。现在问题暂时解决了,实际上按照手册上的时序图描述,连续发送四次8位数据,只要bit2bit1不是01,就可以驱动ADS1118发回32位数据——16位数据寄存器和16位状态寄存器。不过现在有新的问题了。

        1、读写的速率计算,我用的是11.0592M的晶振,1/128的模式,这样才能与ADS1118正常通讯。而按照手册里“TIMING REQUIREMENTS: SERIAL INTERFACE TIMING”部分的表格所描述的,Tsclk >= 250ns,即Fsclk <= 4M,与11.0592M/128差的有点远。所以,这个读写速率的大致数字应该是多少,能不能给出正确的计算方法。

        2、现在我发送0x0000,0000给ADS1118,得到的数值是0x0000,,058B,我理解为我得到了16位(0x0000)全零的数据和16位(0c058B)的状态,而0x058B按照手册理解,其beit3为1,即读取的是内部温度值。此处的问题是:

              A、如果0x058B是状态寄存器的真实反映,那么室温状态下返回的数据寄存器不应该是0x0000。

              B、我的ADS1118没有进行过配置,所以按照手册描述状态字按Default应该为0x0583,为什么会是0x058B它是不是一个错误的值

        3、状态寄存器的bit0为1的问题,我查了一下有数据准备好后Dout自动拉低的说法,此处如何正确处理?

              A、我用判断MISO管脚(连接Dout)为0的方法,去确定ADS1118是否准备好,以便主机发送数据(0x0000,0000)来读取ADS1118的内容,但是始终的不到结果。但实际上这个判断没有被触发。

              B、如果我主动把MISO(连接Dout)拉低…….结果很难看。

        4、补充一个问题,如果手册上给出的状态寄存器bit2bit1的说明是:是否可以更改状态寄存器…….这是一个是或者否的问题,只要用一位就可以做到,为什么要用两位?或者说bit2bit1除了01表示可以更新状态寄存器外,另外三种状态也有神秘的用法?很是好奇。

        对了,ADS1118返回值是32位的——前16位是数据,后16位是状态?

HaiTao Li:

这些问题,不必一次全部解决,不管是能够对哪一个进行解释,都非常感谢。

HaiTao Li:

还有啊,我在左上角搜索ADS1118怎么没有任何结果?

HaiTao Li:

好吧,我自己先说一个,我以为我在3-A中用的是if(MISO=0),实际我用的是if(!MISO)。呵呵,失望了。

HaiTao Li:

       我还真发现了一个错误,就是2-A,0x058B,bit3不是表示读取AD值或者内部温度值的(那是bit4:TS_MODE的事儿),所以问题2-A就好解释了:因为我的Ain0和Ain1是开路状态的,是不是返回的数据值就应该是0x0000?

       bit3是PULL_UP_EN,默认值为0,表示Pull-up resistor disabled on DOUT pin(DOUT引脚上拉电阻无效)。这里提到了上拉电阻,所以我把2-A的问题改一下:Dout能否直接接在MCU的MISO管脚上么?

magee lxn:

回复 HaiTao Li:

请问你是如何来判断DOUT端口的低电平指示的!是使用SPI的第二功能SOMI端口直接判断?还是另外接了一个端口来判断的!我都试过!用的G2553 LaunchPad。使用前一种方法根本无效,频率跟寄存器中对应的采样率对不上,但是数据时对的!用第二种方法根本就不可行,直接拉高DOUT。

赞(0)
未经允许不得转载:TI中文支持网 » ADS1118的硬件SPI通讯问题
分享到: 更多 (0)