已回答假定已回答

AD7779读数据失败

JiaWenquan 在 2016-11-4 詢問的問題
最後回覆由cnhtzxb@163.com於2016-11-29提供
您好,

 

 

遇到一个AD7779数据采集的问题,请教下

 

1、使用平台:MSP430F5483a + AD7779

2、控制接口MSP430 IO口模拟SPI接口,控制AD7779,单片机时钟频率为1MHz

3、目前已经成功读写AD7779寄存器

 

4、AD7779寄存器配置参数,

 

void AD7779_Setup(void)

 

{

uint i = 0;

 

AD7779_SPI_Init();

 

AD7779_Reset();

 

Delay_ms(200);

 

//将SPI接口配置成读写AD7779内部寄存器,默认就是读写寄存器

AD7779_Register_Write(0x13, 0x80);

 

//仅使能ch0通道,禁止其他通道,先测试一个通道是否能够正常工作

AD7779_Register_Write(0x08, 0xFE);

 

//设置电源模式,默认是低速模式

AD7779_Register_Write(0x11, 0x24);

 

//设置参考电压类型,Internal Reference

AD7779_Register_Write(0x15, 0x40);

 

//默认数据格式DOUT_HEADER_FORMAT,CRC header使能

AD7779_Register_Write(0x14, 0x20);

 

//设置采样率MCLK=4096KHz  MOD_MCLK=MCLK/8=512KHz 采样率=1KHz,那么SRC_N=MOD_MCLK/采样率=512/1=512,没有小数所以SRC_IF=0

AD7779_Register_Write(0x60, 0x02); //SRC_N_MSB

AD7779_Register_Write(0x61, 0x00); //SRC_N_LSB

AD7779_Register_Write(0x62, 0x00); //SRC_IF_MSB

AD7779_Register_Write(0x63, 0x00); //SRC_IF_LSB

 

//SRC_UPDATE,更新参数

AD7779_Register_Write(0x64, 0x01);

 

//读取寄存器的数值,看是否设置成功

for(i=0; i<0x65; i++)

{

data[i] = AD7779_Register_Read(i);

}

 

//将SPI接口配置成读取ADC的数据,GENERAL_USER_CONFIG_3.bit4 = SPI_SLAVE_MODE_EN,在配置AD7779之后将SPI接口设置成读取ADC数据的工作模式

AD7779_Register_Write(0x13, 0x90);

}

 

5、失败---读取AD7779 转换结果失败

 

void AD7779_Read_Data(void)

 

{

uchar i = 0;

 

//总共八个通道,每个通道32bit数据=8bit CRC头 + 24bit转换数据

    for(i=0; i<8; i++)

    {

//将片选信号拉低

        AD7779_CS_LO;

        Delay_us(AD7779_DELAY);

 

//读取32bit数据

    adcvalue[i] = AD7779_SPI_RdByte(32);

 

//从CRC头中获取AD通道编号

    ch[i] = (adcvalue[i] >> 28) & 0x07;

 

 

//将片选信号拉高

 

        AD7779_CS_HI;

        Delay_us(AD7779_DELAY);

    }

}

 

6、使用CCS测试结果,通道编号每次都在变化

 

ccs-log.jpg

7、读取AD7779数据的时间,在/RDY管脚出现下降沿中断时读取数据

 

#pragma vector=PORT2_VECTOR

 

__interrupt void Port_2(void)

{

P2IFG &= ~BIT0;                          // P2.0 IFG cleared

 

//在/RDY管脚的下降沿中断程序中读取数据   

AD7779_Read_Data();

}

 

8、下图是技术手册中关于ADC转换数据格式的说明

 

7779-data.jpg

 

9、问题:

1>虽然可以成功读写AD7779寄存器,但是不确定是否配置正确,目前就像测试下ch0能否工作

2>在配置好寄存器之后,SPI是否成功进入读取ADC数据模式

3>在通过SPI读取数据,在整个读取的过程中已经将MOSI管脚拉低,避免超过64个MCLK高电平,造成SPI接口复位

4>不知为什么分析CRC头时,通道编号总是没有规律的变化

5>难道时读取数据的时间不对,不能再/RDY的下降沿读取

6>难道不是每次都读取32bit数据吗

7>难道不是依次读取8通道的数据,只有没有禁止的通道才有非零数据吗

8>总而言之,对何时读取数据,怎么读取数据,读取多少数据还不太清楚,也没有找到相应的参考文档和程序

9>/START管脚怎么处理呢

 

10、会不会还有硬件问题

 

 

附件是程序,请参考

 

 

这个问题已经困扰我两周时间了,实在是没有招了,希望能给与帮助

 

谢谢

 

贾文全

 

189-1022-6857

 

 

 


jiawq

結果