def pico_block(handle, channel, dataFile, nbSamples, timebase, v, TriggerChannel=None, noOfPreTriggerSamples = 0): dataFileHandler = open(dataFile, mode='wb') if v: logging.basicConfig(level=logging.DEBUG) else: logging.basicConfig(level=logging.INFO) channel = PS6000channel[channel] ret = ps.ps6000SetChannel(handle, channel, enable, coupling, Vrange, offset, bdwl) assert_pico_ok(ret) if TriggerChannel: logger.debug('Starting trigger') if (TriggerChannel != 'AUX'): ret = ps.ps6000SetChannel(handle, PS6000channel[TriggerChannel], enable, coupling, Vrange, offset, bdwl) assert_pico_ok(ret) ret = ps.ps6000SetSimpleTrigger(handle, enable, PS6000channel[TriggerChannel], 0x3f00, 2, 0, 0) # 0x3f00: ~500mV, 2: PS6000_RISING, 4: PS6000_RISING_OR_FALLING, delay = 0 s, auto Trigger = 0 ms assert_pico_ok(ret) else: ret = ps.ps6000SetSimpleTrigger(handle, enable, PS6000channel[TriggerChannel], 0x0800, 2, 0, 0) # 0x0f00: ~100mv because of 50 Ohm impedence inside AuxIO, 2: PS6000_RISING, 4: PS6000_RISING_OR_FALLING, delay = 0 s, auto Trigger = 0 ms assert_pico_ok(ret) if timebase < 5: freq = 5e9/2**timebase else: freq = 156250000/(timebase-4) timeIntervalns = c_float() maxSamples = c_int32() ret = ps.ps6000GetTimebase2(handle, timebase, nbSamples, byref(timeIntervalns), 1, byref(maxSamples), 0) assert_pico_ok(ret) logger.debug("Max number of samples: {:d}".format(maxSamples.value)) if nbSamples == 0: nbSamples = maxSamples.value logger.debug("Sample rate: {}Mss".format(int(freq/1e6))) logger.debug("Number of samples: {:d}".format(nbSamples)) logger.debug("Capture length: {:.3f}us".format(timeIntervalns.value*nbSamples/1e3)) noOfPostTriggerSamples = nbSamples - noOfPreTriggerSamples ret = ps.ps6000RunBlock(handle, noOfPreTriggerSamples, noOfPostTriggerSamples, timebase, 0, None, 0, None, None) assert_pico_ok(ret) # Check for data collection to finish using ps6000IsReady ready = c_int16(0) check = c_int16(0) while ready.value == check.value: ret = ps.ps6000IsReady(handle, byref(ready)) buff = (c_int16 * nbSamples)() ret = ps.ps6000SetDataBuffer(handle, channel, byref(buff), nbSamples, downSampleRatioMode) assert_pico_ok(ret) c_nbSamples = c_int32(nbSamples) ret = ps.ps6000GetValues(handle, channel, byref(c_nbSamples), 1, 0, 0, None) assert_pico_ok(ret) logger.debug("Captured {:d} samples".format(c_nbSamples.value)) for i in range(c_nbSamples.value): dataFileHandler.write(struct.pack('h', buff[i]))
# Setting the number of sample to be collected preTriggerSamples = 400 postTriggerSamples = 400 maxsamples = preTriggerSamples + postTriggerSamples # Gets timebase innfomation # Handle = chandle # Timebase = 2 = timebase # Nosample = maxsamples # TimeIntervalNanoseconds = ctypes.byref(timeIntervalns) # MaxSamples = ctypes.byref(returnedMaxSamples) # Segement index = 0 timebase = 2 timeIntervalns = ctypes.c_float() returnedMaxSamples = ctypes.c_int16() status["GetTimebase"] = ps.ps6000GetTimebase2(chandle, timebase, maxsamples, ctypes.byref(timeIntervalns), 1, ctypes.byref(returnedMaxSamples), 0) assert_pico_ok(status["GetTimebase"]) # Creates a overlow location for data overflow = ctypes.c_int16() # Creates converted types maxsamples cmaxSamples = ctypes.c_int32(maxsamples) # Handle = Chandle # nSegments = 10 # nMaxSamples = ctypes.byref(cmaxSamples) status["MemorySegments"] = ps.ps6000MemorySegments(chandle, 10, ctypes.byref(cmaxSamples)) assert_pico_ok(status["MemorySegments"]) # sets number of captures