主题:ETA101 AE101.c

  共有40233人关注过本帖    
kchmn
1楼


ETA101 AE101.c  发帖心情 Post By:2005-12-7 14:28:00   [只看该作者]

在贵公司提供的ETA101板,在AE101.c程序main中有个命令为:

i=ac910_chk();

请问ac910_chk()是什么程序,有什么作用?我没有找到对应的函数。

  单帖管理 | 引用 | 回复 回到顶部
zhl
2楼


  发帖心情 Post By:2005-12-7 18:20:00   [只看该作者]

我们提供的ETA101的测试程序是ETA101.CPP,请参看该文件。

  单帖管理 | 引用 | 回复 回到顶部
kchmn
3楼


  发帖心情 Post By:2005-12-8 12:12:00   [只看该作者]

我的光盘里没有ETA101.cpp, 请发一个到我的邮箱。另外,RS232, 485的诠释文件里没有提到putinputdata 和getoutputdata, 可否补上.谢谢

  单帖管理 | 引用 | 回复 回到顶部
zhl
4楼


  发帖心情 Post By:2005-12-8 14:14:00   [只看该作者]

ETA101.cpp已发给你。232 485的驱动程序在我们提供的光盘上都有的。

  单帖管理 | 引用 | 回复 回到顶部
kchmn
5楼


  发帖心情 Post By:2005-12-8 16:57:00   [只看该作者]

收到,谢谢

  单帖管理 | 引用 | 回复 回到顶部
kchmn
6楼


  发帖心情 Post By:2005-12-9 17:49:00   [只看该作者]

在你们提供的光盘上的AE101.c文件,用到了library: graph.h,我查了书和程序,中间没有graph.h这个头文件,也没有_settestposition, _clearscreen等欲处理文件。只有个graphics.h,但是也没有上述文件。 请问可否提供这个头文件及相关文件?还有,就算祛除有关graph.h的命令,程序依然没有办法compile. ac910_chk() 等等文件都不存在。ETA101.cpp只是AD部分,有没有完整的(包括speedtest,poll,dio等)可以直接用的头文件和对应cpp文件?

  单帖管理 | 引用 | 回复 回到顶部
zhl
7楼


  发帖心情 Post By:2005-12-9 17:59:00   [只看该作者]

ETA101.cpp提供的AD采样部分,因为只有一个函数,就都放在一起了。
IO的操作可通过直接读写端口地址来实现inportb( ) 、outportb( ),所以就没提供专门的程序。

  单帖管理 | 引用 | 回复 回到顶部
kchmn
8楼


  发帖心情 Post By:2006-2-6 16:55:00   [只看该作者]

在用ETA101进行数据转换的时候,发现读数错误。例如在选择-5 -- +5的时候,在(-5,-3.5)返回值从0单调递增到接近4000,但是在(-3.5, -2)又出现(2xx,3xxx)的单调变化。 总结的说,数据被分成了若干小段,每一段是0-4095的变化。请问是什么问题,我的程序如下:
#define BaseAddress 0x300

//range 0 1 2 for 5 10 +-5 respectively

float GetADData(int ChIdx, int Range, char* dir)
{
   unsigned int  i1,i;
   unsigned char ub1, ub2;
   float         f1;

   ub1 = (unsigned char)(ChIdx&0x0f);
   ub2 = (unsigned char)(Range&0x03);
   ub1 = ub1|(ub2<<5);

   outp( BaseAddress, ub1 );      // set channel number and range
   for(i1=0;i1<2;i1++)                //start ad,do conversion twice to wait stable.
     inp(BaseAddress+1);
     do{
i=inp(BaseAddress)&1;
     }while(i!=0);
//   for( i1=0; i1<10; i1++ );       // delay for a while (>6us)
//   inportb( BaseAddress+1 );       // start AD convert
   i1 = inpw( BaseAddress+2 );
//   f1 = 5.0 * (i1&0x0FFF-2048) / 2048.0;
   f1=i1&0x0FFF;
   if (dir==NULL) return f1;

   return f1;
}


我有2块ETA101卡,都试过了,同样的问题。

  单帖管理 | 引用 | 回复 回到顶部
yl
9楼


  发帖心情 Post By:2006-2-7 16:34:00   [只看该作者]

我们进行了测试,读数是没有问题的。你的程序里面取数的部分可能是造成错误的原因。在ETA101的手册上面有说明,读出的16位数的后四位是无效的,因此应该在读数以后取高12位,而不是低12位。具体方法是将读出的数据右移4位。如下:
....
unsigned int data;
....
(这一部分是设置以及启动转换和判断转换结束的代码)
data = inport( BaseAddress+2 );
data = data>>4;
....

  单帖管理 | 引用 | 回复 回到顶部

返回首页

ETA101 AE101.c

用户名:
            验证码: 验证码,看不清楚?请点击刷新验证码
内容: