def measure(config):
    mcu = ArduinoTree()
#     mcu.soft_reset()
    vcc = mcu.vcc.read()

    timer = Stopwatch()

    measurements = []

#     for _ in range(config.repeat):
    while 1:
        f = mcu.counter.read(config.gate_time)
        measurements.append(dict(
                            t=timer.read(),
                            frequency=nominal_value(f),
                            ))
        if timer.last > config.interval:
            break

    data = dict(
        vcc=vcc,
        model=avr_name(mcu),
        measurements=measurements,
        gate_time=config.gate_time,
    )

    return data
def measure(config, stop_condition=None):
    mcu = ArduinoTree()
#     if config.reset:
#         mcu.soft_reset()
    vcc = mcu.vcc.read()
    pin = mcu.pin.get(config.pin)
    interval = config.interval

    measurements = []
    timer = Stopwatch()
    while 1:
        measurements.append(dict(
                            t=timer.read(),
                            A=pin.read_analog_value(),
                            ))
        if timer.last > interval:
            break
        if stop_condition:
            if stop_condition(timer):
                break

    data = dict(
        vcc=vcc,
        model=avr_name(mcu),
        measurements=measurements,
    )

    return data
def measure(config, stop_condition=None):
    mcu = ArduinoTree()
    #     if config.reset:
    #         mcu.soft_reset()
    vcc = mcu.vcc.read()
    pin = mcu.pin.get(config.pin)
    interval = config.interval

    measurements = []
    timer = Stopwatch()
    while 1:
        measurements.append(dict(
            t=timer.read(),
            A=pin.read_analog_value(),
        ))
        if timer.last > interval:
            break
        if stop_condition:
            if stop_condition(timer):
                break

    data = dict(
        vcc=vcc,
        model=avr_name(mcu),
        measurements=measurements,
    )

    return data
def measure(config):
    mcu = ArduinoTree()
    #     mcu.soft_reset()
    vcc = mcu.vcc.read()

    timer = Stopwatch()

    measurements = []

    #     for _ in range(config.repeat):
    while 1:
        f = mcu.counter.read(config.gate_time)
        measurements.append(dict(
            t=timer.read(),
            frequency=nominal_value(f),
        ))
        if timer.last > config.interval:
            break

    data = dict(
        vcc=vcc,
        model=avr_name(mcu),
        measurements=measurements,
        gate_time=config.gate_time,
    )

    return data
Exemple #5
0
def measure(config):
    mcu = ArduinoTree()
#     mcu.soft_reset()
    vcc = mcu.vcc.read()
    p_pwm = mcu.pin.get(config.pin_pwm)
    pwm_manager = PwmManager(config.pwm, [p_pwm])
    p_in = mcu.pin.get(config.pin_in)
    timer = Stopwatch()

    # max freq
#    pwm.divisor = config.pwm.divisor
#    print 'freq=%s' % pwm.frequency

    def meas():
        def loop(measurements, pwm_value):
            measurements.append(dict(
                                t=timer.read(),
                                pwm_value=pwm_value,
                                Ain=p_in.read_analog_value(),
                                ))
        measurements = pwm_manager.measure(loop)

        return measurements

#        pwm.write_value(config.pwm.start)

#        time.sleep(1)

#        measurements = []
#        tstart = time.time()
#        for i in range(config.pwm.start, config.pwm.end + 1):
#            pwm.write_value(i)
#            time.sleep(config.wait)

#            A = p_in.read_analog_value()
#            measurements.append(dict(
#                                t=timer.read(),
#                                pwm_value=i,
#                                A=A,
#                                ))
#        return measurements

    data = dict(
        vcc=vcc,
        model=avr_name(mcu),
        measurements=meas(),
        frequency=p_pwm.pwm.frequency,
    )

    p_pwm.reset()

    return data
def measure(config):
    mcu = ArduinoTree()
    #     mcu.soft_reset()
    vcc = mcu.vcc.read()
    p_pwm = mcu.pin.get(config.pin_pwm)
    pwm_manager = PwmManager(config.pwm, [p_pwm])
    #    pwm = p_pwm.pwm
    p_amp = mcu.pin.get(config.pin_amp_out)
    p_out_an = mcu.pin.get(config.pin_out_an)
    p_out_dig = mcu.pin.get(config.pin_out_dig)
    timer = Stopwatch()

    #    pwm.divisor = config.pwm.divisor

    def meas(dig_out):
        p_out_dig.write_digital_value(dig_out)

        def loop(measurements, pwm_value):
            measurements.append(
                dict(
                    t=timer.read(),
                    pwm_value=pwm_value,
                    Aamp=p_amp.read_analog_value(),
                    Aout=p_out_an.read_analog_value(),
                    Dout=dig_out,
                ))

        measurements = pwm_manager.measure(loop)

        return measurements

    measurements = []

    p_out_dig.write_mode(OUTPUT)
    measurements += meas(1)
    measurements += meas(0)

    p_out_dig.reset()
    p_pwm.reset()

    data = dict(
        vcc=vcc,
        model=avr_name(mcu),
        frequency=p_pwm.pwm.frequency,
        measurements=measurements,
    )

    return data
