Digital I/O

cancel
Showing results for 
Search instead for 
Did you mean: 

pci 6551 writenamedwaveformwdt c++

Hello,
I'm working on generating and acquiring data.
0 Kudos
Message 1 of 3
(3,134 Views)
Hello,
I'm working on generating and acquiring data using the pci 6551 with visual c++.
Since I require a channel to go into high impedance during acquisition, im using writenamedwaveformwdt function. However , I don't quite understand what the 3rd parameter (samples to write) should be. According to the help file it is the number of channels multiplied by waveform size, but during debugging I get memory corruption error. Snippets of my code is as follows:

#define WAVEFORM_SIZE 100000
#define WDT_SIZE 100000
#define SAMPLES_TO_READ 50
  
ViRsrc deviceID = "Dev1";
   ViConstString channelList = "0-3";
   ViInt8 VoltageConfigurationSupported = 0;
   ViReal64 sampleClockRate;
   ViConstString triggerSource = "PFI2"; //generation trigger
   ViInt32 triggerEdge = 12;
   ViConstString triggerID = "ScriptTrigger0";
   ViInt32 dataWidth = 4;
   ViUInt8 waveformData[WAVEFORM_SIZE];
   ViConstString waveformName = "myWfm";
for (bit = 0; bit < 1000 ;bit++)
     {
     waveformData[z] = 0;
     z++;
     waveformData[z] = 0;
     z++;
     waveformData[z] = 1;
     z++;
     waveformData[z] = 0;
     z++;
bit++;
    }
 
 /* Note: waveform names are referenced in script */
   ViConstString script =
      "script myScript "
      "   repeat forever "
      "     wait until ScriptTrigger0 "
      "     repeat 1 "
      "     generate myWfm "
      "     end repeat "
      "   end repeat "
      "end script";
 
/* Initialize generation session */
   checkErr(niHSDIO_InitGenerationSession(
            deviceID, VI_FALSE, VI_FALSE, VI_NULL, &gvi));

 /* Reset Device */
   checkErr(niHSDIO_ResetDevice (gvi));
 
   /* Assign channels for dynamic generation */
   checkErr(niHSDIO_AssignDynamicChannels (gvi, channelList));
            
   /* Configure clocking parameters */
   checkErr(niHSDIO_ConfigureSampleClock(
            gvi, NIHSDIO_VAL_ON_BOARD_CLOCK_STR, sampleClockRate));

            
   /* Configure hardware script trigger */
   checkErr(niHSDIO_ConfigureDigitalEdgeScriptTrigger(
            gvi, triggerID, triggerSource, triggerEdge));
           
   /* Configure generation mode for scripted generation */
   checkErr(niHSDIO_ConfigureGenerationMode(gvi, NIHSDIO_VAL_SCRIPTED));
   checkErr(niHSDIO_WriteNamedWaveformWDT(gvi,waveformName,WDT_SIZE,NIHSDIO_VAL_GROUP_BY_SAMPLE,waveformData));
    
   /* Write script to device */
   checkErr(niHSDIO_WriteScript(gvi, script));
/* Initiate generation */
   checkErr(niHSDIO_Initiate(gvi));
 
There isn't any error code, the program just terminates, unless running in debug mode.
When I reduce wdt_size to 8 the data isn't what im expecting...
Any suggestions?
 
Thanks,
Arifa
0 Kudos
Message 2 of 3
(3,131 Views)
Hi,
Please stick to one post on the same issue please.
Thanks,
0 Kudos
Message 3 of 3
(3,115 Views)