The GX2472 is a dual differential channel, 14-bit digitizer offering a 70 MS/s ADC and 512K of memory. Each of the GX2472's differential channels has its own amplifier, filters, ADC and capture memory allowing for simultaneous waveform capture.
The following procedure demonstrates how to achieve simultaneous digitization using psuedocode. For more details, there are example projects at the end of the article. For more information, refer to the Gx2472 User's Guide.
Procedure to Achieve Simultaneous Digitization
- Setup channel parameters for each channel
- Arm both channels for triggering
- Wait for GX2472 to finish data capture
Breakdown of Procedure
Each channel saves its own parameters independently. The first step is to setup each channel's parameters. This is done by sequentially setting each channel to active, unlocking the channel to allow changes and configuring that channels parameters. In the psuedocode below, both channel's parameters will be identical.
For ChannelNumber = 1 to 2
SetActiveChannel(ChannelNumber)
UnlockChannel()
SetClockSource(...)
SetRange(...)
SetTriggerLevel(...)
SetDCOffset(...)
Next
After parameters have been set, lock the channels to initiate a capture. Each channel has it's own configurable trigger criteria. After a channel is locked, it awaits a trigger to begin data capture. Each channel has it's own trigger settings and can be connected to a different stimulus. Therefore, it is possible for one channel to trigger and begin capture while the other channel does not trigger and simply remains in the armed state. The psuedocode below demonstrates locking both channels to arm for triggering.
For ChannelNumber = 1 to 2
SetActiveChannel(ChannelNumber)
LockChannel() ! Locks access to the controller and allows channel to begin capture
Next
Now, the controller must wait for the channels to complete their data capture. This is done by repeatedly checking the status of the GX2472 to see if both channels have completed. A timeout condition should also exist in case one or both channels do not trigger and thereby never complete their data capture. The pseudocode demonstrates such a loop:
Repeat
GetTestStatus()
Until (TestComplete or TimeOut)
Finally, each channel must transfer its capture memory back to the controller. Again, we must loop through each channel, reading the memory back sequentially. The psuedocode below shows this:
For ChannelNumber = 1 to 2
SetActiveChannel(ChannelNumber)
UnlockChannel() ! Allows memory to be accessed by controller
ReadADCResults(Array[ChannelNumber])
Next
Sample Projects and Examples
The sample projects below contain working code that sets both channels for capturing a 50,000 sample waveform:- ATEasy example can be downloaded here.
- Microsoft Visual C++ 2005 example can be downloaded here.