Exemple #7
0
def measure(config):
    mcu = ArduinoTree()
    #     mcu.soft_reset()
    vcc = mcu.vcc.read()
    p_enable_input = mcu.pin.get(config.pin_enable_input)

    timer = Stopwatch()

    def measure1(enable_input, repeat):
        if enable_input:
            p_enable_input.write_mode(OUTPUT)
            p_enable_input.write_digital_value(1)
        else:
            p_enable_input.reset()
        measurements = []

        for _ in range(repeat):
            f = mcu.counter.read(config.gate_time)
            measurements.append(
                dict(
                    t=timer.read(),
                    frequency=nominal_value(f),
                    enable_input=int(enable_input),
                ))
        return measurements

    measurements = []
    #     measurements += measure1(False, config.repeat_disable_input)
    #     measurements += measure1(True, config.repeat_enable_input)
    measurements += measure1(False, 8)
    measurements += measure1(True, 8)
    measurements += measure1(False, 8)
    measurements += measure1(True, 15)
    measurements += measure1(False, 8)
    measurements += measure1(True, 30)

    p_enable_input.reset()

    data = dict(
        vcc=vcc,
        model=avr_name(mcu),
        measurements=measurements,
        gate_time=config.gate_time,
    )

    return data
def measure(config):
    mcu = ArduinoTree()
#     mcu.soft_reset()
    vcc = mcu.vcc.read()
    p_pwm = mcu.pin.get(config.pin_pwm)
    pwm_manager = PwmManager(config.pwm, [p_pwm])
#    pwm = p_pwm.pwm
    p_amp = mcu.pin.get(config.pin_amp_out)
    p_out_an = mcu.pin.get(config.pin_out_an)
    p_out_dig = mcu.pin.get(config.pin_out_dig)
    timer = Stopwatch()

#    pwm.divisor = config.pwm.divisor

    def meas(dig_out):
        p_out_dig.write_digital_value(dig_out)

        def loop(measurements, pwm_value):
            measurements.append(dict(
                                t=timer.read(),
                                pwm_value=pwm_value,
                                Aamp=p_amp.read_analog_value(),
                                Aout=p_out_an.read_analog_value(),
                                Dout=dig_out,
                                ))
        measurements = pwm_manager.measure(loop)

        return measurements

    measurements = []

    p_out_dig.write_mode(OUTPUT)
    measurements += meas(1)
    measurements += meas(0)

    p_out_dig.reset()
    p_pwm.reset()

    data = dict(
        vcc=vcc,
        model=avr_name(mcu),
        frequency=p_pwm.pwm.frequency,
        measurements=measurements,
    )

    return data
def measure(config):
    mcu = ArduinoTree()
#     mcu.soft_reset()
    vcc = mcu.vcc.read()
    p_enable_input = mcu.pin.get(config.pin_enable_input)

    timer = Stopwatch()

    def measure1(enable_input, repeat):
        if enable_input:
            p_enable_input.write_mode(OUTPUT)
            p_enable_input.write_digital_value(1)
        else:
            p_enable_input.reset()
        measurements = []

        for _ in range(repeat):
            f = mcu.counter.read(config.gate_time)
            measurements.append(dict(
                                t=timer.read(),
                                frequency=nominal_value(f),
                                enable_input=int(enable_input),
                                ))
        return measurements

    measurements = []
#     measurements += measure1(False, config.repeat_disable_input)
#     measurements += measure1(True, config.repeat_enable_input)
    measurements += measure1(False, 8)
    measurements += measure1(True, 8)
    measurements += measure1(False, 8)
    measurements += measure1(True, 15)
    measurements += measure1(False, 8)
    measurements += measure1(True, 30)

    p_enable_input.reset()

    data = dict(
        vcc=vcc,
        model=avr_name(mcu),
        measurements=measurements,
        gate_time=config.gate_time,
    )

    return data
Exemple #10
0
def measure(config):
    mcu = ArduinoTree()
    #     mcu.soft_reset()
    vcc = mcu.vcc.read()
    p_pwm = mcu.pin.get(config.pin_pwm)
    pwm_manager = PwmManager(config.pwm, [p_pwm])
    p_amp = mcu.pin.get(config.pin_amp_out)
    p_in = mcu.pin.get(config.pin_x_in)
    p_out = mcu.pin.get(config.pin_x_out)
    p_rail = mcu.pin.get(config.pin_rail)
    timer = Stopwatch()

    def meas(rail):
        p_rail.write_mode(OUTPUT)
        p_rail.write_digital_value(rail)

        def loop(measurements, pwm_value):
            measurements.append(
                dict(
                    t=timer.read(),
                    pwm_value=pwm_value,
                    Aamp=p_amp.read_analog_value(),
                    Ain=p_in.read_analog_value(),
                    Aout=p_out.read_analog_value(),
                    rail=rail,
                ))

        measurements = pwm_manager.measure(loop)
        p_rail.reset()

        return measurements

    measurements = []
    measurements += meas(1)
    measurements += meas(0)

    p_pwm.reset()

    data = dict(
        vcc=vcc,
        model=avr_name(mcu),
        pwm_frequency=p_pwm.pwm.frequency,
        measurements=measurements,
    )
    return data
def measure(config):
    mcu = ArduinoTree()
    #     mcu.soft_reset()
    vcc = mcu.vcc.read()
    p_pwm = mcu.pin.get(config.pin_pwm)
    pwm_manager = PwmManager(config.pwm, [p_pwm])
    p_in = mcu.pin.get(config.pin_in)
    timer = Stopwatch()

    # max freq
    #    pwm.divisor = config.pwm.divisor
    #    print 'freq=%s' % pwm.frequency

    def meas():
        def loop(measurements, pwm_value):
            measurements.append(dict(t=timer.read(), pwm_value=pwm_value, Ain=p_in.read_analog_value()))

        measurements = pwm_manager.measure(loop)

        return measurements

    #        pwm.write_value(config.pwm.start)

    #        time.sleep(1)

    #        measurements = []
    #        tstart = time.time()
    #        for i in range(config.pwm.start, config.pwm.end + 1):
    #            pwm.write_value(i)
    #            time.sleep(config.wait)

    #            A = p_in.read_analog_value()
    #            measurements.append(dict(
    #                                t=timer.read(),
    #                                pwm_value=i,
    #                                A=A,
    #                                ))
    #        return measurements

    data = dict(vcc=vcc, model=avr_name(mcu), measurements=meas(), frequency=p_pwm.pwm.frequency)

    p_pwm.reset()

    return data
