您好!
1.如何利用RDY引脚触发SPI中断进行数据接收?
2.另外我现在需要采集多路模拟信号,但是在进行通道切换的时候无法正常读取数据,我通过置位接口模式寄存器配置中的AD717X_IFMODE_REG_DATA_STAT位,数据输出为32位,[24..31]位为状态寄存器的值,以此来判断我每次读取的是哪个通道的。寄存器初始化配置如下:
ad717x_st_reg ad7172_2_regs[] =
{
{ AD717X_STATUS_REG, 0x00, 1 },
{ AD717X_ADCMODE_REG, 0x0000, 2 },
{
AD717X_IFMODE_REG,
AD717X_IFMODE_REG_DOUT_RESET | AD717X_IFMODE_REG_CRC_EN | AD717X_IFMODE_REG_DATA_STAT,
2
},
{ AD717X_REGCHECK_REG, 0x0000, 3},
{ AD717X_DATA_REG, 0x0000, 4 },
{ AD717X_GPIOCON_REG, 0x0000, 2 },
{ AD717X_ID_REG, 0x0000, 2 },
{
AD717X_CHMAP0_REG,
AD717X_CHMAP_REG_CH_EN | AD717X_CHMAP_REG_AINPOS(0) | AD717X_CHMAP_REG_AINNEG(0x16),
2
},
{
AD717X_CHMAP1_REG,
AD717X_CHMAP_REG_CH_EN,| AD717X_CHMAP_REG_AINPOS(1) | AD717X_CHMAP_REG_AINNEG(0x16),
2
},
{
AD717X_CHMAP2_REG,
AD717X_CHMAP_REG_CH_EN | AD717X_CHMAP_REG_AINPOS(2) | AD717X_CHMAP_REG_AINNEG(0x16),
2
},
{
AD717X_CHMAP3_REG,
AD717X_CHMAP_REG_CH_EN | AD717X_CHMAP_REG_AINPOS(3) | AD717X_CHMAP_REG_AINNEG(0x16),
2
},
{ AD717X_SETUPCON0_REG, 0x0000, 2 },
{ AD717X_SETUPCON1_REG, 0x0000, 2 },
{ AD717X_SETUPCON2_REG, 0x0000, 2 },
{ AD717X_SETUPCON3_REG, 0x0000, 2 },
{
AD717X_FILTCON0_REG,
/*通道0 滤波器设置:*/
AD717X_FILT_CONF_REG_ENHFILT(2) | AD717X_FILT_CONF_REG_ODR(14),
2
},
{
AD717X_FILTCON1_REG,
AD717X_FILT_CONF_REG_ENHFILT(2),
2
},
{
AD717X_FILTCON2_REG,
AD717X_FILT_CONF_REG_ENHFILT(2),
2
},
{
AD717X_FILTCON3_REG,
AD717X_FILT_CONF_REG_ENHFILT(2),
2
},
{ AD717X_OFFSET0_REG, 0, 3 },
{ AD717X_OFFSET1_REG, 0, 3 },
{ AD717X_OFFSET2_REG, 0, 3 },
{ AD717X_OFFSET3_REG, 0, 3 },
{ AD717X_GAIN0_REG, 0, 3 },
{ AD717X_GAIN1_REG, 0, 3 },
{ AD717X_GAIN2_REG, 0, 3 },
{ AD717X_GAIN3_REG, 0, 3 },
};
数据读取如下:
void Get_AD717X_Data(void)
{
AD717X_ReadData(&my_ad7172_2,&AD7172_Data);
switch((uint8_t)(AD7172_Data>>24)&0x3)
{
case 0x00: buf[0]= AD7172_Data&(0xffffff);break;
case 0x01: buf[1]= AD7172_Data&(0xffffff);break;
case 0x02: buf[2]= AD7172_Data&(0xffffff);break;
case 0x03: buf[3]= AD7172_Data&(0xffffff);break;
default:break;
}
}
2019-1-9 11:40:46
DRY在转换完成时有一个低电平信号,此时配置MCU侦测到该信号的下降沿后产生一个中断,中断中启动SPI读取数据。
至于读取通道数据和数据通道切换,都是需要参照手册上的寄存器功能介绍,按照功能说明操作,然后查看修改的寄存器有没有生效即可。
DRY在转换完成时有一个低电平信号,此时配置MCU侦测到该信号的下降沿后产生一个中断,中断中启动SPI读取数据。
至于读取通道数据和数据通道切换,都是需要参照手册上的寄存器功能介绍,按照功能说明操作,然后查看修改的寄存器有没有生效即可。
举报
2019-1-9 11:55:34
引用: dsdaiztt 发表于 2019-1-9 17:49
DRY在转换完成时有一个低电平信号,此时配置MCU侦测到该信号的下降沿后产生一个中断,中断中启动SPI读取数据。
至于读取通道数据和数据通道切换,都是需要参照手册上的寄存器功能介绍,按照功能说明操作,然后查看修改的寄存器有没有生效即可。 ...
很感谢您的回复。
现在遇到的主要问题就是按照手册设置为多通道后,数据输出就是不对,单通道读取正常;多通道使能后,最高8为输出的状态寄存器值显示的通道并没有进行切换。我想了解下是否有工程师这样做过,是否成功了呢。
引用: dsdaiztt 发表于 2019-1-9 17:49
DRY在转换完成时有一个低电平信号,此时配置MCU侦测到该信号的下降沿后产生一个中断,中断中启动SPI读取数据。
至于读取通道数据和数据通道切换,都是需要参照手册上的寄存器功能介绍,按照功能说明操作,然后查看修改的寄存器有没有生效即可。 ...
很感谢您的回复。
现在遇到的主要问题就是按照手册设置为多通道后,数据输出就是不对,单通道读取正常;多通道使能后,最高8为输出的状态寄存器值显示的通道并没有进行切换。我想了解下是否有工程师这样做过,是否成功了呢。
举报
2019-1-9 12:11:40
我使用的是AD7124,设置多通道后正常。一般是现把寄存器修改为下一个通道,启动或者等等通道转换完成后读取该通道的数据,在读取的过程中或者读取完成后再进行通道切换。在AD的手册中会有详细的说明,主要是注意一些细节,我此前的使用中也出现一些问题,在手册中基本上可以找到答案。
我使用的是AD7124,设置多通道后正常。一般是现把寄存器修改为下一个通道,启动或者等等通道转换完成后读取该通道的数据,在读取的过程中或者读取完成后再进行通道切换。在AD的手册中会有详细的说明,主要是注意一些细节,我此前的使用中也出现一些问题,在手册中基本上可以找到答案。
举报
2019-1-9 12:30:51
设置成多通道后,最低8位是状态寄存器,读取数据的时候,前3个byte数据数据寄存器,最后1个byte状态寄存器,估计是这里弄反了。
友情提示: 你在使用Sigma Delta的多通道功能时,一定要注意建立时间的问题。Sinc5+Sinc1还能好点,Sinc3、Sinc4就可得当心了。
设置成多通道后,最低8位是状态寄存器,读取数据的时候,前3个byte数据数据寄存器,最后1个byte状态寄存器,估计是这里弄反了。
友情提示: 你在使用Sigma Delta的多通道功能时,一定要注意建立时间的问题。Sinc5+Sinc1还能好点,Sinc3、Sinc4就可得当心了。
举报