打印

51转avr后失效

[复制链接]
2335|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhaohualiang|  楼主 | 2011-10-10 10:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhaohualiang 于 2011-10-10 10:56 编辑

新手刚开始学习avr,现在用atmega64做了一个检测力值的东西,利用AD7705做模数转换。
之前用51的单片机没问题,现在的电路照搬的之前电路(测试过电路没问题),程序用原来的修改的,但是一直没有调好,DRDY一直没有低电平。
下面是修改后的程序。请前辈们帮小弟看看,指点一下。

#include <avr/io.h>

#define AD7705_DATE(x) if(x==0){PORTE&=~_BV(PE3);}else{PORTE|=_BV(PE3);}
#define AD7705_SCLK(x) if(x==0){PORTE&=~_BV(PE2);}else{PORTE|=_BV(PE2);}

//****************************************************************************
//功能: DIN端口连续写40个周期的高电平,保证复位
//参数:
//返回:无
//备注:无
//****************************************************************************
void AD7705_Reset(void)
{
uchar i;
AD7705_SCLK(1);
DDRE|=_BV(PE3);//DATA输出
AD7705_DATE(1);
for(i=0;i<40;i++)
  {
  AD7705_SCLK(0);
asm("nop");asm("nop");
  AD7705_DATE(1);
asm("nop");asm("nop");
  AD7705_SCLK(1);
asm("nop");asm("nop");
  }
}
//****************************************************************************
//功能:往AD7705写1个字节数据
//参数:要写入AD7705的数据
//返回:无
//备注:无
//****************************************************************************
void AD7705_WriteByte(uchar d)
{
uchar i;
AD7705_SCLK(1);
asm("nop");asm("nop");
for(i=0;i<8;i++)
  {
  AD7705_SCLK(0);
  if(d&0x80)
   {
   DDRE|=_BV(PE3);//DATA输出
   AD7705_DATE(1);
   }
  else
   {
   DDRE|=_BV(PE3);//DATA输出
   AD7705_DATE(0);
   }
  asm("nop");asm("nop");
  AD7705_SCLK(1);
   asm("nop");asm("nop");
  d<<=1;
  }
AD7705_SCLK(1);
AD7705_DATE(1);
}
//****************************************************************************
//功能:从AD7705读一个字
//****************************************************************************
uint AD7705_Read(void)
{
uchar i,temp;
uint d=0xff;
AD7705_WriteByte(0x38);
for(i=0;i<16;i++) // 读16位数据,高位在前
  {
  d<<=1;
  AD7705_SCLK(0);
   asm("nop");asm("nop");
  DDRE&=~_BV(PE3);//DATA输入
  PORTE&=~_BV(PE3);//弱上拉
  temp=PINE&0X08;
  if(temp)
   {
   d++;                                                                                                                                                                                }            
  AD7705_SCLK(1);
   asm("nop");asm("nop");
  }
AD7705_SCLK(1);
DDRE|=_BV(PE3);//DATA输出
AD7705_DATE(1);
return d;
}
//****************************************************************************
//功能:AD7705初始化
//****************************************************************************
void AD7705_Init(void)
{
AD7705_Reset();  // 复位,防止接口迷失   
AD7705_WriteByte(0x20);//通讯寄存器
AD7705_WriteByte(0x04); //时钟寄存器50HZ 04   
AD7705_WriteByte(0x10);//通讯寄存器
AD7705_WriteByte(0x46);//设置寄存器46
}
/*******************************************************************************************/
//力值检测
/*******************************************************************************************/
long int strength(void)
{
long int Update_AD;
Update_AD=AD7705_Read();
void AD7705_Init(void);//初始化AD7705
return Update_AD;
}
/*******************************************************************************************/
//主函数
/*******************************************************************************************/
void main(void)
{
  DDRE|=_BV(PE2);//SCLK为输出
  DDRE&=~_BV(PE6);//DRDY引脚为输入
  PORTE|=_BV(PE6);
  void AD7705_Init(void);
  while(1)
   {
     temp=PINE;
     temp=temp&0X40;
     if(temp==0)
     {
      Display=strength();
      LCM(Display);
     }
  }
}



     }   }}

相关帖子

沙发
yewuyi| | 2011-10-10 10:58 | 只看该作者
那有什么好说的,自己查程序啊,和7705的通信不对了呗。。。

使用特权

评论回复
板凳
chenczy| | 2011-10-10 11:02 | 只看该作者
本帖最后由 chenczy 于 2011-10-10 11:05 编辑

用什么编译器?64有E口吗?没用过64,就用过32L和644

使用特权

评论回复
地板
zhaohualiang|  楼主 | 2011-10-10 11:07 | 只看该作者
用winavr,64有ABCDEFG7个口。

使用特权

评论回复
5
zhaohualiang|  楼主 | 2011-10-10 14:44 | 只看该作者
反复查了好几天一直没有解决,DRDY一直为高

使用特权

评论回复
6
chenczy| | 2011-10-10 15:15 | 只看该作者
IO口的设置有没设好?

使用特权

评论回复
7
weizheng07| | 2011-10-10 16:16 | 只看该作者
一个小建议,这个一般不是逻辑的错误,我也错过,因为51那个属于老牛,拉扯的速度也慢,因此时序没有问题,你可以自己算算,51的总线速度,24/12/2~3,一般一个mov也要2个周期.avr再怎么说速度也会达到8m吧,你还用你以前写的程序,你都配置结束了,估计你那个ad还在做梦呢

使用特权

评论回复
8
yinyangdianzi| | 2011-10-10 16:33 | 只看该作者
AVR转STM8/STM32怎么样呢

使用特权

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

本版积分规则

52

主题

218

帖子

1

粉丝