完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
您好,
遇到一个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 //SRC_UPDATE,更新参数 AD7779_Register_Write(0x64, 0x01); //读取寄存器的数值,看是否设置成功 for(i=0; i<0x65; i++) { data = 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 = AD7779_SPI_RdByte(32); //将片选信号拉高 AD7779_CS_HI; Delay_us(AD7779_DELAY); } } 6、使用CCS测试结果,通道编号每次都在变化 7、读取AD7779数据的时间,在/RDY管脚出现下降沿中断时读取数据 #pragma vector=PORT2_VECTOR __interrupt void Port_2(void) { P2IFG &= ~BIT0; // P2.0 IFG cleared //在/RDY管脚的下降沿中断程序中读取数据 AD7779_Read_Data(); } 8、下图是技术手册中关于ADC转换数据格式的说明 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 |
|
相关推荐
6个回答
|
|
1. 方便提供原理图截图看一下吗?
2. /START管脚不用时,要拉到搞电平(手册有笔误)。并把SYCIN和SYCOUT短接。 3. 可以提供示波器抓到的/DRDY, /CS, SCLK, SDO的波形吗?像Figure 3. SPI Control Interface Timing Diagram。 |
|
|
|
jdjfuwegs 发表于 2019-1-9 11:11 StevenX, 您好: 经过将SPI的时钟频率从500KHZ,提升到了2MHZ之后,可以正常读取8个通道的数据了;就是因为SPI时钟频率不够造成的数据读取不正确的原因。 但是,还遇到一个问题,当仅使能01通道时,连续读取8个通道数据时,有时候其他通道还有数据,调试结果如下图: 错误时: 1、使用中断方式,仅在RDY管脚下降沿触发中断,在中断程序中连续读取8个通道数据,每个通道读取4个字节数据 for(i=0; i<8; i++) { AD7779_CS_LO; Delay_us(0); adcvalue = AD7779_SPI_RdByte(32); ch = (adcvalue >> 28) & 0x07; AD7779_CS_HI; Delay_us(0); } 2、AD7779的配置如下: /******************************************************************** * 函数名称:BSL_AD7779_Init * 函数功能:配置AD7779 * 函数说明: * 调用函数:无 * 全局变量:无 * 入口参数:Uint8 chnum : 使能通道,每一位对应一个通道,1=使能,0=禁止 * 出口参数: ********************************************************************/ Int16 BSL_AD7779_Init(Uint8 chnum) { CSL_Status status; Int16 i = 0; AD7779_Reset(); //将SPI接口配置成读写AD7779内部寄存器,默认就是读写寄存器 status = AD7779_Register_Write(0x13, 0x40); //使能ch0通道,禁止其他通道 // AD7779_Register_Write(0x08, 0xFE); chnum = chnum ^ 0xFF; status = AD7779_Register_Write(0x08, chnum); //设置电源模式,默认是低速模式,使能内部参考电压 status = AD7779_Register_Write(0x11, 0x34); //设置参考电压类型,选择内部参考电压 status = AD7779_Register_Write(0x15, 0x40); //默认数据格式DOUT_HEADER_FORMAT,CRC header使能 status = AD7779_Register_Write(0x14, 0x20); //设置采样率MCLK=4096KHz MOD_MCLK=MCLK/8=512KHz 采样率=1KHz,那么SRC_N=MOD_MCLK/采样率=512/1=512,没有小数所以SRC_IF=0 status = AD7779_Register_Write(0x60, 0x02); //SRC_N_MSB status = AD7779_Register_Write(0x61, 0x00); //SRC_N_LSB status = AD7779_Register_Write(0x62, 0x00); //SRC_IF_MSB status = AD7779_Register_Write(0x63, 0x00); //SRC_IF_LSB //SRC_UPDATE,更新参数 status = AD7779_Register_Write(0x64, 0x01); for(i=0; i<0x65; i++) { regdata = AD7779_Register_Read(i); } //将SPI接口配置成读取ADC的数据,GENERAL_USER_CONFIG_3.bit4 = SPI_SLAVE_MODE_EN, status = AD7779_Register_Write(0x13, 0x90); return status; } 3、还不太明白RDY管脚的具体作用, 1、所有通道都转换完毕才输出RDY脉冲,还是周期输出? 2、假设5个通道同时采集怎么同步? 3、上面图片那种现象是为什么呢? 谢谢 |
|
|
|
并且 尝试了将SPI时钟频率提高到了10MHz 仍然有这种现象 上面后两张图片明显后几个通道数据读取出错了 不知道为什么 请给些建议,是不是AD7779配置的问题 |
|
|
|
这就是经验啊,我们可以借鉴。
|
|
|
|
你好,想请教下他的数据应该怎么读,方便把代码发一下吗
|
|
|
|
您好,方便共享代码吗
|
|
|
|
只有小组成员才能发言,加入小组>>
1001 浏览 2 评论
给ADUM4223 增加信号驱动15V电压就不正常, 波动很大会被烧是什么情况?
1393 浏览 2 评论
ADP5092 SYS端口为2.09V,但是REG_OUT为0是什么原因?
1941 浏览 1 评论
ad7193差分输入ain1与ain2差是正值时,读到电压与实际值误差小,但为负值值,误差就变的很大
4274 浏览 2 评论
9067 浏览 1 评论
ADC3442采集,分析数据出现有规则毛刺,请问是哪方面的问题啊?
1541浏览 3评论
AD7190状态寄存器一直是0x80,连续转换模式下RDY不拉低
1700浏览 2评论
1002浏览 2评论
1678浏览 2评论
给ADUM4223 增加信号驱动15V电压就不正常, 波动很大会被烧是什么情况?
1393浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-26 09:13 , Processed in 0.851823 second(s), Total 58, Slave 52 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号