I am having a confusing problem with getting this hardware compare to work. I followed this example, http://zone.ni.com/devzone/cda/epd/p/id/3419 , pretty well (at least I thought), and I could get the example working, however, not the code I created based upon it. Here is my code, you can safely assume the variables are all defined and syntax before/after is good.
waveformDataU8=malloc(2*WAVEFORM_SIZE);
for(i = 0; i < WAVEFORM_SIZE; i++)
{
k=i*2;
waveformDataU8[k] = NI_DIO_0;
waveformDataU8[k + 1] = NI_DIO_L;
}
niHSDIO_InitGenerationSession(deviceID, VI_FALSE, VI_FALSE, "", &genVi);
niHSDIO_AssignDynamicChannels(genVi, genChannel);
niHSDIO_SetAttributeViInt32(genVi, "", NIHSDIO_ATTR_HWC_HARDWARE_COMPARE_MODE, NIHSDIO_VAL_HWC_STIMULUS_AND_EXPECTED_RESPONSE );
niHSDIO_ConfigureSampleClock(genVi, NIHSDIO_VAL_ON_BOARD_CLOCK_STR, sampleClockRate);
niHSDIO_ExportSignal(genVi, NIHSDIO_VAL_DATA_ACTIVE_EVENT, "", NIHSDIO_VAL_PFI1_STR);
niHSDIO_WriteNamedWaveformWDT(genVi, "", WAVEFORM_SIZE, NIHSDIO_VAL_GROUP_BY_SAMPLE, waveformDataU8);
niHSDIO_InitAcquisitionSession (deviceID, VI_FALSE, VI_FALSE, "", &acqVi);
niHSDIO_AssignDynamicChannels (acqVi, acqChannel);
niHSDIO_TristateChannels (acqVi, acqChannel, VI_TRUE);
niHSDIO_SetAttributeViInt32 (acqVi, "", NIHSDIO_ATTR_HWC_HARDWARE_COMPARE_MODE, NIHSDIO_VAL_HWC_STIMULUS_AND_EXPECTED_RESPONSE );
niHSDIO_ConfigureSampleClock(acqVi, NIHSDIO_VAL_ON_BOARD_CLOCK_STR, sampleClockRate);
niHSDIO_ConfigureDigitalEdgeStartTrigger (acqVi, NIHSDIO_VAL_PFI1_STR, NIHSDIO_VAL_RISING_EDGE);
niHSDIO_ConfigureAcquisitionSize (acqVi, WAVEFORM_SIZE, 1);
niHSDIO_Initiate (acqVi);
niHSDIO_Initiate (genVi);
niHSDIO_WaitUntilDone (acqVi, 3000);
niHSDIO_GetAttributeViInt32(acqVi, "", NIHSDIO_ATTR_HWC_NUM_SAMPLE_ERRORS, &intErrors);
niHSDIO_GetAttributeViReal64 (acqVi, "", NIHSDIO_ATTR_HWC_SAMPLES_COMPARED, &intTotal);
niHSDIO_close (genVi);
niHSDIO_close (acqVi);
printf("# of errors: %i\n",intErrors);
printf("# of samples compared: %d\n",(long)intTotal);
printf("Hit <Enter> to abort generation.\n");
getchar();
This code executes and runs perfectly, giving "0 errors, 512 samples compared". However, when I change the data to be:
" waveformDataU8[k] = NI_DIO_1;
waveformDataU8[k + 1] = NI_DIO_H;"
The code executes and prints, "256 errors, 512 compared".
Is there something wrong with my initalizations? Something I may have forgotten..?