def measure(config):
    mcu = ArduinoTree()
#     mcu.soft_reset()
    vcc = mcu.vcc.read()
    p_pwm = mcu.pin.get(config.pin_pwm)
    pwm_manager = PwmManager(config.pwm, [p_pwm])
    p_amp = mcu.pin.get(config.pin_amp_out)
    p_in = mcu.pin.get(config.pin_x_in)
    p_out = mcu.pin.get(config.pin_x_out)
    p_rail = mcu.pin.get(config.pin_rail)
    timer = Stopwatch()

    def meas(rail):
        p_rail.write_mode(OUTPUT)
        p_rail.write_digital_value(rail)

        def loop(measurements, pwm_value):
                measurements.append(dict(
                                    t=timer.read(),
                                    pwm_value=pwm_value,
                                    Aamp=p_amp.read_analog_value(),
                                    Ain=p_in.read_analog_value(),
                                    Aout=p_out.read_analog_value(),
                                    rail=rail,
                                    ))
        measurements = pwm_manager.measure(loop)
        p_rail.reset()

        return measurements

    measurements = []
    measurements += meas(1)
    measurements += meas(0)

    p_pwm.reset()

    data = dict(
        vcc=vcc,
        model=avr_name(mcu),
        pwm_frequency=p_pwm.pwm.frequency,
        measurements=measurements,
    )
    return data
def measure(config):
    mcu = ArduinoTree()
    #     mcu.soft_reset()

    vcc = mcu.vcc.read()
    p_pwm = mcu.pin.get(config.pin_pwm)
    pwm_manager = PwmManager(config.pwm, [p_pwm])
    #    p_in = mcu.pin.get(config.pin_x_in)
    #    p_out = mcu.pin.get(config.pin_x_out)
    #    p_rail = mcu.pin.get(config.pin_rail)
    pin_an_in = mcu.pin.get(config.pin_an_in)
    pin_dig_in = mcu.pin.get(config.pin_dig_in)

    timer = Stopwatch()

    def meas(reverse):
        def loop(measurements, pwm_value):
            measurements.append(
                dict(
                    t=timer.read(),
                    pwm_value=pwm_value,
                    Ain=pin_an_in.read_analog_value(),
                    Din=pin_dig_in.read_digital_value(),
                    reverse=reverse,
                ))

        measurements = pwm_manager.measure(loop, reverse=reverse)
        return measurements

    measurements = []
    measurements += meas(0)
    measurements += meas(1)

    p_pwm.reset()

    data = dict(
        vcc=vcc,
        model=avr_name(mcu),
        pwm_frequency=p_pwm.pwm.frequency,
        measurements=measurements,
    )
    return data
def measure(config):
    mcu = ArduinoTree()
#     mcu.soft_reset()

    vcc = mcu.vcc.read()
    p_pwm = mcu.pin.get(config.pin_pwm)
    pwm_manager = PwmManager(config.pwm, [p_pwm])
#    p_in = mcu.pin.get(config.pin_x_in)
#    p_out = mcu.pin.get(config.pin_x_out)
#    p_rail = mcu.pin.get(config.pin_rail)
    pin_an_in = mcu.pin.get(config.pin_an_in)
    pin_dig_in = mcu.pin.get(config.pin_dig_in)

    timer = Stopwatch()

    def meas(reverse):
        def loop(measurements, pwm_value):
                measurements.append(dict(
                                    t=timer.read(),
                                    pwm_value=pwm_value,
                                    Ain=pin_an_in.read_analog_value(),
                                    Din=pin_dig_in.read_digital_value(),
                                    reverse=reverse,
                                    ))
        measurements = pwm_manager.measure(loop, reverse=reverse)
        return measurements

    measurements = []
    measurements += meas(0)
    measurements += meas(1)

    p_pwm.reset()

    data = dict(
        vcc=vcc,
        model=avr_name(mcu),
        pwm_frequency=p_pwm.pwm.frequency,
        measurements=measurements,
    )
    return data
def measure(config):
    mcu = ArduinoTree()
    vcc = mcu.vcc.read()

    p_inc = mcu.pin.get(config.pin_inc)
    p_ud = mcu.pin.get(config.pin_ud)
    p_cs = mcu.pin.get(config.pin_cs)

    p_in = mcu.pin.get(config.pin_in)

    pot = DigiPot(p_inc, p_ud, p_cs)

    pot_values = range(pot.range[0], pot.range[1] + 1)
    timer = Stopwatch(len(pot_values))

    def meas():
        measurements = []
        for i in pot_values:
            pot.set(i)
            sleep(0.01)
            Ain = p_in.read_analog_value()

            measurements.append(dict(
                                t=timer.read(),
                                value=i,
                                Ain=Ain,
                                ))
            timer.next(measurements)

        return measurements

    data = dict(
        vcc=vcc,
        model=avr_name(mcu),
        measurements=meas(),
    )

    return data
