大家好,我使用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脚就自动拉低了。