Howdy,
I'm working on eliminating round trip delay following the approach listed in the last paragraph here: http://zone.ni.com/reference/en-XX/help/370520K-01/hsdio/peliminating_rtd/.
I've been able to successfully:
- Export the Data Active event to PFI1 (pxiBoxGenerate.ExportSignal(niHSDIOConstants.DataActiveEvent, "", niHSDIOConstants.Pfi1Str);)
- Physically connect PFI1 to PFI2
- Configure the acquisition start trigger to source from PFI2 (pxiBoxAcquire.ConfigureDigitalEdgeStartTrigger(niHSDIOConstants.Pfi2Str, niHSDIOConstants.RisingEdge);)
- Export the generation Sample Clock to the DDC CLK OUT pin on the VHDCI (pxiBoxGenerate.ExportSignal(niHSDIOConstants.SampleClock, "", niHSDIOConstants.DdcClkOutStr);)
- Physcially connect DDC CLK OUT to STROBE on the VHDCI
- Configure the acquisition Sample Clock to source from the STROBE pin (pxiBoxAcquire.ConfigureSampleClock(niHSDIOConstants.StrobeStr, sampleClockRate);)
As of now I can successfully generate and acquire a digital pattern without issue. However, I can't figure out how to remove the delay between the rising edge of the the Data Active event signal on PFI1 and the rising edge of the first bit of data being acquired. (I've physically interested 36 ns of delay into the system with coax so I can learn how to remove it.)
According to the last paragraph in the above link I can remove clock cycles worth of delay using the "Data Active Internal Route Delay" property (though I can't find a method for it in the C# wrapper), and I can fine tune the delay with fractions of a clock cycle using the "Data Position Delay" property which I think is implemented with the ConfigureDataPositionDelay method found in the wrapper.
At this point I'm focusing on using the latter method to adjust the delay as I don't have clock cycles worth of delay to remove. (However, I will eventually need to figure out the gross delay solution as well.) Assuming I can do this will out adjusting the gross delay, I'm trying to use the ConfigureDataPositionDelay method which has "channelList" and "delay" as its arguments. The "delay" argument is easy. There are a couple of other parts I'm unsure about:
- Should I call ConfigureDataPositionDelay on the Generate or Acquire object? Essentially is it pxiBoxGenerate.ConfigureDataPositionDelay(channelList, delay) or pxiBoxAcquire.ConfigureDataPositionDelay(channelList, delay)?
- The channelList part is confusing to me because my generateChannelList and acqurieChannelList which I use in the AssignDynamicChannels method only contain "0" and "15", respectively. They only have the one channel I'm generating on and the one channel I'm acquiring on, and the system works fine with this. However, the ConfigureDataPositionDelay methond requires the channelList at which I want to delay on. Am I assuming correctly that channels not listed in the AssignDynamicChannels method can still be delayed?
- What should I put in for channelList? "PFI1"? "PFI2?" A VHDCI connector pin number?
Any thoughts or insight would be much appreciated.
Thanks,
Harold