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

ADS8168: ADS8168 数据读取的问题

Part Number:ADS8168

大家好,我使用ADS8168读取数据有问题。

我是在ZYNQ 平台下使用ADS8168的。

我先测试了一下zynq和ADS8168的spi通讯是否正常。

write_cmd(ADCCMD_WR_REG, 0xFF, 0x55);
write_cmd(ADCCMD_RD_REG, 0xFF, 0x0);

我先向 0xFF地址谢数据 0x55, 然后读0xFF的数据,结果返回0x55;

write_cmd(ADCCMD_WR_REG, 0xFFFF, 0x66);
write_cmd(ADCCMD_RD_REG, 0xFFFF, 0x0);

我向 0xFF地址谢数据 0x66, 然后读0xFF的数据,结果返回0x66;

这说明读写没问题,SPI通讯没问题。

下面就开始按照手册配置和读取数据

// 使能写
write_cmd(ADCCMD_WR_REG, REG_ACCESS, REG_ACCESS_BITS);
//write_cmd(ADCCMD_RD_REG, REG_ACCESS, 0x0);

// Powerup all except the ref/2 buffer
write_cmd(ADCCMD_WR_REG, REG_PD_CNTL, PD_CNTL_PD_REFby2);

// Data type: ADC value + 4-bit channel id
write_cmd(ADCCMD_WR_REG, REG_DATA_CNTL, DATA_CNTL_FORMAT_CHID);

// Vref = 4V096
write_cmd(ADCCMD_WR_REG, REG_OFST_CAL, OFST_CAL_4V096);//REG_SDO_CNTL4

write_cmd(ADCCMD_WR_REG, REG_SDO_CNTL4, SDO_CNTL4_SEQSTS_CFG);

write_cmd(ADCCMD_WR_REG, REG_DEVICE_CFG, DEVICE_CFG_SEQMODE_AUTO);
tmp|=AUTO_SEQ_CFG1_EN_AIN0;
tmp|=AUTO_SEQ_CFG1_EN_AIN1;
write_cmd(ADCCMD_WR_REG, REG_AUTO_SEQ_CFG1, tmp);

 write_cmd(ADCCMD_WR_REG, REG_SEQ_START, SEQ_START_START);

while(readpin(SEQSTS)!=0)
{
 chanel2=readChannelCustom();
chanel6=readChannelCustom();
}

the readchannelcustom fun follow

uint16_t readChannelCustom()
{
//Establish time
for(int i=0;i<50000;i++);
unsigned char tx_data[2]={0,0};
unsigned char rx_data[2]={0,0};
XSpi_Transfer(&SpiInstance, tx_data, rx_data, 2);
return rx_data[0] << 8 | rx_data[1];
}

我使用自动模式读取0,和1 通道,我改变0通道的输入从0.4-20V,结果输出的数据一直是0x8E1。具体是哪一步配置有问题呢?我读取的时候查看了SEQSTS的pin脚,seq开始的时候pin脚拉高,当读完两次的时候,pin脚就自动拉低了。

Amy Luo:

您好,

我有如下疑问:

关于 0xFF地址,是什么的地址?寄存器地址没有到 0xFF,最大到7Eh

另外输入从0.4-20V,ADS8168的输入也到不了20V

,

shaoqing ke:

您好!

谢谢您的回复,20V是笔误,应该是2V.

我重新检查了SPI通讯,发现通讯有问题,每次读回来的都是上次的命令。

write_cmd(ADCCMD_WR_REG, REG_SDI_CNTL , 0x0);

SPI Send : 0x08 0x08 0x00

       Read: 0x06 0x06 0x06

usleep(100);write_cmd(ADCCMD_WR_REG, REG_SDO_CNTL1 , 0x0);

SPI Send : 0x08 0x0C 0x00

       Read: 0x08 0x08 0x00

usleep(100);write_cmd(ADCCMD_RD_REG, REG_ACCESS , 0x0);

SPI Send : 0x02 0x00 0x00

       Read: 0x08 0x0C 0x00

usleep(100);write_cmd(ADCCMD_NOP, 0xFF, 0x00);

SPI Send : 0x00 0xFF 0x00

       Read:  0x02 0x00 0x00

usleep(100);

是通讯速率的问题还是CPOL,CPOH,时钟极性和相位的问题?

,

shaoqing ke:

您好!

谢谢您的回复,20V是笔误,应该是2V.

我重新检查了SPI通讯,发现通讯有问题,每次读回来的都是上次的命令。

write_cmd(ADCCMD_WR_REG, REG_SDI_CNTL , 0x0);

SPI Send : 0x08 0x08 0x00

       Read: 0x06 0x06 0x06

usleep(100);write_cmd(ADCCMD_WR_REG, REG_SDO_CNTL1 , 0x0);

SPI Send : 0x08 0x0C 0x00

       Read: 0x08 0x08 0x00

usleep(100);write_cmd(ADCCMD_RD_REG, REG_ACCESS , 0x0);

SPI Send : 0x02 0x00 0x00

       Read: 0x08 0x0C 0x00

usleep(100);write_cmd(ADCCMD_NOP, 0xFF, 0x00);

SPI Send : 0x00 0xFF 0x00

       Read:  0x02 0x00 0x00

usleep(100);

是通讯速率的问题还是CPOL,CPOH,时钟极性和相位的问题?

,

shaoqing ke:

write_cmd(ADCCMD_RD_REG, REG_ACCESS , 0x0);

SPI Send : 0x01 0x00 0x00

       Read: 0x08 0x0C 0x00

这个地方写错了。

,

Amy Luo:

您现在可以正确写入和读取寄存器的值吗?如果不可以,您可以附上SPI通信的示波器波形吗,我看下时序上是否存在问题

,

shaoqing ke:

我用了3个ADS8168,由于其他2个引脚未配置,默认是低电平,因此在SDO上产生冲突,这样回复的数据就不对。

赞(0)
未经允许不得转载:TI中文支持网 » ADS8168: ADS8168 数据读取的问题
分享到: 更多 (0)