PROGRAMMER’S GUIDE AGILENT ACQIRIS INSTRUMENTS
U1092-90003 E-Rev: L, February 2011 The information in this document is subject to change without notice and may not be construed in any way as a commitment by Agilent Technologies, Inc. While Agilent makes every effort to ensure the accuracy and contents of the document it assumes no responsibility for any errors that may appear. All software described in the document is furnished under license. The software may only be used and copied in accordance with the terms of license.
CONTENTS 1. INTRODUCTION ................................................................................................................................................ 5 1.1. Message to the User ....................................................................................................................................... 5 1.2. Using this Manual .......................................................................................................................................... 5 1.3.
3.8. Configuring AP101/AP201 Analyzers ......................................................................................................... 30 3.9. Configuring TC8xx Time-to-Digital Converters.......................................................................................... 31 3.10. Data Acquisition....................................................................................................................................... 31 3.10.1. Starting an Acquisition ............................
1. Introduction 1.1. Message to the User Congratulations on having purchased an Agilent Technologies Acqiris data conversion product. Acqiris Instruments are high-speed data acquisition modules designed for capturing high frequency electronic signals. To get the most out of the products we recommend that you read the accompanying product User Manual, this Programmer's Guide and the Programmer‟s Reference manual carefully.
LabWindowsCVI, Visual C++, LabVIEW, MATLAB, Visual Basic, Visual Basic .NET. 1.3. Conventions Used in This Manual The following conventions are used in this manual: This icon to the left of text warns that an important point must be observed. WARNING Denotes a warning, which advises you of precautions to take to avoid being electrically shocked. CAUTION Denotes a caution, which advises you of precautions to take to avoid electrical, mechanical, or operational damages.
2. Programming Environments & Getting Started Agilent Technologies supplies sample programs as a starting point for the development of user-specific Acqiris applications. For Windows systems there are samples for the Visual C/C++, Visual Basic, LabWindows/CVI, LabVIEW, and MATLAB. For VxWorks real-time systems there are sample programs for Tornado.
#include "AcqirisD1Import.h" or #include "AcqirisT3Import.h" at the beginning of every file that will access Acqiris Device Driver functions. The project should include the AqDrv4.lib file. 2.3. LabVIEW NOTE: All new software development should use recent platforms, i.e. LV 8.x. Support for LV 7.1 will continue only for the older models (the LLBs are frozen as of Release 3.2). New models/families will only be supported on LV 8.x.
The AqBx Examples section contains three very simple cases to show some basic functionality. The AqDx Digitizer functions family contains the following vi‟s. The diagram also shows the AqBx tree. These AqBx functions are to be preferred over their AqDx equivalents. The AqTx Time-to-Digital Converter functions family contains the following vi‟s. The diagram also shows the AqBx tree.
2.3.1. LabView 7.x/8 with old LabView programs If you have an existing LabView program you can still use it or develop further under LabView 8. You can continue to use the VI‟s and libraries of the LabView 7.1 environment. If you are still using the AqDx versions under LabView 7.x they will not immediately be found when you load your vi. LabView will ask you which library should be used; you should enter the name of the library of obsolete functions, AqDx_obs.llb. 2.3.2.
2.3.3. AqDx Example Scope VI This VI presents a basic, interactive virtual oscilloscope using the AqDx Digitizer Driver. Not all the functionality of the Acqiris digitizers is supported in this program, but most of the most-commonly-used functions are demonstrated in it. 2.3.4. AqDx Accumulated Waveform Example VI This VI demonstrates how to use the Accumulate Waveform function of the Acqiris Digitizer Driver.
2.3.5. AqTx TC840 VI This VI demonstrates how to use a TC840 Time-to-Digital Converter. It finds and initializes an instrument, sets the basic parameters according to the controls on the front panel, and then acquires and accumulates data as the user requests. Note that the front panel controls should be set to their desired values before the VI is run.
2.3.6. AqTx TC842 VI This VI demonstrates how to use a TC842 Time-to-Digital Converter. It finds and initializes an instrument, sets the basic parameters according to the controls on the front panel, and then acquires and accumulates data as the user requests. Note that the front panel controls should be set to their desired values before the VI is run.
2.3.7. AqTx TC890 VI This VI demonstrates how to use a TC890 Time-to-Digital Converter. It finds and initializes an instrument, sets the basic parameters according to the controls on the front panel, and then acquires and accumulates data on the common and the chosen channel as the user requests. Note that the front panel controls should be set to their desired values before the VI is run.
2.4. Visual Basic .NET Visual Basic .NET support is available with example programs in the \VB.NET directory. The VB.NET sample program comes in 8-bit single segment or multi-segment versions. The .vbproj and _x64.vbproj files give access to the complete application, respectively for the 32-bits and 64-bits version of the operating system. The \include directory contains the .vb and _x64.vb files needed to access the Acqiris driver.
2.6.4. Standard library You must include the C++ standard library in the VxWorks image to be able to use the Agilent Acqiris driver for VxWorks. 2.6.5. Example program The VxWorks sample program is written for the Tornado environment. The GetStartedVxW.
3. Programming an Acqiris Instrument 3.1. Programming Hints When programming an Acqiris instrument it is important to remember that the Acqiris driver must be freshly loaded (this is usually automatic) by any process that uses the modules. This means that each process starts over with a completely clean view of the system and no knowledge of any previously determined calibration constants or settings. Thus a calibration ought to be done, or loaded, before the modules are used for any acquisitions.
3.2.1.
3.2.4. VXI Identification Instruments in IX20x VXI Carrier modules will also be found by the driver. The resource name will be in the form “VXI[board]::[logical_addr]::INSTR” like “VXI0::1::INSTR”. 3.2.5. PXI VISA & LabViewRT Identification The driver can also be used in the VISA environment. In this case the resource name has the following allowed forms: "PXI::::INSTR" "PXI0::-::INSTR" "PXI0::CHASSIS::SLOT::INSTR" 3.2.6.
ViSession instrumentID[10]; long nbrInstruments; ViStatus status; ViString options = ""; status = AcqrsD1_multiInstrAutoDefine(options, &nbrInstruments); // Retrieve the instrument identifiers for (long i = 0; i < nbrInstruments; i++) { char resourceName[20]; sprintf(resourceName, "PCI::INSTR%d", i); status = Acqrs_InitWithOptions(resourceName, VI_FALSE, VI_FALSE, options, &(instrumentID[i])); } The calls to Acqrs_InitWithOptions are needed to obtain the instrumentID’s.
// Initialize the digitizers for (long i = 0; i < nbrInstruments; i++) { char resourceName[20]; sprintf(resourceName, "PCI::INSTR%d", i); status = Acqrs_InitWithOptions(resourceName, VI_FALSE, VI_FALSE, options, &(instrumentID[i])); } // Now combine the first 3 digitizers (in inverse order) idList[0] = instrumentID[2]; idList[1] = instrumentID[1]; idList[2] = instrumentID[0]; ViSession multiInstrID; ViSession masterIndex = instrumentID[1]; long nbrInList = 3; status = AcqrsD1_multiInstrDefine(idList, nbrInL
3.2.10. Simulated Devices If you want to work with simulated devices, none of the methods above are applicable. Many digitizer modules supported by the driver can be simulated; analyzers and averagers generate data in digitizer mode.
NOTE: The AcqrsXX_get functions return the configuration values to be used for the next acquisition. Use the following short code fragment for a device configuration: // Configure double sampInterval = 1.e-9, delayTime = 0.0; long nbrSamples = 10000, nbrSegments = 1; long channel = 1, coupling = 1, bandwidth = 0; double fullScale = 2.0, offset = 0.0; long trigCoupling = 0, trigSlope = 0; double trigLevel = 20.
To set the external trigger range for a DC271-FAMILY, a 10-bit-FAMILY, or a U1071A-FAMILY module, or an AP240/AP235 signal analyzer platform, add a call to AcqrsD1_configVertical with channel = -1 before the call to AcqrsD1_configTrigSource. The 10-bit-FAMILY & U1071A-FAMILY dual source pattern triggers can be activated by calling the function AcqrsD1_configTrigClass with an appropriate TrigClass and a sourcePattern indicating the two desired sources. 3.4. Configuring Averagers 3.4.1.
The value startDelay controls the time between the trigger and the first data sample that is to be added to the averager sum. The stopDelay permits the addition of an extra delay to the dead time between the averaging of subsequent waveforms. Its minimum value is zero. The ditherRange value may be between 0 (no dithering) and 15 (max dithering). Please refer to the next section for further explanations. 3.4.2.
AcqrsD1_getAvgConfig(instrID, channelNbr, "TrigResync", &reSync); AcqrsD1_configAvgConfig(instrID, channelNbr, "TrigResync", &freeRun); AcqrsD1_acquire(instrID); long timeOut = 1000; // depends on conditions! AcqrsD1_waitForEndOfAcquisition(instrID, timeOut); long nbrPoints = ???; // Should be the „current‟ number of points! long timeStampLo, timeStampHi, nbrReturnedSamples; double horPos, sampTime; // Read the Waveform directly to the Background buffer double bckGndWform[nbrPoints]; AcqrsD1_readRealWform(
3.4.4. Configuring Noise Suppressed Accumulation (NSA) As discussed in the User Manual Family of Averagers the module can be configured to only accept data above a fixed threshold and, if desired, to shift the data in that case. Since these two values are expressed in Volts and used as ADC counts they have to be converted before use. The User Manual describes this transformation that depends on whether Data Inversion has been enabled. The NSA threshold functionality must be enabled and a threshold defined.
integer multiple. Thus, nbrSamples = 250 will be truncated to 240 (15 * 16) for a Dual-channel acquisition, and to 224 (7 * 32) for a Single-channel acquisition. You can query the actual value with the function AcqrsD1_getAvgConfig. The value startDelay controls the time between the trigger and when the first digitized data sample is stored. It should also be noted that when startDelay is 0, the first few data points, 5 in the case of Dual-channel mode and 10 in the Single-channel mode, will always be 0.
long channel = 1, gate =2; AcqrsD1_configAvgConfig(instrID, channel, "GateType", &gate); long preSamples = 0, postSamples = 0, maxGates = 1; double threshold = 0.0; // in Volts status = AcqrsD1_configAvgConfig(instrID, channel, "PreSamples", &preSamples); status = AcqrsD1_configAvgConfig(instrID, channel, "PostSamples", &postSamples); status = AcqrsD1_configAvgConfig(instrID, channel, "Threshold", &threshold); status = AcqrsD1_configAvgConfig(instrID, channel, "NbrMaxGates", &maxGates); 3.5.3.
3.7. Configuring U1084A PeakTDC Analyzers In addition to the normal Digitizer setup, such as the trigger setup and full scale, you should configure the following settings when using the U1084A in mode: // Configure peak detection ViInt32 numberOfSamplesPerSeg = 4096; ViInt32 numberOfSegments = 1; ViInt32 numberOfTriggersPerSeg = 50; ViReal64 startDelta=0.1,validDelta = 0.
delayTime of the function AcqrsD1_configHorizontal is replaced by “StartDelay” and “StopDelay” nbrSamples and nbrSegments of the function AcqrsD1_configMemory are replaced by “NbrSamples” and “NbrSegments” in the function AcqrsD1_configAvgConfig. The values nbrSamples, startDelay and stopDelay must be integer multiples of the „acquisition block size‟, which is always 16 in the AP101, and 32 in the AP201.
3.10.1. Starting an Acquisition Use the following line of code for starting an acquisition in a D1-style instrument: AcqrsD1_acquire(instrID); // start the acquisition or the following line of code for starting an acquisition on a Time-to-Digital Converter: AcqrsT3_acquire(instrumentID); // start the acquisition One such command is required for each module in use. However, if several digitizers are combined to a single MultiInstrument with AS bus, only a single command is needed for the combined instrument.
(C) Waiting for Interrupt: ViStatus status; long timeOut = 100; // status = AcqrsD1_waitForEndOfAcquisition(instrID, timeOut); if (status == ACQIRIS_ERROR_ACQ_TIMEOUT) // timeout, stop STOP ACQUISITION This method combines low CPU usage with very good response time: The function enables the instrument‟s 'end-of-acquisition' interrupt and sets up a semaphore that waits for this interrupt.
3.10.5. Simultaneous multibuffer Acquisition and Readout (SAR) The U1071A-FAMILY and the 10-bit-FAMILY allow the internal memory‟s dual-port structure to be exploited. Data acquisition and read out can be done simultaneously. This requires the use of a slightly different programming model. Configure: In addition to the usual configuration parameters, the application must enable the SAR mode by calling AcqrsD1_configMemoryEx with 'nbrBanks = 2' (or more, 3 is a good choice).
3.10.6.1. Sequence of actions for SSR mode with event readout The SSR Autoswitch semaphore is set by the software and cleared by the FPGA. If the readout process is longer than the acquisition process, the AutoSwitch occurs directly after the software raises the AutoSwitch semaphore. At the moment that the ProcessingEnd interrupt occurs, the FPGA has already cleared the AutoSwitch. disabled int. disabled int ac q Bank 0 0 ac q Bank 1 1 disabled int.
status=AcqrsD1_acquire(instrID); // Start the acquisition processType = 0; for (;;) //loop forever { status=AcqrsD1_processData(instrID, processType, 1); status=AcqrsD1_waitForEndOfProcessing(instrID, timeout); status=AcqrsD1_readData(instrID, channel, &readPar, &adcArray, &dataDesc, &segDesc); } To keep the same interface for the AP240 as was the case for the AP101/AP201, the processing step is kept but the “dummy” processing value is used.
3.11.1. Reading Digitizer Waveforms with the Universal Read Function For the general case, which includes the reading of more complex waveforms, we provide a universal read function AcqrsD1_readData. Control of the read parameters is passed through the input structure AqReadParameters. For the description of the output data an array of segment descriptors, AqSegmentDescriptor, and a waveform descriptor, AqDataDescriptor, are returned. These structures are defined in the header file AcqirisDataTypes.h.
and, for users with segmentOffset > nbrSamplesInSeg, arraySize ≥ segmentOffset * (nbrSegments+1) * (dataType + 1) with segmentOffset , nbrSamplesInSeg where the currentSegmentPad depends on the acquisition configuration and can be determined using the following call, Acqrs_getInstrumentInfo(instrID, ”TbSegmentPad”, ¤tSegmentPad); for data that has already been acquired or Acqrs_getInstrumentInfo(instrID, ”TbNextSegmentPad”, ¤tSegmentPad); for data to be acquired after the next call to AcqrsD1_ac
long long char long long nbrSegments = 10; nbrPoints = 1000; *dataArrayP; currentSegmentPad; nbrSamplesNom, nbrSegmentsNom; AqReadParameters *readPar = new AqReadParameters; AqDataDescriptor *dataDesc = new AqDataDescriptor; AqSegmentDescriptor *segDesc = new AqSegmentDescriptor[nbrSegments]; readPar->dataType = 0; // 0 = byte readPar->readMode = 1; // 1 = sequence waveform readPar->nbrSegments = nbrSegments; readPar->firstSampleInSeg = 0; readPar->segmentOffset = nbrPoints; readPar->firstSegment = 0; rea
3.11.4. Averaging Waveforms in a Digitizer The driver includes 4 functions provided to improve performance when averaging waveforms. The first pair of functions, AcqrsD1_averagedData for any digitizer (and the older AcqrsD1_averagedWform for 8-bit digitizers only), are meant only for single channel, single segment operation. They average a predefined number of waveforms, taking care of the acquisition loop internally.
AqReadParameters readParams; // Read Definitions AqDataDescriptor wfDesc; // Returned (common) waveform values AqSegmentDescriptorAvg segDesc; // Returned segment values long channel = 1, nbrSamples = 20000; double waveformArray[20000]; readParams.dataType = ReadReal64; // Request Volts readParams.readMode = ReadModeAvgW; readParams.nbrSegments = 1; readParams.firstSampleInSeg = 0; readParams.segmentOffset = nbrSamples; readParams.firstSegment = 0; // Read first segment readParams.
3.11.5.2. Averaged Waveforms as 32-bit Sums You must use the general-purpose function AcqrsD1_readData. Use this code fragment: AqReadParameters readParams;// Read Definitions AqDataDescriptor wfDesc; // Returned (common) waveform values AqSegmentDescriptorAvg segDesc; // Returned segment values long channel = 1, nbrSamples = 20000; long waveformArray[20000]; readParams.dataType = ReadInt32; // Request 32-bit sums readParams.readMode = ReadModeAvgW; readParams.nbrSegments = 1; readParams.
3.11.7.2. Raw data The complete data should only be read out using the gated data mode described below. An appropriate User Gate can be defined to access all of the data. 3.11.7.3. Gated data Data can be read for both user and threshold gate operation using readMode = 7 (ReadModeSSRW). The waveform descriptor structure contains the value actualDataSize giving the total number of data bytes read. A time stamp block, measuring the trigger time, will mark the beginning of each segment.
Peak region block 8 points 31..24 (8 bits) 23..16 (8 bits) 15..8 (8 bits) 7..0 (8 bits) 0x00 Valid Left Valid Right 31..24 (8 bits) 23..16 (8 bits) 15..8 (8 bits) 7..0 (8 bits) Sample(tmax) Sample(tmax-1) Sample(tmax-2) Sample(tmax-3) Sample(tmax+4) Sample(tmax+3) Sample(tmax+2) Sample(tmax+1) 15..8 (8 bits) 7..0 (8 bits) 0x00 Valid Left Valid Right 31..24 (8 bits) 23..16 (8 bits) 15..8 (8 bits) 7..
3.11.8.4. Reading the histogram The accumulated histogram can be read out using readMode = 9 (ReadModeHistogram). The dataType and dataArraySize must be selected to correspond to the size of the histogram and its bins. The waveform descriptor structure contains the value actualDataSize giving the total number of data bytes read. The individual histogram bins will be able to contain accumulated sums of either 2**32, as ViUInt32, or 2**16, as ViUInt16. Histogram bin is 32 bits wide 31..
With the function AcqrsD1_readData, use this code fragment: AqReadParameters readParams; // Read Definitions AqDataDescriptor dataDesc; // Returned waveform values AqSegmentDescriptor segDesc; // Returned segment values long channel = 1, nbrSamples = 4000000; char waveformArray[4000000]; readParams.dataType = ReadInt8; readParams.readMode = ReadModeStdW; readParams.nbrSegments = 1; readParams.firstSampleInSeg = 0; readParams.segmentOffset = nbrSamples; readParams.
const int NbrGates = 64; long channelNbr = 0; long configObj = AvgGate; long lastGate; AqGateParameters gatePara[NbrGates]; AcqrsD1_getSetupArray (instrID, channelNbr, configObj, NbrGates, gatePara, &lastGate); Make sure to use a pointer to the last argument, since it returns the number of gates. lastGate cannot exceed the number of gates being written. To read the gated waveforms, use the function AcqrsD1_readData.
1. Configure the APXXX for appropriate channel, timebase, trigger, and gate parameters. 2. Start the first acquisition. 3. Give the order to switch banks and start the next acquisition and data processing on the current acquisition as soon as possible. The processing can overlap with the data acquisition since it automatically deals with the memory bank that is not selected for acquisition. If you need to read the original data choose the "no processing" option. 4.
bool finished = false; while(!finished) { memoryBank = (memoryBank + 1)&0x1;// switch to other bank AcqrsD1_configMode(instrID, 3, 0, memoryBank); AcqrsD1_acquire(instrID); // start new acquisition AcqrsD1_processData(instrID, 0, 0);// start processing AcqrsD1_waitForEndOfProcessing(instrID, timeout); // At this point, you should check the return value! readParams.dataType = ReadReal64; readParams.readMode = ReadModePeak; readParams.nbrSegments = 1; readParams.firstSampleInSeg = 0; readParams.
3.12. T3-style Data Readout For the reading of timer data the AcqrsT3_readData routine should be used. Control of the read parameters is passed through the input structure AqT3ReadParameters. The output format is determined by these values as well as the type of module in use. TC890 TOF modules use a direct read out of the modules data for maximum throughput. The PC does not have to analyze the data coming from the module. The data are packed into 4-byte timer hits for each signal.
By convention, the nominal trigger delay is taken relative to the beginning of the trace, i.e. relative to the left edge of a real or virtual display grid. It can be interpreted as the time from the trigger to the start of waveform recording. If this number is positive, recording starts after the trigger (post-trigger acquisition). If it is negative, recording starts before the trigger (pre-trigger acquisition).
The value of delayTime positions exactly the left edge of the display (or the exact nominal beginning of the waveform) with respect to the “stable” trigger time, which is the real reference point. We define the time 'trigger time + delayTime' as the time origin for the waveform, which is equivalent to saying that the trigger always occurs exactly at the time -delayTime. The first data point of the waveform is defined as the last acquired data point before the time origin.
xStampLo = tStampLo End If timeStamp = CDec(tStampHi * Two32) + xStampLo ... timeDiff = timeStamp – previousStamp Arithmetic operations between such decimal variants can be done as with other integer variables. The manipulation of tStampLo is somewhat complicated because this variable is a signed 32-bit integer, but must be added as an unsigned integer to the (shifted) tStampHi. In LabVIEW, convert the time stamp to an extended floating point number, and do arithmetic operations as with other variables.
3.17.2. External Clock (Continuous) The continuous external clock mode (clockType = 1) permits the application to the digitizer of a continuous, constant frequency, external clock in order to sample at an arbitrary frequency.
Model Input Frequency range (MHz) sFmax vs.
uncertainty of ± 0.5 samples. For implementation reasons, the acquired waveform in fact has a timing uncertainty that is twice as large, i.e. ± 1 samples. In this case, the trigger time stamps of the sequence acquisition mode are not available. Depending on the ratio of sampFrequency/inputFrequency , a waveform is sampled either on negative-going transitions of the external clock signal through the user-defined threshold or, when the ratio is > 1, on both of the transitions.
AcqrsD1_configMemory(instrID, 100000, 1); AcqrsD1_configExtClock(instrID, 4, threshold, 0, 0.0, 0.0); AcqrsD1_acquire(instrID); // start the acquisition Generate 5000 bursts of 200 clock pulses at the required frequency. At the end, you need to generate ≥ 160/320/640 additional clock pulses. AcqrsD1_waitForEndOfAcquisition(instrID, timeOut); AcqrsD1_readXXXWform(instrID, . . .
E.g. when combining 3 DC270 4-channel digitizers, you would use channel number 10 in the function calls config/get_MultiInput, config/get_Vertical and readData, if you wanted to refer to Input 2 of the third DC270. Channel numbering does not depend on which module is the actual clock or trigger master. 3.18.2. Trigger Source Numbering with AS bus Acqiris digitizers do not necessarily have as many internal triggers as channel inputs, nor exactly one external trigger.
if (trigChan > 0) // Internal Trigger { long moduleNbr = (trigChan - 1) / nbrIntTrigsPerModule; long inputNbr = (trigChan - 1) % nbrIntTrigsPerModule; srcPattern = (moduleNbr<<16) + (0x1<>inputNbr); } else PROBLEM! Note that moduleNbr and inputNbr start from 0.
The apertureTime defines the minimum time for a frequency measurement (it may be longer if the frequency is very low!). In the Totalize by Time mode, the value of apertureTime determines the time window during which the input pulses are counted. The frequency counter mode is set with the function AcqrsD1_configMode, with mode = 6. After configuring the instrument parameters, the measurement sequence is started with the function AcqrsD1_acquire. This function returns before the measurement is terminated.
AcqrsD1_stopAcquisition. This mode is available in all digitizers except the U1071A-FAMILY and the 10-bitFAMILY. This mode is useful when only the last N out of many occurrences of a signal are of interest. E.g. if you search for a rare event out of many occurrences, and you only can determine its interest after the event has occurred, then the „Sequence Wrap‟ mode is applicable. While this mode even „works‟ for nbrSegments = 1, in practice the value of nbrSegments should be at least 3.
Acqrs_InitWithOptions(resourceName, false, false, "CAL=FALSE", &instrID); It is important to specify “CAL=FALSE” to prevent any calibration in the digitizer, which would destroy any retained data. 2. Call the functions AcqrsD1_configHorizontal, AcqrsD1_configMemory, AcqrsD1_configVertical (for each channel!) with the same parameters that were used in the original acquisition. 3. Call the function AcqrsD1_restoreInternalRegisters, with the parameters delayOffset and delayScale.
4. Appendix A: Estimating Data Transfer Times The time to transfer a waveform may be a significant part of the execution time of a program, and thus becomes an important design consideration for new applications. We present here a simple timing model with the aim of predicting the transfer time for digitizer readout as a function of the number of segments, number of samples, CPU speed and the operating system. 4.1.
5. Extra Type 300 / sampInterval + 98 digitizers with 300 / sampInterval + 194 digitizers with 2 GS/s maximum sampling rates or DC271-FAMILY instruments set for a combine channel mode allowing 2 GS/s 300 / sampInterval + 386 DC271-FAMILY instruments set for a 4 GS/s combine channel mode 1 GS/s maximum sampling rates The copying time Cpy per 8-bit sample is ~ (5 s) / (Pentium CPU speed in MHz). Thus, for a 250 MHz Pentium Cpy is ~ 0.02 s, and for a 500 MHz Pentium it is ~ 0.01 s.
(B) DC270 connected to a 500 MHz Pentium with a MXI-3 interface: Transferring single records of 100'000 samples, recorded at 100 MS/s: M 1 N Ovhd DMA 100 000 Xfr 0.012 Cpy 100 Ovhd buffer T1 M Ovhd DMA T2 Ovhd DMA 5 Extra M N Xfr M Ovhd buffer 0.01 240 10 96 120 100 1200 1300 s M N Extra Xfr M N Cpy 100 5 100120 0.012 100 000 0.01 2306 s It is therefore more favorable to use the function AcqrsD1_readData for readMode = 0.
Comments: We assume a 2 GS/s digitizer running at the highest sampling rate, direct connection of the digitizer to the host PCI bus or through the SBS-Bit3 interface (Acqiris model number IC200), Windows NT. R T2 T1 If R > 1.0, a loop over AcqrsD1_readData for readMode = 0 is faster than AcqrsD1_readData for readMode = 1 (ReadModeSeqW).