def measure(config):
    mcu = ArduinoTree()
    vcc = mcu.vcc.read()

    p_inc = mcu.pin.get(config.pin_inc)
    p_ud = mcu.pin.get(config.pin_ud)
    p_cs = mcu.pin.get(config.pin_cs)

    p_in = mcu.pin.get(config.pin_in)

    pot = DigiPot(p_inc, p_ud, p_cs)

    pot_values = range(pot.range[0], pot.range[1] + 1)
    timer = Stopwatch(len(pot_values))

    def meas():
        measurements = []
        for i in pot_values:
            pot.set(i)
            sleep(0.01)
            Ain = p_in.read_analog_value()

            measurements.append(dict(
                t=timer.read(),
                value=i,
                Ain=Ain,
            ))
            timer.next(measurements)

        return measurements

    data = dict(
        vcc=vcc,
        model=avr_name(mcu),
        measurements=meas(),
    )

    return data
def measure(config):
    random.seed()
    mcu = ArduinoTree()
    vcc = mcu.vcc.read()
    p_in = mcu.pin.get(config.pin_in)
    timer = Stopwatch(config.count)

    measurements = []
    for i in range(config.count):
            measurements.append(dict(
                                t=timer.read(),
                                Ain=p_in.read_analog_value(),
                                ))
            time.sleep(random.random() * config.max_sleep)
            timer.next(measurements)

    data = dict(
        vcc=vcc,
        model=avr_name(mcu),
        measurements=measurements,
    )

    return data
def measure(config):
    mcu = ArduinoTree()
#     mcu.soft_reset()
    vcc = mcu.vcc.read()
    p_pwm = mcu.pin.get(config.pin_pwm)
    pwm_manager = PwmManager(config.pwm, [p_pwm])
    p_volt_in = mcu.pin.get(config.pin_volt_in)
    p_current_in = mcu.pin.get(config.pin_current_in)
    timer = Stopwatch()

    # max freq
#    pwm.divisor = config.pwm.divisor
#    print 'freq=%s' % pwm.frequency

    def meas():
        def loop(measurements, pwm_value):
            measurements.append(dict(
                                t=timer.read(),
                                pwm_value=pwm_value,
                                Avolt=p_volt_in.read_analog_value(),
                                Acurrent=p_current_in.read_analog_value(),
                                ))
        measurements = pwm_manager.measure(loop)

        return measurements

    data = dict(
        vcc=vcc,
        model=avr_name(mcu),
        measurements=meas(),
        frequency=p_pwm.pwm.frequency,
    )

    p_pwm.reset()

    return data
def measure(config):
    mcu = ArduinoTree()
#     mcu.soft_reset()
    vcc = mcu.vcc.read()

    timer = Stopwatch()

    def measure_beta(nodeB, nodeC, nodeE, polarity):
        measurements = []
        pB = mcu.pin.get(nodeB.pin_middle)
        pC = mcu.pin.get(nodeC.pin_middle)
        pE = mcu.pin.get(nodeE.pin_middle)

        elemRb = highR_elem(nodeB.toplist)
        elemRc = lowR_elem(nodeC.toplist)

        pRb = mcu.pin.get(elemRb.pin_rail)
        pRc = mcu.pin.get(elemRc.pin_rail)

        Rb = elemRb.R
        Rc = elemRc.R

        def read(pin):
            return pin.analog_in().u_value

        def delay():
            time.sleep(1 / 1000.0)

        pB.write_mode(INPUT)
        pC.write_mode(INPUT)
        pE.write_mode(OUTPUT)
        pRb.write_mode(OUTPUT)
        pRc.write_mode(OUTPUT)

        if (polarity == 'NPN'):
            pE.write_digital_value(0)
            pRb.write_digital_value(1)
            pRc.write_digital_value(1)
        else:
            pE.write_digital_value(1)
            pRb.write_digital_value(0)
            pRc.write_digital_value(0)

        delay()

        pB.read_analog_value()
        pB.read_analog_value()
        pB.read_analog_value()

        for _ in range(config.filter_size):
            measurements.append(dict(
                                t=timer.read(),
                                Ab=pB.read_analog_value(),
                                Rb=Rb,
                                Rc=Rc,
                                polarity=polarity,
                                B=nodeB.name,
                                C=nodeC.name,
                                E=nodeE.name,
                                ))

        pC.read_analog_value()
        pC.read_analog_value()
        pC.read_analog_value()

        for _ in range(config.filter_size):
            measurements.append(dict(
                                t=timer.read(),
                                Ac=pC.read_analog_value(),
                                Rb=Rb,
                                Rc=Rc,
                                polarity=polarity,
                                B=nodeB.name,
                                C=nodeC.name,
                                E=nodeE.name,
                                ))

        pB.reset()
        pC.reset()
        pE.reset()
        pRb.reset()
        pRc.reset()
        return measurements

    measurements = []
    combinations = [(0, 1, 2), (0, 2, 1),
                    (1, 2, 0), (1, 0, 2),
                    (2, 1, 0), (2, 0, 1),
                    ]
    for k1, k2, k3 in combinations:
        nodeB = config.nodes[k1]
        nodeC = config.nodes[k2]
        nodeE = config.nodes[k3]
        measurements += measure_beta(nodeB, nodeC, nodeE, polarity='PNP')
        measurements += measure_beta(nodeB, nodeC, nodeE, polarity='NPN')

    data = dict(
        vcc=vcc,
        model=avr_name(mcu),
        measurements=measurements,
    )

    return data
Exemple #20
0
def measure(config):
    mcu = ArduinoTree()
    #     mcu.soft_reset()
    vcc = mcu.vcc.read()
    p_middle = mcu.pin.get(config.pin_middle)
    if config.pullup:
        assert INVERT
    p_middle.write_pullup(config.pullup)
    # p_bottom = mcu.pin.get(config.pin_bottom)

    timer = Stopwatch()

    def measure1(pin_rail, pin_input, R):
        measurements = []

        if INVERT:
            Abottom = 1023
            top = 0
            Atop = 0
        else:
            Abottom = 0
            top = 1
            Atop = 1023
