PicoScope 7 Software
Available on Windows, Mac and Linux
Code: Select all
//Open my scope and get handle
short handle = ps6000aOpenUnit();
//Set channels
ps6000aSetChannelOn(handle, PICO_CHANNEL.PICO_CHANNEL_A, PICO_COUPLING.PICO_DC, PICO_CONNECT_PROBE_RANGE.PICO_2V, 0.0, PICO_BANDWIDTH_LIMITER.PICO_BW_FULL);
ps6000aSetChannelOn(handle, PICO_CHANNEL.PICO_CHANNEL_B, PICO_COUPLING.PICO_DC, PICO_CONNECT_PROBE_RANGE.PICO_5V, 0.0, PICO_BANDWIDTH_LIMITER.PICO_BW_FULL);
ps6000aSetChannelOn(handle, PICO_CHANNEL.PICO_CHANNEL_C, PICO_COUPLING.PICO_DC, PICO_CONNECT_PROBE_RANGE.PICO_5V, 0.0, PICO_BANDWIDTH_LIMITER.PICO_BW_FULL);
//Set buffers first time
//nSamples = 20480. Desired batch length of 10240, 2x ensures a full capture post trigger
//Buffer length = 20480. PICO_INT8_T data type, 2*nSamples
PICO_POINTER bufferA = new PICO_POINTER(20480);
PICO_POINTER bufferB = new PICO_POINTER(20480);
PICO_POINTER bufferC = new PICO_POINTER(20480);
ps6000aSetDataBuffer(handle, PICO_CHANNEL.PICO_CHANNEL_A, bufferA, 20480, PICO_DATA_TYPE.PICO_INT8_T, 0L, PICO_RATIO_MODE.PICO_RATIO_MODE_RAW, PICO_ACTION.PICO_ADD);
ps6000aSetDataBuffer(handle, PICO_CHANNEL.PICO_CHANNEL_B, bufferB, 20480, PICO_DATA_TYPE.PICO_INT8_T, 0L, PICO_RATIO_MODE.PICO_RATIO_MODE_RAW, PICO_ACTION.PICO_ADD);
ps6000aSetDataBuffer(handle, PICO_CHANNEL.PICO_CHANNEL_C, bufferC, 20480, PICO_DATA_TYPE.PICO_INT8_T, 0L, PICO_RATIO_MODE.PICO_RATIO_MODE_RAW, PICO_ACTION.PICO_ADD);
//Start streaming mode
Integer interval = 3.2;
ps6000aRunStreaming(handle, interval, PICO_TIME_UNITS.PICO_NS, 0L, 0L, (short)0, 1L, PICO_RATIO_MODE_RAW);
long nStreamingDataInfos = 1L;
PICO_STREAMING_DATA_INFO[] dataInfos = [{
PICO_CHANNEL.PICO_CHANNEL_A, PICO_RATIO_MODE.PICO_RATIO_MODE_RAW, PICO_DATA_TYPE.PICO_INT8_T, 0, 0L, 0, (short)0
}];
PICO_STREAMING_DATA_TRIGGER_INFO triggerInfos = [{
0L, (short)0, (short)0
}]
//Loop until aborted from external source
while(!stop) {
//Wait for buffers to fill
do {
PICO_STATUS status = ps6000aGetStreamingLatestValues(handle,dataInfos,nStreamingDataInfos,triggerInfos);
} while(status != PICO_STATUS.PICO_WAITING_FOR_DATA_BUFFERS)
//find trigger index in bufferB, grab subsets from bufferA/bufferC, pass to external thread/queue for handling
handleData(bufferA,bufferB,bufferC)
//Refresh buffers
PICO_POINTER bufferA = new PICO_POINTER(20480);
PICO_POINTER bufferB = new PICO_POINTER(20480);
PICO_POINTER bufferC = new PICO_POINTER(20480);
ps6000aSetDataBuffer(handle, PICO_CHANNEL.PICO_CHANNEL_A, bufferA, 20480, PICO_DATA_TYPE.PICO_INT8_T, 0L, PICO_RATIO_MODE.PICO_RATIO_MODE_RAW, PICO_ACTION.PICO_ADD);
ps6000aSetDataBuffer(handle, PICO_CHANNEL.PICO_CHANNEL_B, bufferB, 20480, PICO_DATA_TYPE.PICO_INT8_T, 0L, PICO_RATIO_MODE.PICO_RATIO_MODE_RAW, PICO_ACTION.PICO_ADD);
ps6000aSetDataBuffer(handle, PICO_CHANNEL.PICO_CHANNEL_C, bufferC, 20480, PICO_DATA_TYPE.PICO_INT8_T, 0L, PICO_RATIO_MODE.PICO_RATIO_MODE_RAW, PICO_ACTION.PICO_ADD);
}
//Close
ps6000aStop(handle);
ps6000aCloseUnit(handle);