主题:ETA101 AE101.c 共有40236人关注过本帖 |
---|
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; .... |
|
单帖管理 | 引用 | 回复 |