#        Abottom = 0

#        p_bottom.mode =
        pin_rail.write_mode(OUTPUT)
        #        p_bottom.write_digital_value(bottom)
        pin_rail.write_digital_value(top)

        # first read is not stable by 1MOhm because of A/D capacitor
        p_middle.read_analog_value()
        p_middle.read_analog_value()
        p_middle.read_analog_value()

        time.sleep(0.02)

        for _ in range(config.window):
            Amiddle = p_middle.read_analog_value()
            measurements.append(dict(
                t=timer.read(),
                Amiddle=Amiddle,
                R=R,
            ))
        if pin_input:
            for _ in range(config.window):
                Atop = pin_input.read_analog_value()
                measurements.append(dict(
                    t=timer.read(),
                    R=R,
                    Atop=Atop,
                ))
        else:
            measurements.append(dict(
                t=timer.read(),
                R=R,
                Atop=Atop,
            ))
        measurements.append(dict(
            t=timer.read(),
            Abottom=Abottom,
            R=R,
        ))
        # p_bottom.reset()
        pin_rail.reset()
        return measurements

    measurements = []
    for d in config.toplist:
        pin_rail = mcu.pin.get(d['pin_rail'])

        pin_input = None
        if 'pin_input' in d:
            pin_input = mcu.pin.get(d['pin_input'])

        R = d['R']
        measurements += measure1(pin_rail, pin_input, R)
#        measurements += measure1(pin_rail, pin_input,R, 1)

    data = dict(
        vcc=vcc,
        model=avr_name(mcu),
        measurements=measurements,
    )

    return data
def measure(config):
    mcu = ArduinoTree()
    #     mcu.soft_reset()
    vcc = mcu.vcc.read()
    p_middle = mcu.pin.get(config.pin_middle)
    measurements = []

    timer = Stopwatch()
    timeout = config.charge_timeout

    toplist = sorted(config.toplist, key=lambda e: e.R)
    top_charge = toplist[0]
    pin_charge = mcu.pin.get(top_charge.pin_rail)

    def setcharge(value, limit):
        measurements = []
        pin_charge.write_mode(OUTPUT)
        pin_charge.write_digital_value(value)

        def loop_func():
            a = p_middle.read_analog_value()
            measurements.append(
                dict(
                    t=timer.read(),
                    Amiddle=a,
                    R=top_charge.R,
                    charge=1,
                    #                                 cont=1,
                ))
            if value == 1:
                if a > limit:
                    return False
            else:
                if a < limit:
                    return False
            return True

        timeout_loop(timeout, loop_func)

        pin_charge.reset()
        return measurements

    def discharge(limit=None):
        if limit is None:
            limit = config.lower_limit
        return setcharge(value=0, limit=limit)

    def charge(limit=None):
        if limit is None:
            limit = config.upper_limit
        return setcharge(value=1, limit=limit)

    def measure1(measurements, pin_rail, pin_input, R):
        def loop_func():
            Amiddle = p_middle.read_analog_value()
            measurements.append(
                dict(
                    t=timer.read(),
                    Amiddle=Amiddle,
                    R=R,
                    charge=0,
                    # cont=int(tmeasure is None),
                ))
            if Amiddle < config.lower_limit:
                return False
            return True

        measurements += charge()

        pin_rail.write_mode(OUTPUT)
        pin_rail.write_digital_value(0)

        # first read is not stable by 1MOhm because of A/D capacitor
        p_middle.read_analog_value()
        #        if tmeasure:
        #            loop_func()
        #            time.sleep(tmeasure)
        #            loop_func()
        #        else:
        timeout_loop(timeout, loop_func)

#        pin_rail.reset()

    for d in toplist:
        pin_rail = mcu.pin.get(d['pin_rail'])
        pin_input = mcu.pin.get(d['pin_input'])
        R = d['R']
        #        timer3 = Stopwatch()
        try:
            measure1(measurements, pin_rail, pin_input, R)
        except TimeOutError as e:
            print e
            break
        finally:
            #        tm=timer3.read()
            #        tm*=0.9
            #        print tm
            #        measure1(measurements, pin_rail, pin_input, R, tm)

            pin_rail.reset()

    data = dict(
        vcc=vcc,
        model=avr_name(mcu),
        measurements=measurements,
    )

    return data
Exemple #22
0
def measure(config):
    mcu = ArduinoTree()
#     mcu.soft_reset()

    vcc = mcu.vcc.read()
    p_in = mcu.pin.get(config.pin_in)
    p_pwm = mcu.pin.get(config.pin_pwm)
#    p_pwm2 = mcu.pin.get('D8')
#    p_pwm_check = mcu.pin.get(config.pin_pwm_check)
    timer = Stopwatch()

    p_pwm.write_mode(OUTPUT)
#    p_pwm2.write_mode(OUTPUT)

#    def meas_max():
#        time.sleep(1)
#        p_pwm2.write_digital_value(1)
#
#        time.sleep(config.settle_time)
#
#        measurements = []
#        for i in range(config.window):
#            timer.measure()
#            Apwm = p_pwm_check.read_analog_value()
#            measurements.append(dict(
#                                t=timer.relativ(),
# #                                pwm_value=pwm_value,
#                                Apwm=Apwm,
#                                ))
#        return measurements

    pwm = p_pwm.pwm
