le 04-29-2009 10:33 AM
Bonjour,
je voudrais générer un signal analogique. j'ai une carte PCI-6110 avec une BNC-2110 et je code en C avec un simple éditeur de texte. mon driver est le nidaqmxbase 3.2.0.
la carte est bien détectée (lsdaq donne Dev1... ). j'utilise Mandrive 2007 32 bit.
la compilation se fait sans erreurs avec gcc myprogram.c -o myprogram -I/usr/local/natinst/nidaqmxbase/include/ -Wall /usr/local/lib/libnidaqmxbase.so
lors de l'exécution, j'obtiens cette erreur : Value passed to the Task/Channels In control is invalid.
avez vous des idées?
Merci d'avance
Pedro
voici mon program :
#include <math.h>
#include <NIDAQmxBase.h>
#include <stdio.h>
#include <time.h>
#define DAQmxErrChk(functionCall) { if( DAQmxFailed(error=(functionCall)) ) { goto Error; } }
#define PI 3.1415926535
static int gRunning=0;
int main(int argc, char *argv[])
{
// Task parameters
int32 error = 0;
TaskHandle taskHandle = 0;
int32 i = 0;
char errBuff[2048]={'\0'};
time_t startTime;
bool32 done=0;
// Channel parameters
char chan[] = "Dev1/ao0";
float64 min = -10.0;
float64 max = 10.0;
// Timing parameters
#define bufferSize 512
uInt64 samplesPerChan = bufferSize;
float64 sampleRate = 20000.0;
// Data write parameters
float64 data[bufferSize];
int32 pointsWritten;
float64 timeout = 10.0;
for(;i<bufferSize;i++)
data[i] = 9.95*sin((double)i*20.0*PI/(double)bufferSize);
DAQmxErrChk (DAQmxBaseCreateTask("",&taskHandle));
DAQmxErrChk (DAQmxBaseCreateAOVoltageChan(taskHandle,chan,"",min,max,DAQmx_Val_Volts,NULL));
DAQmxErrChk
(DAQmxBaseCfgSampClkTiming(taskHandle,"Dev1/ao/SampleClock",sampleRate,DAQmx_Val_Rising,DAQmx_Val_FiniteSamps,samplesPerChan));
DAQmxErrChk
(DAQmxBaseWriteAnalogF64(taskHandle,samplesPerChan,0,timeout,DAQmx_Val_GroupByChannel,data,&pointsWritten,NULL));
DAQmxErrChk (DAQmxBaseStartTask(taskHandle));
gRunning = 1;
// The loop will quit after 10 seconds
startTime = time(NULL);
while( gRunning && !done && time(NULL)<startTime+10 ) {
DAQmxErrChk (DAQmxBaseIsTaskDone(taskHandle,&done));
if( !done )
sleep(1);
}
Error:
if( DAQmxFailed(error) )
DAQmxBaseGetExtendedErrorInfo(errBuff,2048);
if( taskHandle!=0 ) {
DAQmxBaseStopTask(taskHandle);
DAQmxBaseClearTask(taskHandle);
}
if( DAQmxFailed(error) )
printf("DAQmxBase Error: %s\n",errBuff);
return 0;
}
le 05-04-2009 11:57 AM