Esempio n. 1
0
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]))
Esempio n. 2
0
# 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