打印

AD7705双通道问题

[复制链接]
4020|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
richardji|  楼主 | 2009-8-30 10:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用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;//在空闲器件保持输入数据线为高
}

相关帖子

沙发
etz2009| | 2009-8-30 20:13 | 只看该作者
这个问题我也遇到过
麻烦

使用特权

评论回复
板凳
ankeywu| | 2009-9-7 11:48 | 只看该作者
03年用过AD7705,现在具体细节记不清楚. 有一点需要注意, △-∑转换器通道切换是需要时间的,并不能同时转换.

使用特权

评论回复
地板
xujunchen| | 2009-9-7 15:41 | 只看该作者
能写出这样的程序,就应该能切换!

使用特权

评论回复
5
xmm| | 2009-9-7 18:47 | 只看该作者
加大延时即可

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

7

帖子

0

粉丝