| 
 
| 使用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;//在空闲器件保持输入数据线为高
 }
 | 
 |