#    pwm.divisor = 1

    def meas(frequency, dc=0):
        if frequency == 0:
            pwm.write_value(dc * 255)
        else:
            pwm.set_high_freq_around(frequency)
            frequency = pwm.read_frequency()
#        pwm_value = int(pwm_value)
#        pwm.write_value(pwm_value)

        # there is a slow drift when starting the measurement
        # so it is better to read continuously while sleeping
        sleep_and_read(config.settle_time, p_in)
        # time.sleep(config.settle_time)

        measurements = []
        for i in range(config.window):
            Ain = p_in.read_analog_value()
            measurements.append(dict(
                                t=timer.read(),
                                Ain=Ain,
                                frequency=frequency,
                                dc=dc,
                                ))
        return measurements

    measurements = []

    measurements += meas(0, 0)
    measurements += meas(0, 1)
    for f in logspace(log10(config.freq.min), log10(config.freq.max), config.freq.steps):
        measurements += meas(f)

    data = dict(
        vcc=vcc,
        model=avr_name(mcu),
        measurements=measurements,
    )

    p_in.reset()
    p_pwm.reset()

    return data
def measure(config):
    mcu = ArduinoTree()
#     mcu.soft_reset()
    vcc = mcu.vcc.read()
    p_middle = mcu.pin.get(config.pin_middle)
    measurements = []

    timer = Stopwatch()
    timeout = config.charge_timeout

    toplist = sorted(config.toplist, key=lambda e: e.R)
    top_charge = toplist[0]
    pin_charge = mcu.pin.get(top_charge.pin_rail)

    def         setcharge(value, limit):
        measurements = []
        pin_charge.write_mode(OUTPUT)
        pin_charge.write_digital_value(value)

        def loop_func():
            a = p_middle.read_analog_value()
            measurements.append(dict(
                                t=timer.read(),
                                Amiddle=a,
                                R=top_charge.R,
                                charge=1,
                                #                                 cont=1,
                                ))
            if value == 1:
                if a > limit:
                    return False
            else:
                if a < limit:
                    return False
            return True
        timeout_loop(timeout, loop_func)

        pin_charge.reset()
        return measurements

    def         discharge(limit=None):
        if limit is None:
            limit = config.lower_limit
        return setcharge(value=0, limit=limit)

    def         charge(limit=None):
        if limit is None:
            limit = config.upper_limit
        return setcharge(value=1, limit=limit)

    def measure1(measurements, pin_rail, pin_input, R):
        def loop_func():
            Amiddle = p_middle.read_analog_value()
            measurements.append(dict(
                                t=timer.read(),
                                Amiddle=Amiddle,
                                R=R,
                                charge=0,
                                # cont=int(tmeasure is None),
                                ))
            if Amiddle < config.lower_limit:
                    return False
            return True

        measurements += charge()

        pin_rail.write_mode(OUTPUT)
        pin_rail.write_digital_value(0)

        # first read is not stable by 1MOhm because of A/D capacitor
        p_middle.read_analog_value()
#        if tmeasure:
#            loop_func()
#            time.sleep(tmeasure)
#            loop_func()
#        else:
        timeout_loop(timeout, loop_func)

#        pin_rail.reset()

    for d in toplist:
        pin_rail = mcu.pin.get(d['pin_rail'])
        pin_input = mcu.pin.get(d['pin_input'])
        R = d['R']
#        timer3 = Stopwatch()
        try:
            measure1(measurements, pin_rail, pin_input, R)
        except TimeOutError as e:
            print e
            break
        finally:
#        tm=timer3.read()
#        tm*=0.9
#        print tm
#        measure1(measurements, pin_rail, pin_input, R, tm)

            pin_rail.reset()

    data = dict(
        vcc=vcc,
        model=avr_name(mcu),
        measurements=measurements,
    )

    return data
