def parse_arguments(args):
    try:
        if args.uri == 'auto':
            ctx = libm2k.m2kOpen()
        else:
            ctx = libm2k.m2kOpen(args.uri)
        if ctx is None:
            raise Exception('Invalid uri')
        print('Connection established')

        def signal_handler(sig, frame):
            nonlocal calibration_values
            write_in_file(calibration_values, args.values, args.file)
            libm2k.contextClose(ctx)
            sys.exit(0)
        signal.signal(signal.SIGINT, signal_handler)

        calibration_values = dict()
        generate_file(ctx, calibration_values, args.temperature, args.timeout, args.values, args.file, args.append)

        libm2k.contextClose(ctx)
        return 0
    except Exception as error:
        print(error)
        return -1
Пример #2
0
def main():
    context = libm2k.m2kOpen()
    if context is None:
        print(
            "Connection Error: No ADALM2000 device available/connected to your PC."
        )
        exit(1)

    # check if mixed signal is available on your firmware version
    if context.hasMixedSignal() is False:
        print("Mixed Signal not available")
        exit(1)

    context.calibrateDAC()

    analog_in = context.getAnalogIn()
    digital = context.getDigital()
    trigger = analog_in.getTrigger()

    analog_in.enableChannel(libm2k.CHANNEL_1, True)
    analog_in.enableChannel(libm2k.CHANNEL_2, True)

    # configure the trigger
    trigger.setAnalogDelay(-20)
    trigger.setDigitalDelay(-20)
    trigger.setAnalogLevel(ANALOG_CH, 2)
    trigger.setDigitalCondition(DIGITAL_CH, libm2k.NONE)
    trigger.setAnalogSource(ANALOG_CH)
    trigger.setAnalogMode(ANALOG_CH, libm2k.ANALOG)
    trigger.setAnalogCondition(ANALOG_CH, libm2k.RISING_EDGE_ANALOG)

    # configure digital out interface
    digital.setOutputMode(DIGITAL_CH, libm2k.DIO_PUSHPULL)
    digital.setDirection(DIGITAL_CH, libm2k.DIO_OUTPUT)
    digital.enableChannel(DIGITAL_CH, True)
    digital.setCyclic(False)

    # use the same samplerate for both analog and digital interface
    analog_in.setSampleRate(SAMPLING_FREQUENCY)
    analog_in.setOversamplingRatio(OVERSAMPLING)
    digital.setSampleRateIn(SAMPLING_FREQUENCY // OVERSAMPLING)

    # startMixedSignal -> extract the data -> stopMixedSignal
    context.startMixedSignalAcquisition(BUFFER_SIZE)
    generate_clock_signal(digital, SAMPLING_FREQUENCY // (10 * OVERSAMPLING))
    digital_data, analog_data = [], []
    digital_data.extend(digital.getSamples(BUFFER_SIZE))
    analog_data.extend(analog_in.getSamples(BUFFER_SIZE))
    context.stopMixedSignalAcquisition()

    # get only the used digital channel
    digital_data_one_ch = list(
        map(lambda s: ((0x0001 << DIGITAL_CH) & int(s)) >> DIGITAL_CH,
            digital_data))
    plt.plot(digital_data_one_ch, label='Digital')
    plt.plot(analog_data[ANALOG_CH], label='Analog')
    plt.show()

    libm2k.contextClose(context, True)
Пример #3
0
def main():
    context = libm2k.m2kOpen("ip:192.168.2.1")
    if context is None:
        print(
            'Connection Error: No ADALM2000 device available/connected to your PC.'
        )
        exit(1)

    print('Calibrating ADC . . .')
    context.calibrateADC()

    power_supply = context.getPowerSupply()

    power_supply.enableChannel(0, True)
    power_supply.pushChannel(0, 3.3)

    m2k_i2c_init = libm2k.m2k_i2c_init()
    m2k_i2c_init.scl = 0
    m2k_i2c_init.sda = 1
    m2k_i2c_init.context = context

    i2c_init_param = libm2k.i2c_init_param()
    i2c_init_param.max_speed_hz = 100000
    i2c_init_param.slave_address = 0x48
    i2c_init_param.extra = m2k_i2c_init

    i2c_desc = libm2k.i2c_init(i2c_init_param)
    if i2c_desc is None:
        print('I2C Error: Could not configure I2C')
        exit(1)

    print('Initiating I2C transfer . . .')
    if libm2k.i2c_write(i2c_desc, bytearray([0x0B]), libm2k.i2c_general_call
                        | libm2k.i2c_repeated_start) == -1:
        exit(1)

    data_read_config = bytearray(1)
    libm2k.i2c_read(i2c_desc, data_read_config, libm2k.i2c_general_call)
    if len(data_read_config) == 0:
        exit(1)

    print('Reading the temperature . . .')
    if libm2k.i2c_write(i2c_desc, bytearray([0]), libm2k.i2c_general_call
                        | libm2k.i2c_repeated_start) == -1:
        exit(1)

    data_read_temperature = bytearray(2)
    libm2k.i2c_read(i2c_desc, data_read_temperature, libm2k.i2c_general_call)
    if len(data_read_temperature) == 0:
        exit(1)

    temperature = convert_temperature(data_read_temperature)
    print('Temperature: ' + str(temperature) + '\u2103')

    libm2k.i2c_remove(i2c_desc)
    libm2k.contextClose(context, True)
Пример #4
0
def main():
    context = libm2k.m2kOpen()
    if context is None:
        print('Connection Error: No ADALM2000 device available/connected to your PC.')
        exit(1)

    digital = context.getDigital()

    # setup SPI
    m2k_spi_init = libm2k.m2k_spi_init()
    m2k_spi_init.clock = 0
    m2k_spi_init.mosi = 1
    m2k_spi_init.miso = 3
    m2k_spi_init.bit_numbering = libm2k.MSB
    m2k_spi_init.cs_polarity = libm2k.ACTIVE_LOW
    m2k_spi_init.context = context

    spi_init_param = libm2k.spi_init_param()
    spi_init_param.max_speed_hz = 1000000
    spi_init_param.mode = libm2k.SPI_MODE_0
    spi_init_param.chip_select = 2
    spi_init_param.extra = m2k_spi_init

    spi_desc = libm2k.spi_init(spi_init_param)
    if spi_desc is None:
        print('SPI Error: Could not configure SPI')
        exit(1)

    data = bytearray([0x4A, 0xF1])
    buffer = libm2k.spi_create_buffer(spi_desc, data)
    print(f'Digital buffer: {buffer}')

    # here can be modified the data inside the digital buffer

    # transmitting data
    libm2k.spi_write_and_read_samples(spi_desc, buffer, data)
    print(f'Received data: {data}')  # received data
    libm2k.spi_remove(spi_desc)
    libm2k.contextClose(context, True)
Пример #5
0
def main():
    context = libm2k.m2kOpen('ip:192.168.2.1')
    if context is None:
        print(
            'Connection Error: No ADALM2000 device available/connected to your PC.'
        )
        exit(1)

    m2k_uart_init = libm2k.m2k_uart_init()
    m2k_uart_init.bits_number = 8
    m2k_uart_init.parity = libm2k.NO_PARITY
    m2k_uart_init.stop_bits = libm2k.ONE
    m2k_uart_init.context = context

    uart_init_param = libm2k.uart_init_param()
    uart_init_param.device_id = 0
    uart_init_param.baud_rate = 9600
    uart_init_param.extra = m2k_uart_init

    uart_desc_write = libm2k.uart_init(uart_init_param)

    uart_init_param.device_id = 1
    uart_desc_read = libm2k.uart_init(uart_init_param)

    if uart_desc_write is None or uart_desc_read is None:
        print('UART Error: Could not configure UART')
        exit(1)

    read_process = multiprocessing.Process(target=print_read_data,
                                           args=(uart_desc_read, 3))
    read_process.start()
    time.sleep(1)
    libm2k.uart_write(uart_desc_write, bytearray('ADI', 'utf-8'))
    read_process.join()

    libm2k.uart_remove(uart_desc_write)
    libm2k.uart_remove(uart_desc_read)
    libm2k.contextClose(context)
Пример #6
0
def main():
    ctx = libm2k.m2kOpen(uri)
    ctx.calibrateADC()
    ctx.calibrateDAC()

    siggen = ctx.getAnalogOut()

    #call buffer generator, returns sample rate and buffer
    samp0, buffer0 = sine_buffer_generator(0, 200000, 2, 0, 90)
    samp1, buffer1 = sine_buffer_generator(1, 200000, 2, 0, 0)

    siggen.enableChannel(0, True)
    siggen.enableChannel(1, True)

    siggen.setSampleRate(0, samp0)
    siggen.setSampleRate(1, samp1)

    siggen.push([buffer0, buffer1])

    input(" Press any key to stop generation ")

    siggen.stop()
    libm2k.contextClose(ctx)
Пример #7
0
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#

# This example reads the analog voltage from channel 0 of the analog input

import libm2k as l

channel = 0

ctx = l.m2kOpen()
if ctx is None:
    print(
        "Connection Error: No ADALM2000 device available/connected to your PC."
    )
    exit(1)

ctx.calibrateADC()
ain = ctx.getAnalogIn()
ain.enableChannel(channel, True)
print(ain.getVoltage()[channel])

l.contextClose(ctx)
Пример #8
0
def main():
    context = libm2k.m2kOpen('ip:192.168.2.1')
    if context is None:
        print(
            'Connection Error: No ADALM2000 device available/connected to your PC.'
        )
        exit(1)

    context.calibrateADC()
    analog_in = context.getAnalogIn()
    power_supply = context.getPowerSupply()
    digital = context.getDigital()

    # setup analog in
    analog_in.setOversamplingRatio(1)
    analog_in.setSampleRate(1000000)
    analog_in.enableChannel(0, True)
    analog_in.enableChannel(1, False)
    analog_in.setRange(libm2k.ANALOG_IN_CHANNEL_1, libm2k.PLUS_MINUS_25V)

    # enable LDAC
    digital.setDirection(3, libm2k.DIO_OUTPUT)
    digital.enableChannel(3, True)

    # enable CLR
    digital.setDirection(4, libm2k.DIO_OUTPUT)
    digital.enableChannel(4, True)

    # setup SPI
    m2k_spi_init = libm2k.m2k_spi_init()
    m2k_spi_init.clock = 1
    m2k_spi_init.mosi = 2
    m2k_spi_init.miso = 7  # dummy value - miso is not used in this example
    m2k_spi_init.bit_numbering = libm2k.MSB
    m2k_spi_init.context = context

    spi_init_param = libm2k.spi_init_param()
    spi_init_param.max_speed_hz = 1000000
    spi_init_param.mode = libm2k.SPI_MODE_3
    spi_init_param.chip_select = 0
    spi_init_param.extra = m2k_spi_init

    spi_desc = libm2k.spi_init(spi_init_param)
    if spi_desc is None:
        print('SPI Error: Could not configure SPI')
        exit(1)

    power_supply.enableChannel(0, True)
    power_supply.pushChannel(0, 5)

    # CLR and LDAC high as long as bits are transmitted
    digital.setValueRaw(3, libm2k.HIGH)
    digital.setValueRaw(4, libm2k.HIGH)

    data = bytearray(get_register_data(VOLTAGE))
    # transmitting data
    libm2k.spi_write_and_read(spi_desc, data)
    if len(data) == 0:
        print('SPI Error: Could not transmit the data')
        exit(1)

    # update with current shift register contents
    digital.setValueRaw(3, libm2k.LOW)

    samples = analog_in.getSamples(100)
    average = sum(samples[0]) / len(samples[0])
    print('Average value: ' + str(average))

    libm2k.spi_remove(spi_desc)
    libm2k.contextClose(context, True)
Пример #9
0
aout.setSampleRate(0, 7500)
aout.setSampleRate(1, 7500)
aout.enableChannel(0, True)
aout.enableChannel(1, True)

print("aout sample rate: " + str(aout.getSampleRate()))
audio = data[1]
gain = 100.0
dc = np.convolve(audio, (np.ones(64) / 64.0),
                 mode='same')  # Calculate running DC average
audio = audio - dc
audio[0:100] = [0] * 100  # get rid of edge effect
normal_audio = audio
audio = np.flip(audio)  # Here's where the flip happens!!
audio = audio * gain  # add some gain

# Push data
buffer = [audio, audio]
aout.setCyclic(True)
aout.push(buffer)

# Plot audio data
plt.plot(audio, label="flipped audio")
plt.plot(np.array(normal_audio * gain), label="normal audio")
plt.legend()
plt.show()
time.sleep(5)

libm2k.contextClose(ctx)
Пример #10
0
def run_specific_tests_from_C_PowerSupplyTests():
    """Test suite for C_Power_SupplyTests where the used can choose the desired test
        Available Power Supply tests: test_negative_power_supply, test_positive_power_supply
    """
    suite = unittest.TestSuite()
    suite.addTest(C_PowerSupplyTests("test_1_power_supply_object")) #test necessary to retrieve the power supply object
    suite.addTest(C_PowerSupplyTests("add_test_name_here")) #add the name of the test between " "
    #you can add manytests from the available ones using  the line above as example

    runner = unittest.TextTestRunner()
    runner.run(suite)
    return



if __name__ =="__main__":
    """Main file where tests for all segments are called. The test classes are organized in a test suite.
    To run specific tests, comment run_test_suite() line and uncomment run_specific_tests_from...()  line(s)

    """
    run_test_suite()

    #run_specific_tests_from_A_AnalogTests()
    #run_specific_tests_from_B_TriggerTests()
    #run_specific_tests_from_C_PowerSupplyTests()



libm2k.contextClose(ctx, True)
Пример #11
0
 def tearDown(self):
     self.tb = None
     libm2k.contextClose(self.ctx)
 def signal_handler(sig, frame):
     nonlocal calibration_values
     write_in_file(calibration_values, args.values, args.file)
     libm2k.contextClose(ctx)
     sys.exit(0)
def close_app():
    libm2k.contextClose(ctx)
    print("context closed")
    window.destroy()