打印

我的AD7705问题请教帮忙

[复制链接]
3024|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 zyw4210 于 2011-1-7 12:41 编辑

:dizzy: 我用AD7705和STC89c52做一个称重实验,可是它就是读不出数据,每次都要复位一下单片机会出一个数字(按住称重传感器)力度大小都是出一个8,或者12,或者56。一松手数字就消失,调了还几天了,到现在还是没效果,急急呀快放假了,不想把问题拖到明年。下边是我的电路和程序。
file:///D:/Program%20Files/Tencent/QQ/Users/1090145618/Image/WMP7]]Z%}E}LLDQA~M)1DJY.jpg

#include<REG51.H>
#include<absacc.h>
#include<intrins.h>
#include<math.h>
#define uchar unsigned char
#define uint  unsigned int
sbit yj_rst =P0^0;   //液晶17脚
sbit yj_sclk=P0^1;   //液晶6脚
sbit yj_sid =P0^2;   //液晶5脚
sbit yj_cs  =P0^3;   //液晶4脚
sbit yj_bg  =P0^4;   //控制液晶背光
uchar code asc[]="0123456789ABCDEF";
void delay(uchar x)   //延时
{
uchar y;
  for(;x>0;x--)
   for(y=124;y>0;y--);
}
void send_8bit(uchar d)  //向液晶发送数据
{
  uchar i;
  for(i=0;i<8;i++)
   {
   yj_sclk=0;
  if(d&0x80)
   yj_sid=1;
  else
   yj_sid=0;
   yj_sclk=1;
   d<<=1;
   }
}
void HT12864_drive(bit t,uchar d)  //发送命令,地址 液晶驱动
{
  uchar j;
  if(t==1)
    j=0xfa;        //指令
  else
   j=0xf8;         //否则数据
   yj_sclk=0;      //时钟
   yj_cs=1;        //片选高的时候放入
   send_8bit(j);         //发送第一个8位数据,
   send_8bit(d&0xf0);    //发送第二个8位数据的高8位
   send_8bit(d<<=4);     //发送第三个8位数据的低8位
   yj_sclk=0;
   yj_cs=0;        //为下一次发送准备
}
void HT12864_show_string(uchar add, uchar*p)  //指定一个地址 显示一个字符串
{
HT12864_drive(0,add);//0的时候是指令
while(*p)
{
  HT12864_drive(1,*p);//1的时候指针指向的内容
  p++;
}
}
void HT12864_show_data(uchar add,uchar d)   //指定地址显示一个数
{
HT12864_drive(0,add);       //add要显示的数
HT12864_drive(1,asc[d/10]);
HT12864_drive(1,asc[d%10]);
}
void HT12864_init()  //液晶初始化
{
yj_rst=0;
delay(80);
yj_rst=1;
delay(80);
HT12864_drive(0,0x0c);    //开显示关光标
HT12864_drive(0,0x01);    //清屏;
delay(100);
}
///////////////////
sbit AD7705_addata = P3^0 ;  //串行数据输出输入dout/din
sbit AD7705_sclk   = P3^1 ;  //时钟
sbit AD7705_drdy   = P3^2 ;  //逻辑输出
sbit AD7705_CS    =  P3^3;   //片选
sbit AD7705_RESET =  P3^4;   //复位
#define uchar unsigned char
#define uint unsigned int
void wrbyt(uchar shu);
int rdbyt( );
void ad7705_init( void ) ;
void addelay(uchar t);
void wrbyt( uchar shu )//写一个字节//
{
uchar  i ;
AD7705_CS=0;    //  CS ON
AD7705_sclk=1;
  _nop_();
  _nop_();
for(i=0;i<8;i ++)
{
   AD7705_addata=(bit)(shu&0x80);
   AD7705_sclk = 0 ;
    _nop_();
    _nop_();
    _nop_();
   AD7705_sclk = 1 ;
   shu = shu<<1 ;
}
  _nop_();
AD7705_CS=1;    //CS OFF
}
int rdbyt( void )//读一个字
{
int  temp ;
uchar  j ;
AD7705_CS=0;    //  CS ON
AD7705_sclk=1;
   _nop_();
for(j=0;j<8;j++)
{
    AD7705_sclk = 0 ;
     _nop_();
     _nop_();
    temp = temp<<1;
    temp|=(uchar)AD7705_addata;
     _nop_();
     _nop_();
    AD7705_sclk =1;
     _nop_();
     _nop_();
  }
  _nop_();
AD7705_CS=1;    //  CS OFF
AD7705_drdy=1;
return (temp ) ;
}
void ad7705_init( void )//初始化AD7705//
{
wrbyt( 0x20 ) ;
wrbyt( 0x0C ) ;      //写时钟寄存器//
wrbyt( 0x10 ) ;
wrbyt( 0x44 ) ;        //写设置寄存器//
}
/************************************************/
//延时函数//
/*void addelay(uchar t)
{
  uchar i;
  while(t--)
  {
  for(i=0;i<124;i++);
  }
}*/
/************************************************/
//主函数//
void main()
{
uint v_temp ;
AD7705_RESET=1;
ad7705_init() ;
  HT12864_init();
  HT12864_show_string(0x82,"A/D:");
while( 1 )
{
  while(AD7705_drdy);
  wrbyt( 0x38 ) ;
  //AD7705_addata=1;      //每次写操作后保证DIN为高电平//
  v_temp = rdbyt();   //读取数据
  HT12864_show_data(0X84,v_temp);  
  delay(50);
  AD7705_sclk=1;
  AD7705_addata=1;      //防止误读//
}
}

相关帖子

沙发
zyw4210|  楼主 | 2011-1-7 18:43 | 只看该作者
个位老师,经过一番努力我的AD7705已经工作了,这个程序还比较好用,只要把读字节函数修改一下8,改为16就可以了,电路我传不上去,相信大家根据论坛中的例子可以弄好的。

使用特权

评论回复
板凳
1121| | 2011-1-8 11:12 | 只看该作者
Ad7705,我10年前就用过,没遇到啥问题.AD7714也是一样. 我用AD7705做的测力仪表:达到国家商业3级秤的标准.

xbz.jpg (145.79 KB )

xbz.jpg

使用特权

评论回复
地板
zyw4210|  楼主 | 2011-1-8 11:19 | 只看该作者
我是用AD7705测压力,但是又咋能把读出的得值转换成压力的值呢,要和压力表的值对应起来

使用特权

评论回复
5
1121| | 2011-1-9 15:23 | 只看该作者
我是用AD7705测压力,但是又咋能把读出的得值转换成压力的值呢,要和压力表的值对应起来
zyw4210 发表于 2011-1-8 11:19

这个可是说来话长.
简单说就是Y=KX+B.K是比例系数,B是0点偏差.
如果要和某个表的数值对应起来,还可以用查表法.
如果需要线性修正,滤波等,就还需要其它软件支持.
对于最有效地利用AD7705这类集成A/D,关键是充分利用其内部两个基本校准寄存器,使其满码符合实际测量的量程...

使用特权

评论回复
6
zyw4210|  楼主 | 2011-1-20 11:13 | 只看该作者
1121你好我已经弄得差不多了,现在只是它的线性度修正有点难度,还没有弄好

使用特权

评论回复
7
zyw4210|  楼主 | 2011-1-20 11:16 | 只看该作者
另外请问51单片机可以用24M的晶振吗,STC89C52,不过我接上去好像比12的运行是快乐一点

使用特权

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

本版积分规则

2

主题

44

帖子

1

粉丝