打印
[AVR单片机]

MEGA128采集14位串行ad(tlc3578)的程序?

[复制链接]
2334|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zaiming|  楼主 | 2012-8-13 13:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
void AD(void)
{
  uint w_cfr=0xa802;//配置寄存器
  uchar i=0;
  uchar j=0;
  uchar k=0;
  uchar m=0;
  uint addata_temp1[11]={0x0000};
  ulint addata_sum1=0x00000000;
  uint addata_temp2[11]={0x0000};
  ulint addata_sum2=0x00000000;
  DDRB=0X17;
  PORTB=0XF9;//初始化spi端口
  delay_1ms(5);
  //SDI读数据,AD1
  PORTB&=~(1<<PB0);//CS置'0'
  for(i=0;i<16;i++)
  {
    w_cfr=w_cfr<<i;
    PORTB|=(1<<PB1);//SCLK置'1'
    PORTB|=((uchar)((w_cfr&0x8000)>>13));//将w_cfr送sdi
    PORTB&=~(1<<PB1);//SCLK置'0'
  }
  if(getb(PINE,4)==0) delay_us(5);
  PORTB|=(1<<PB0);//CS置'1'
  delay_1ms(5);  
  //转换模式00
  for(k=0;k<6;k++)
  {
    for(m=0;m<11;m++)
    {
      PORTB&=~(1<<PB0);//CS置'0'
      for(j=0;j<16;j++)
      {
        temp_ch[k]=temp_ch[k]<<j;
        PORTB|=(1<<PB1);//SCLK置'1'
        PORTB|=((uchar)((temp_ch[k]&0x8000)>>13));//将temp_ch[k]的选择通道数据送sdi
        addata_temp1[m]|=getb(PINB,3);//读sdo
        addata_temp1[m]=addata_temp1[m]<<(15-j);
        PORTB&=~(1<<PB1);//SCLK置'0'
      }
      if(getb(PINE,4)==0) delay_us(5);
      PORTB|=(1<<PB0);//CS置'1'
    }
    for(m=1;m<11;m++)
    {
      addata_sum1=addata_sum1+addata_temp1[m];
    }
    temp_ad1[k]=(uint)((double)addata_sum1/10);
  }
  //AD2
  PORTB&=~(1<<PB4);//CS置'0'
  for(i=0;i<16;i++)
  {
    w_cfr=w_cfr<<i;
    PORTB|=(1<<PB1);//SCLK置'1'
    PORTB|=((uchar)((w_cfr&0x8000)>>13));//将w_cfr送sdi
    PORTB&=~(1<<PB1);//SCLK置'0'
  }
  if(getb(PINE,4)==0) delay_us(5);
  PORTB|=(1<<PB4);//CS置'1'
  delay_1ms(5);  
  //转换模式00
  for(k=0;k<6;k++)
  {
    for(m=0;m<11;m++)
    {
      PORTB&=~(1<<PB4);//CS置'0'
      for(j=0;j<16;j++)
      {
        temp_ch[k]=temp_ch[k]<<j;
        PORTB|=(1<<PB1);//SCLK置'1'
        PORTB|=((uchar)((temp_ch[k]&0x8000)>>13));//将temp_ch[k]的选择通道数据送sdi
        addata_temp2[m]|=getb(PINB,3);
        addata_temp2[m]=addata_temp2[m]<<(15-j);
        PORTB&=~(1<<PB1);//SCLK置'0'
      }
      if(getb(PINE,4)==0) delay_us(5);
      PORTB|=(1<<PB4);//CS置'1'
    }
    for(m=1;m<11;m++)
    {
      addata_sum2=addata_sum2+addata_temp2[m];
    }
    temp_ad2[k]=(uint)((double)addata_sum2/10);
  }
}

//请问谁用过TLC3578,如果用过可以给我讲讲吗?qq:836625592

相关帖子

沙发
zaiming|  楼主 | 2012-8-13 14:46 | 只看该作者
补充一下:该程序能够采集到数,但采集的数不正确,我估计是我对tlc3578的控制可能还有什么疏漏或者是由地方没正确,所以想请教一下用过tlc3578的朋友。十分感谢!

使用特权

评论回复
板凳
f358091905| | 2012-8-13 22:02 | 只看该作者
我也在用 我测量硬件感觉芯片坏了 每个通道的输入阻抗很低

使用特权

评论回复
地板
f358091905| | 2012-8-13 22:05 | 只看该作者
你的代码很有问题

使用特权

评论回复
5
zaiming|  楼主 | 2012-8-14 08:47 | 只看该作者
我是用io模拟的,你能给我讲讲是那些问题吗?欢迎加我qq聊。qq号上面有。

使用特权

评论回复
6
zaiming|  楼主 | 2012-8-17 09:06 | 只看该作者
4# f358091905
能给我提些建议吗?关于对tlc3578的控制。

使用特权

评论回复
7
zaiming|  楼主 | 2012-8-18 13:53 | 只看该作者
本人纠正,上面的程序的确存在问题,现在发现好像TLC3578的硬件电路好像也有点问题,他的int、eoc脚始终电平不变,不知是哪儿的原因,往与大家探讨。

使用特权

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

本版积分规则

5

主题

56

帖子

1

粉丝