使用AD7705采集两路模拟信号,总是只能正确读取一路信号,另一路错误,不知道是什么原因,把相关代码贴上来,麻烦大家给看看.
void reset_AD7705(void)
{
u8 i;
AD_RESET_LOW;
Delay(5);
AD_RESET_HIGH;
AD_CS_LOW;
AD_DIN_HIGH;
for(i=0;i<100;i++)
write_AD7705_byte(0xff); //持续DIN高电平写操作,恢复AD7705接口
Delay(3000); // 1000us
}
void AD7705_Init(void)
{
AD7705_IO_Configuration();
reset_AD7705();
write_AD7705_byte(0x20); //通道1,下一个写时钟寄存器
write_AD7705_byte(0x00); //写时钟寄存器设置更新速率为20hz
write_AD7705_byte(0x10); //通道1,下一个写设置寄存器
write_AD7705_byte(0x46); //自校准,增益1,单极极,缓冲
Delay(3000); //延时1000us
write_AD7705_byte(0x21); //通道2,下一个写时钟寄存器
write_AD7705_byte(0x00); //写时钟寄存器设置更新速率为20hz
write_AD7705_byte(0x11); //通道2,下一个写设置寄存器
write_AD7705_byte(0x46); //自校准,增益1,单极性,缓冲
Delay(3000);
}
u16 read_AD7705_word(void)
{
u16 data = 0;
for( u8 i=0; i<16; i++)
{
AD_CLK_LOW;
Delay(24);
data <<= 1;
if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_6) == (BitAction)(1)) // APIO_Pin_6 AD_DOUT
data++;
AD_CLK_HIGH;
Delay(24);
}
return data;
}
void write_AD7705_byte( u8 data )
{
for( u8 i=0; i<8; i++)
{
AD_CLK_LOW;
if(data&0x80)
AD_DIN_HIGH;
else
AD_DIN_LOW;
data <<= 1;
Delay(24);
AD_CLK_HIGH;
Delay(24);
}
AD_DIN_HIGH;//在空闲器件保持输入数据线为高
} |