Exemple #24
0
def measure(config):
    A = config.R2 / config.R1

    mcu = ArduinoTree()
    #     mcu.soft_reset()
    vcc = mcu.vcc.read()
    timer = Stopwatch()

    for d in config.loads:
        mcu.pin.get(d.pin_load).reset()

    p_pwm_plus = mcu.pin.get(config.pin_pwm_plus)
    p_pwm_minus = mcu.pin.get(config.pin_pwm_minus)
    pwm_manager = PwmManager(config.pwm, [p_pwm_plus, p_pwm_minus])

    p_in_plus = mcu.pin.get(config.pin_in_plus)
    p_in_minus = mcu.pin.get(config.pin_in_minus)
    p_out = mcu.pin.get(config.pin_out)

    #    def noise_filter(fread):
    #        filter_size = 5
    #        return filters.median_filter(fread, filter_size)

    def meas(R, pwm_values, phase=None):
        def loop(measurements, pwm_index_plus, pwm_index_minus):
            measurements.append(
                dict(
                    t=timer.read(),
                    pwm_index_plus=pwm_index_plus,
                    pwm_index_minus=pwm_index_minus,
                    Aplus=p_in_plus.read_analog_value(),
                    Aminus=p_in_minus.read_analog_value(),
                    Aout=p_out.read_analog_value(),
                    Rload=R,
                    phase=phase,
                ))

        measurements = pwm_manager.measure(loop, pwm_values)
        return measurements

    def meas_multi():
        measurements = []

        # unity gain test: Vplus=Vminus
        #        ls = [(x, x) for x in fullrange(config.pwm.start, config.pwm.end)]
        measurements += meas(None, pwm_values=None, phase='unity_gain')
        #        return measurements
        # determine good range for both input and ouput
        #        d2 = data.copy()
        #        d2['measurements'] = measurements
        low, high = calculate_good_interval(config, measurements, limit=10)
        #        print low, high
        Alow, Ahigh = low + 0.25 * (high - low), low + 0.75 * (high - low)

        low, high = map(an2pwm, [Alow, Ahigh])

        # input_swing test
        # output is always in good range if input is allowed
        avg = (low + high) / 2
        ls = [(math.ceil(x + (avg - x) / (A + 1)), x)
              for x in pwm_manager.range]
        measurements += meas(None, pwm_values=ls, phase='input_range')

        # output_swing test
        # input is always in good range
        loads = [(d.pin_load, d.Rload) for d in config.loads]
        for nr, R in [(None, None)] + loads:
            if nr is not None:
                mcu.pin.get(nr).write_mode(OUTPUT)
                mcu.pin.get(nr).write_digital_value(0)

            # Vminus is fixed in upper range
            Aplus = Circuit(A, Vminus=Ahigh, Vout=-20).Vplus
            ls = [(x, high) for x in fullrange(an2pwm(Aplus), high)]
            measurements += meas(R, pwm_values=ls, phase='output_swing')

            # to increase resolution
            for i in range(9):
                ls = [(x, high - i) for x in fullrange(an2pwm(Aplus), high)]
                measurements += meas(R, pwm_values=ls, phase='output_swing')

            # Vminus is fixed in lower range
            Aplus = Circuit(A, Vminus=Alow, Vout=1040).Vplus
            ls = [(x, low) for x in fullrange(low, an2pwm(Aplus))]

            # to increase resolution
            for i in range(9):
                ls = [(x, low + i) for x in fullrange(low, an2pwm(Aplus))]
                measurements += meas(R, pwm_values=ls, phase='output_swing')

            if nr is not None:
                mcu.pin.get(nr).reset()

        return measurements

    data = Bunch(
        vcc=vcc,
        model=avr_name(mcu),
        pwm_plus_frequency=p_pwm_plus.pwm.frequency,
        pwm_minus_frequency=p_pwm_minus.pwm.frequency,
        measurements=meas_multi(),
    )

    p_pwm_plus.reset()
    p_pwm_minus.reset()
    return data
def measure(config):
    A = config.R2 / config.R1

    mcu = ArduinoTree()
#     mcu.soft_reset()
    vcc = mcu.vcc.read()
    timer = Stopwatch()

    for d in config.loads:
        mcu.pin.get(d.pin_load).reset()

    p_pwm_plus = mcu.pin.get(config.pin_pwm_plus)
    p_pwm_minus = mcu.pin.get(config.pin_pwm_minus)
    pwm_manager = PwmManager(config.pwm, [p_pwm_plus, p_pwm_minus])

    p_in_plus = mcu.pin.get(config.pin_in_plus)
    p_in_minus = mcu.pin.get(config.pin_in_minus)
    p_out = mcu.pin.get(config.pin_out)

#    def noise_filter(fread):
#        filter_size = 5
#        return filters.median_filter(fread, filter_size)

    def meas(R, pwm_values, phase=None):
        def loop(measurements, pwm_index_plus, pwm_index_minus):
                measurements.append(dict(
                                    t=timer.read(),
                                    pwm_index_plus=pwm_index_plus,
                                    pwm_index_minus=pwm_index_minus,
                                    Aplus=p_in_plus.read_analog_value(),
                                    Aminus=p_in_minus.read_analog_value(),
                                    Aout=p_out.read_analog_value(),
                                    Rload=R,
                                    phase=phase,
                                    ))
        measurements = pwm_manager.measure(loop, pwm_values)
        return measurements

    def meas_multi():
        measurements = []

        # unity gain test: Vplus=Vminus
#        ls = [(x, x) for x in fullrange(config.pwm.start, config.pwm.end)]
        measurements += meas(None, pwm_values=None, phase='unity_gain')
#        return measurements
        # determine good range for both input and ouput
#        d2 = data.copy()
#        d2['measurements'] = measurements
        low, high = calculate_good_interval(config, measurements, limit=10)
#        print low, high
        Alow, Ahigh = low + 0.25 * (high - low), low + 0.75 * (high - low)

        low, high = map(an2pwm, [Alow, Ahigh])

        # input_swing test
        # output is always in good range if input is allowed
        avg = (low + high) / 2
        ls = [(
            math.ceil(x + (avg - x) / (A + 1)), x) for x in pwm_manager.range]
        measurements += meas(None, pwm_values=ls, phase='input_range')

        # output_swing test
        # input is always in good range
        loads = [(d.pin_load, d.Rload) for d in config.loads]
        for nr, R in [(None, None)] + loads:
            if nr is not None:
                mcu.pin.get(nr).write_mode(OUTPUT)
                mcu.pin.get(nr).write_digital_value(0)

            # Vminus is fixed in upper range
            Aplus = Circuit(A, Vminus=Ahigh, Vout= -20).Vplus
            ls = [(x, high) for x in fullrange(an2pwm(Aplus), high)]
            measurements += meas(R, pwm_values=ls, phase='output_swing')

            # to increase resolution
            for i in range(9):
                ls = [(x, high - i) for x in fullrange(an2pwm(Aplus), high)]
                measurements += meas(R, pwm_values=ls, phase='output_swing')

            # Vminus is fixed in lower range
            Aplus = Circuit(A, Vminus=Alow, Vout=1040).Vplus
            ls = [(x, low) for x in fullrange(low, an2pwm(Aplus))]

            # to increase resolution
            for i in range(9):
                ls = [(x, low + i) for x in fullrange(low, an2pwm(Aplus))]
                measurements += meas(R, pwm_values=ls, phase='output_swing')

            if nr is not None:
                mcu.pin.get(nr).reset()

        return measurements

    data = Bunch(
        vcc=vcc,
        model=avr_name(mcu),
        pwm_plus_frequency=p_pwm_plus.pwm.frequency,
        pwm_minus_frequency=p_pwm_minus.pwm.frequency,
        measurements=meas_multi(),
    )

    p_pwm_plus.reset()
    p_pwm_minus.reset()
    return data
Exemple #26
0
def measure(config):
    mcu = ArduinoTree()
    #     mcu.soft_reset()
    vcc = mcu.vcc.read()

    timer = Stopwatch()

    def measure_beta(nodeB, nodeC, nodeE, polarity):
        measurements = []
        pB = mcu.pin.get(nodeB.pin_middle)
        pC = mcu.pin.get(nodeC.pin_middle)
        pE = mcu.pin.get(nodeE.pin_middle)

        elemRb = highR_elem(nodeB.toplist)
        elemRc = lowR_elem(nodeC.toplist)

        pRb = mcu.pin.get(elemRb.pin_rail)
        pRc = mcu.pin.get(elemRc.pin_rail)

        Rb = elemRb.R
        Rc = elemRc.R

        def read(pin):
            return pin.analog_in().u_value

        def delay():
            time.sleep(1 / 1000.0)

        pB.write_mode(INPUT)
        pC.write_mode(INPUT)
        pE.write_mode(OUTPUT)
        pRb.write_mode(OUTPUT)
        pRc.write_mode(OUTPUT)

        if (polarity == 'NPN'):
            pE.write_digital_value(0)
            pRb.write_digital_value(1)
            pRc.write_digital_value(1)
        else:
            pE.write_digital_value(1)
            pRb.write_digital_value(0)
            pRc.write_digital_value(0)

        delay()

        pB.read_analog_value()
        pB.read_analog_value()
        pB.read_analog_value()

        for _ in range(config.filter_size):
            measurements.append(
                dict(
                    t=timer.read(),
                    Ab=pB.read_analog_value(),
                    Rb=Rb,
                    Rc=Rc,
                    polarity=polarity,
                    B=nodeB.name,
                    C=nodeC.name,
                    E=nodeE.name,
                ))

        pC.read_analog_value()
        pC.read_analog_value()
        pC.read_analog_value()

        for _ in range(config.filter_size):
            measurements.append(
                dict(
                    t=timer.read(),
                    Ac=pC.read_analog_value(),
                    Rb=Rb,
                    Rc=Rc,
                    polarity=polarity,
                    B=nodeB.name,
                    C=nodeC.name,
                    E=nodeE.name,
                ))

        pB.reset()
        pC.reset()
        pE.reset()
        pRb.reset()
        pRc.reset()
        return measurements

    measurements = []
    combinations = [
        (0, 1, 2),
        (0, 2, 1),
        (1, 2, 0),
        (1, 0, 2),
        (2, 1, 0),
        (2, 0, 1),
    ]
    for k1, k2, k3 in combinations:
        nodeB = config.nodes[k1]
        nodeC = config.nodes[k2]
        nodeE = config.nodes[k3]
        measurements += measure_beta(nodeB, nodeC, nodeE, polarity='PNP')
        measurements += measure_beta(nodeB, nodeC, nodeE, polarity='NPN')

    data = dict(
        vcc=vcc,
        model=avr_name(mcu),
        measurements=measurements,
    )

    return data
def measure(config):
    mcu = ArduinoTree()
#     mcu.soft_reset()
    vcc = mcu.vcc.read()
    p_middle = mcu.pin.get(config.pin_middle)
    if config.pullup:
        assert INVERT
    p_middle.write_pullup(config.pullup)
    # p_bottom = mcu.pin.get(config.pin_bottom)

    timer = Stopwatch()

    def measure1(pin_rail, pin_input, R):
        measurements = []

        if INVERT:
            Abottom = 1023
            top = 0
            Atop = 0
        else:
            Abottom = 0
            top = 1
            Atop = 1023
#        Abottom = 0

#        p_bottom.mode =
        pin_rail.write_mode(OUTPUT)
#        p_bottom.write_digital_value(bottom)
        pin_rail.write_digital_value(top)

        # first read is not stable by 1MOhm because of A/D capacitor
        p_middle.read_analog_value()
        p_middle.read_analog_value()
        p_middle.read_analog_value()

        time.sleep(0.02)

        for _ in range(config.window):
            Amiddle = p_middle.read_analog_value()
            measurements.append(dict(
                                t=timer.read(),
                                Amiddle=Amiddle,
                                R=R,
                                ))
        if pin_input:
            for _ in range(config.window):
                Atop = pin_input.read_analog_value()
                measurements.append(dict(
                                    t=timer.read(),
                                    R=R,
                                    Atop=Atop,
                                    ))
        else:
            measurements.append(dict(
                                t=timer.read(),
                                R=R,
                                Atop=Atop,
                                ))
        measurements.append(dict(
            t=timer.read(),
            Abottom=Abottom,
            R=R,
        ))
        # p_bottom.reset()
        pin_rail.reset()
        return measurements

    measurements = []
    for d in config.toplist:
        pin_rail = mcu.pin.get(d['pin_rail'])

        pin_input = None
        if 'pin_input' in d:
            pin_input = mcu.pin.get(d['pin_input'])

        R = d['R']
        measurements += measure1(pin_rail, pin_input, R)
#        measurements += measure1(pin_rail, pin_input,R, 1)

    data = dict(
        vcc=vcc,
        model=avr_name(mcu),
        measurements=measurements,
    )

    return data