Commit 58052a8c authored by Kuldeep Singh Dhaka's avatar Kuldeep Singh Dhaka

Changes for libbox0 v0.3.0

TODO: Check all example and generate appropriate outputs
parent ad5e30b7
......@@ -32,12 +32,18 @@
"# open DIO (digital Input/Output) module\n",
"dio = Box0.dio(dev)\n",
"\n",
"# Prepare for basic operations (read, write, toggle etc..)\n",
"Box0.basic_prepare(dio)\n",
"\n",
"# initalize the pin\n",
"pin0 = Box0.pin(dio, 0)\n",
"Box0.output(pin0)\n",
"Box0.low(pin0)\n",
"Box0.enable(pin0)\n",
"\n",
"# Start basic mode (things will come into effect)\n",
"Box0.basic_start(dio)\n",
"\n",
"#TODO: catch SIGINT (InterruptException)\n",
"# not working: http://stackoverflow.com/questions/20831290\n",
"# if not caught, module is not closed, it will require kernel restart\n",
......@@ -46,6 +52,9 @@
" sleep(.5)\n",
"end\n",
"\n",
"# Stop in basic mode\n",
"Box0.basic_stop(dio)\n",
"\n",
"Box0.close(dio)\n",
"Box0.close(dev)"
]
......
......@@ -1927,12 +1927,12 @@
"aout0 = Box0.aout(dev)\n",
"\n",
"# prepare AIN0\n",
"Box0.static_prepare(ain0)\n",
"Box0.set(Box0.chan_seq(ain0), Array{UInt8}([0, 1]))\n",
"Box0.set(Box0.speed(ain0), 100000)\n",
"Box0.snapshot_prepare(ain0)\n",
"Box0.chan_seq_set(ain0, Array{Cuint}([0, 1]))\n",
"Box0.bitsize_speed_set(ain0, Cuint(12), Culong(100000))\n",
"\n",
"# prepare AOUT0\n",
"Box0.static_prepare(aout0)\n",
"Box0.snapshot_prepare(aout0)\n",
"\n",
"# generate voltage, read voltage, calculate current and store the result\n",
"# AIN0.CH0 = AOUT0.CH0 = generated signal\n",
......@@ -1948,16 +1948,16 @@
"\n",
"for i in range(1, SAMPLES)\n",
" if aout0_running\n",
" Box0.static_stop(aout0)\n",
" Box0.snapshot_stop(aout0)\n",
" end\n",
" \n",
" # output \"v\" value on AOUT0.CH0\n",
" Box0.static_start(aout0, Array(voltages[i:i]))\n",
" Box0.snapshot_start(aout0, Array(voltages[i:i]))\n",
" aout0_running = true\n",
" \n",
" # read back AIN.CH0 and AIN0.CH1\n",
" readed_data = Array{Float32}(SAMPLES)\n",
" Box0.static_start(ain0, readed_data)\n",
" Box0.snapshot_start(ain0, readed_data)\n",
" \n",
" # do the calculation\n",
" ch0 = mean(readed_data[1:2:length(readed_data)])\n",
......@@ -1971,7 +1971,7 @@
"\n",
"# stop if AOUT0 running\n",
"if aout0_running\n",
" Box0.static_stop(aout0)\n",
" Box0.snapshot_stop(aout0)\n",
"end\n",
"\n",
"# close the resources\n",
......
......@@ -38,7 +38,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.5.1"
"version": "3.5.2"
}
},
"nbformat": 4,
......
......@@ -145,7 +145,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.5.1"
"version": "3.5.2"
}
},
"nbformat": 4,
......
......@@ -91,7 +91,7 @@
"\"use strict\";\n",
"\n",
"var express = require('express')\n",
"var box0 = require('box0')\n",
"var box0 = require('../lib/box0')\n",
"var util = require('util')\n",
"\n",
"var dev = box0.usb.open_supported()\n",
......@@ -127,14 +127,14 @@
"\n",
" res.json({\n",
" name: dio0.header.name,\n",
" count: dio0.count.value,\n",
" count: dio0.pin_count,\n",
" ref: {low, high}\n",
" })\n",
"})\n",
"\n",
"app.param('pin', function(req, res, next, pin) {\n",
" var pin_value = parseInt(pin)\n",
" if (pin_value >= 0 && pin_value < dio0.count.value) {\n",
" if (pin_value >= 0 && pin_value < dio0.pin_count) {\n",
" req.pin = pin_value\n",
" next()\n",
" return\n",
......@@ -146,8 +146,10 @@
"app.get('/dio/0/:pin', function (req, res) {\n",
" handle_exception(res, function () {\n",
" var pin = req.pin\n",
" var name = (pin < dio0.label.values.length) ?\n",
" dio0.label.values[pin] : 'CH' + pin\n",
" var name = dio0.label.pin[pin]\n",
" if (name == null) {\n",
" name = 'CH' + pin\n",
" }\n",
"\n",
" var value = dio0.value_get(pin)\n",
" var dir = dio0.dir_get(pin)\n",
......@@ -246,10 +248,13 @@
"\n",
"app.listen(3000, function () {\n",
" console.log('Listening on port 3000!')\n",
" dio0.basic_prepare()\n",
" dio0.basic_start()\n",
"})\n",
"\n",
"process.on('SIGINT', function() {\n",
" console.log(\"\\nGracefully shutting down from SIGINT (Ctrl+C)\")\n",
" dio0.basic_stop()\n",
" dio0.close()\n",
" dev.close()\n",
" process.exit(1)\n",
......
......@@ -143,7 +143,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.5.1"
"version": "3.5.2"
}
},
"nbformat": 4,
......
......@@ -33,12 +33,16 @@
"# open DIO (digital Input/Output) module\n",
"dio = dev.dio()\n",
"\n",
"dio.basic_prepare()\n",
"\n",
"# initalize the pin\n",
"pin0 = dio.pin(0)\n",
"pin0.output()\n",
"pin0.low()\n",
"pin0.enable()\n",
"\n",
"dio.basic_start()\n",
"\n",
"try:\n",
" # perform a loop and toggle the pin 2 times per second\n",
" while True:\n",
......@@ -48,6 +52,8 @@
" # user want to exit\n",
" pass\n",
"\n",
"dio.basic_close()\n",
"\n",
"# close the resources\n",
"dio.close()\n",
"dev.close()"
......@@ -70,7 +76,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.5.1"
"version": "3.5.2"
}
},
"nbformat": 4,
......
......@@ -72,16 +72,12 @@
"#\n",
"\n",
"import box0\n",
"import box0.misc.box0v5.ps as ps\n",
"\n",
"# python2 raw_input and python3 input\n",
"try: input = raw_input\n",
"except: pass\n",
"\n",
"box0_dev = box0.usb.open_supported()\n",
"\n",
"# extract libusb device handle since box0v5.ps API require it\n",
"dev = box0.usb.libusb_device_handle(box0_dev)\n",
"dev = box0.usb.open_supported()\n",
"\n",
"print(\"Welcome! please enter a command:\")\n",
"print(\" b - [both] digital supply enable and analog supply enable\")\n",
......@@ -92,23 +88,23 @@
"print(\" e - [exit] exit the program\")\n",
"\n",
"#turn both supply off\n",
"ps.en_set(dev, ps.ANALOG | ps.DIGITAL, 0)\n",
"dev.ps_en_set(dev.PS_ANALOG | dev.PS_DIGITAL, 0)\n",
"\n",
"try:\n",
" while True:\n",
" c = input(\"> \")\n",
" if c == \"b\":\n",
" ps.en_set(dev, ps.ANALOG | ps.DIGITAL, ps.ANALOG | ps.DIGITAL)\n",
" dev.ps_en_set(dev.PS_ANALOG | dev.PS_DIGITAL, dev.PS_ANALOG | dev.PS_DIGITAL)\n",
" elif c == \"a\":\n",
" ps.en_set(dev, ps.ANALOG, ps.ANALOG)\n",
" dev.ps_en_set(dev.PS_ANALOG, dev.PS_ANALOG)\n",
" elif c == \"d\":\n",
" ps.en_set(dev, ps.DIGITAL, ps.DIGITAL)\n",
" dev.ps_en_set(dev.PS_DIGITAL, dev.PS_DIGITAL)\n",
" elif c == \"n\":\n",
" ps.en_set(dev, ps.ANALOG | ps.DIGITAL, 0)\n",
" dev.ps_en_set(dev.PS_ANALOG | dev.PS_DIGITAL, 0)\n",
" elif c == \"s\":\n",
" mask = ps.en_get(dev)\n",
" print(\"Analog: \" + (\"Enabled\" if mask & ps.ANALOG else \"Disabled\"))\n",
" print(\"Digital: \" + (\"Enabled\" if mask & ps.DIGITAL else \"Disabled\"))\n",
" mask = dev.ps_en_get()\n",
" print(\"Analog: \" + (\"Enabled\" if mask & dev.PS_ANALOG else \"Disabled\"))\n",
" print(\"Digital: \" + (\"Enabled\" if mask & dev.PS_DIGITAL else \"Disabled\"))\n",
" elif c == \"e\":\n",
" break;\n",
" else:\n",
......@@ -116,11 +112,10 @@
"except KeyboardInterrupt: pass\n",
"\n",
"#turn all supply off\n",
"ps.en_set(dev, ps.ANALOG | ps.DIGITAL, 0)\n",
"dev.ps_en_set(dev.PS_ANALOG | dev.PS_DIGITAL, 0)\n",
"\n",
"#close device\n",
"dev = None\n",
"del box0_dev"
"del dev"
]
},
{
......@@ -133,18 +128,18 @@
"\n",
"| Name | Value |\n",
"|---------------------|\n",
"|PS_EN_GET | 0x01 |\n",
"|PS_EN_SET | 0x02 |\n",
"|PS_OC_GET | 0x03 |\n",
"|PS_OC_ACK | 0x04 |\n",
"|PS_EN_GET | 201 |\n",
"|PS_EN_SET | 202 |\n",
"|PS_OC_GET | 203 |\n",
"|PS_OC_ACK | 204 |\n",
"\n",
"\n",
"## Read enable value\n",
"| bmRequestType | Host ← Device, Device, Vendor |\n",
"|---------------|---------------------------------|\n",
"| bRequest | 0xFF |\n",
"| bRequest | PS_EN_GET |\n",
"| wValue | 0x0000 |\n",
"| wIndex | HIGH8(0) LOW8(PS_EN_GET) |\n",
"| wIndex | 0x0000 |\n",
"| wLength | 0x0001 |\n",
"| Data | BIT0 = Analog, BIT1 = Digital |\n",
"\n",
......@@ -155,9 +150,9 @@
"\n",
"| bmRequestType | Host → Device, Device, Vendor |\n",
"|---------------|-------------------------------|\n",
"| bRequest | 0xFF |\n",
"| bRequest | PS_EN_SET |\n",
"| wValue | HIGH8(mask) LOW8(value) |\n",
"| wIndex | HIGH8(0) LOW8(PS_EN_SET) |\n",
"| wIndex | 0x0000 |\n",
"| wLength | 0x0000 |\n",
"| Data | None |\n",
"\n",
......@@ -168,9 +163,9 @@
"\n",
"| bmRequestType | Host ← Device, Device, Vendor |\n",
"|---------------|---------------------------------|\n",
"| bRequest | 0xFF |\n",
"| bRequest | PS_OC_GET |\n",
"| wValue | 0x0000 |\n",
"| wIndex | HIGH8(0) LOW8(PS_OC_GET) |\n",
"| wIndex | 0x0000 |\n",
"| wLength | 0x0001 |\n",
"| Data | BIT0 = Analog, BIT1 = Digital |\n",
"\n",
......@@ -181,9 +176,9 @@
"\n",
"| bmRequestType | Host → Device, Device, Vendor |\n",
"|---------------|-------------------------------|\n",
"| bRequest | 0xFF |\n",
"| bRequest | PS_OC_ACK |\n",
"| wValue | HIGH8(0) LOW8(value) |\n",
"| wIndex | HIGH8(0) LOW8(PS_OC_ACK) |\n",
"| wIndex | 0x0000 |\n",
"| wLength | 0x0000 |\n",
"| Data | None |\n",
"\n",
......@@ -210,8 +205,8 @@
"import usb.util\n",
"from usb.util import CTRL_IN, CTRL_OUT, CTRL_RECIPIENT_DEVICE, CTRL_TYPE_VENDOR\n",
"\n",
"BOX0V5_PS_EN_GET = 0x01\n",
"BOX0V5_PS_EN_SET = 0x02\n",
"BOX0V5_PS_EN_GET = 201\n",
"BOX0V5_PS_EN_SET = 202\n",
"\n",
"POWER_ANALOG = 0x01\n",
"POWER_DIGITAL = 0x02\n",
......@@ -249,7 +244,7 @@
" if analog: value |= POWER_ANALOG\n",
" if digital: value |= POWER_DIGITAL\n",
" wValue = (mask << 8) | value\n",
" dev.ctrl_transfer(bmReqType, 0xFF, wValue, BOX0V5_PS_EN_SET)\n",
" dev.ctrl_transfer(bmReqType, BOX0V5_PS_EN_SET, wValue)\n",
"\n",
"def power_supply_get(dev):\n",
" \"\"\"\n",
......@@ -258,7 +253,7 @@
" return a tuple (<analog-supply>, <digital-supply>)\n",
" \"\"\"\n",
" bmReqType = CTRL_IN | CTRL_RECIPIENT_DEVICE | CTRL_TYPE_VENDOR\n",
" data = dev.ctrl_transfer(bmReqType, 0xFF, 0, BOX0V5_PS_EN_GET, 1)\n",
" data = dev.ctrl_transfer(bmReqType, BOX0V5_PS_EN_GET, 0, 0, 1)\n",
" analog = (data[0] & POWER_ANALOG) != 0x00\n",
" digital = (data[0] & POWER_DIGITAL) != 0x00\n",
" return analog, digital\n",
......@@ -311,7 +306,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.5.1"
"version": "3.5.2"
}
},
"nbformat": 4,
......
{
"cells": [
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\ngg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f0e02ef9278>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"%matplotlib inline \n",
"import box0\n",
"import time\n",
"import numpy as np\n",
"from pylab import *\n",
"from IPython import display\n",
"\n",
"SAMPLE_BITSIZE = 12\n",
"SAMPLE_SPEED = 10000\n",
"SAMPLE_COUNT = 500\n",
"\n",
"dev = box0.usb.open_supported()\n",
"\n",
"ain0 = dev.ain(0)\n",
"ain0.snapshot_prepare()\n",
"\n",
"\n",
"while True:\n",
"\n",
" xlabel('time (s)')\n",
" ylabel('voltage (V)')\n",
" title('About as simple as it gets, folks')\n",
" grid(True)\n",
" \n",
" ain0.bitsize_speed_set(SAMPLE_BITSIZE, SAMPLE_SPEED)\n",
"\n",
" s = np.empty(SAMPLE_COUNT, dtype=np.float64)\n",
" ain0.snapshot_start(s)\n",
"\n",
" t = arange(0.0, float(SAMPLE_COUNT) / float(SAMPLE_SPEED), 1 / float(SAMPLE_SPEED))\n",
" clf()\n",
" grid(True)\n",
"\n",
" #print(\"s is\" + str(s))\n",
" #print(\"t is\" + str(t))\n",
"\n",
"\n",
" \n",
" #~ fill(t, s, 'r.-')\n",
" plot(t, s, 'r.-')\n",
" display.clear_output(wait=True)\n",
" display.display(plt.gcf()) \n",
" time.sleep(0.001)\n",
"\n",
"ain0.close()\n",
"dev.close()\n"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.5.2"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
{
"cells": [
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7fae73057358>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"%matplotlib inline \n",
"import box0\n",
"import time\n",
"import numpy as np\n",
"from pylab import *\n",
"from IPython import display\n",
"\n",
"SAMPLE_SPEED = 9600.\n",
"SAMPLE_COUNT = 500.\n",
"\n",
"dev = box0.usb.open_supported()\n",
"\n",
"ain0 = dev.ain(0)\n",
"ain0.static_prepare()\n",
"\n",
"\n",
"while True:\n",
"\n",
" xlabel('time (s)')\n",
" ylabel('voltage (V)')\n",
" title('About as simple as it gets, folks')\n",
" grid(True)\n",
"\n",
" ain0.bitsize.current = 12\n",
" ain0.speed.current = int(SAMPLE_SPEED)\n",
" s = np.empty(int(SAMPLE_COUNT), dtype=np.float64)\n",
"\n",
"\n",
" ain0.static_start(s)\n",
"\n",
" t = arange(0.0, SAMPLE_COUNT / SAMPLE_SPEED, 1/SAMPLE_SPEED)\n",
" clf()\n",
" grid(True)\n",
"\n",
" #print(\"s is\" + str(s))\n",
" #print(\"t is\" + str(t))\n",
"\n",
"\n",
" \n",
" #~ fill(t, s, 'r.-')\n",
" plot(t, s, 'r.-')\n",
" display.clear_output(wait=True)\n",
" display.display(plt.gcf()) \n",
" time.sleep(0.001)\n",
" \n",
"ain0.close()\n",
"dev.close()\n"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.5.1"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
......@@ -9,7 +9,7 @@
},
{
"cell_type": "code",
"execution_count": null,
"execution_count": 1,
"metadata": {
"collapsed": true
},
......@@ -20,6 +20,7 @@
"import time\n",
"\n",
"# When 1000 samples are output at 100KS/s, the generate waveform is of 100Hz\n",
"SAMPLE_BITSIZE = 12\n",
"SAMPLE_SPEED = 100000 # 100KS/s\n",
"SAMPLE_COUNT = 1000\n",
"\n",
......@@ -32,9 +33,9 @@
"aout = dev.aout()\n",
"\n",
"# Prepare for static mode\n",
"aout.static_prepare()\n",
"aout.speed.current = SAMPLE_SPEED\n",
"aout.static_start(y)\n",
"aout.snapshot_prepare()\n",
"aout.bitsize_speed_set(SAMPLE_BITSIZE, SAMPLE_SPEED)\n",
"aout.snapshot_start(y)\n",
"\n",
"# wait for the user to ask for exit\n",
"try:\n",
......@@ -44,7 +45,7 @@
" pass\n",
"\n",
"# Return all the resources\n",
"aout.static_stop()\n",
"aout.snapshot_stop()\n",
"aout.close()\n",
"dev.close()"
]
......@@ -82,7 +83,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.5.1"
"version": "3.5.2"
}
},
"nbformat": 4,
......
......@@ -18,7 +18,7 @@
},
{
"cell_type": "code",
"execution_count": null,
"execution_count": 1,
"metadata": {
"collapsed": true
},
......@@ -31,25 +31,27 @@
"dev = box0.usb.open_supported()\n",
"pwm = dev.pwm()\n",
"\n",
"pwm.output_prepare()\n",
"\n",
"# Increment count every 1/1000 second, count upto 250 and toggle when reach at 150\n",
"# effectively giving a 4Hz with 50% duty cycle output on channel 0\n",
"# So, LED will blink 4 per second!\n",
"pwm.speed.current = 1000\n",
"pwm.period = 250\n",
"pwm.width[0] = 125\n",
"pwm.speed_set(1000)\n",
"pwm.period_set(250)\n",
"pwm.width_set(0, 125)\n",
"\n",
"# Start generating!\n",
"pwm.start()\n",
"pwm.output_start()\n",
"\n",
"# Wait till we are not asked to exit\n",
"try:\n",
"\twhile True:\n",
"\t\ttime.sleep(0.1)\n",
" while True:\n",
" time.sleep(0.1)\n",
"except KeyboardInterrupt:\n",
"\tpass\n",
" pass\n",
"\n",
"# give back all the required resources\n",
"pwm.stop()\n",
"pwm.output_stop()\n",
"pwm.close()\n",
"dev.close()\n"
]
......@@ -71,7 +73,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.5.1"
"version": "3.5.2"
}
},
"nbformat": 4,
......
......@@ -53,12 +53,12 @@
"aout0 = dev.aout()\n",
"\n",
"# prepare AIN0\n",
"ain0.static_prepare()\n",
"ain0.chan_seq.current = [0, 1]\n",
"ain0.speed.current = 100000\n",
"ain0.snapshot_prepare()\n",
"ain0.chan_seq_set([0, 1])\n",
"ain0.bitsize_speed_set(12, 100000)\n",
"\n",
"# prepare AOUT0\n",
"aout0.static_prepare()\n",
"aout0.snapshot_prepare()\n",
"\n",
"# generate voltage, read voltage, calculate current and store the result\n",
"# AIN0.CH0 = AOUT0.CH0 = generated signal\n",
......@@ -74,15 +74,15 @@
"\n",
"for i in range(SAMPLES):\n",
" if aout0_running:\n",
" aout0.static_stop()\n",
" aout0.snapshot_stop()\n",
" \n",
" # output \"v\" value on AOUT0.CH0\n",
" aout0.static_start(voltages[i:(i+1)])\n",
" aout0.snapshot_start(voltages[i:(i+1)])\n",
" aout0_running = True\n",
" \n",
" # read back AIN0.CH0 and AIN0.CH1\n",
" readed_data = np.empty(SAMPLES)\n",
" ain0.static_start(readed_data)\n",
" ain0.snapshot_start(readed_data)\n",
" \n",
" # do the calculation\n",
" ch0 = np.mean(readed_data[0::2])\n",
......@@ -95,7 +95,7 @@
"\n",
"# stop if AOUT0 running\n",
"if aout0_running:\n",
" aout0.static_stop()\n",
" aout0.snapshot_stop()\n",
"\n",
"# close the resources\n",
"ain0.close()\n",
......@@ -135,7 +135,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.5.1"
"version": "3.5.2"
}
},
"nbformat": 4,
......
......@@ -806,7 +806,7 @@
}
],
"source": [
"%matplotlib notebook\n",
"#~ %matplotlib notebook\n",
"import box0\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
......@@ -820,13 +820,11 @@
"\n",
"# prepare resources\n",
"\n",
"ain0.static_prepare()\n",
"ain0.bitsize.current = 12\n",
"ain0.chan_seq.current = [0, 1]\n",
"ain0.snapshot_prepare()\n",
"ain0.chan_seq_set([0, 1])\n",
"\n",
"aout0.static_prepare()\n",
"aout0.bitsize.current = 12\n",
"aout0.chan_seq.current = [0]\n",
"aout0.snapshot_prepare()\n",
"aout0.chan_seq_set([0])\n",
"\n",
"FREQ = range(100, 5000, 100)\n",
"\n",
......@@ -847,11 +845,11 @@
" global aout0\n",
"\n",
" # try to stop aout0 from last run\n",
" try: aout0.static_stop()\n",
" try: aout0.snapshot_stop()\n",
" except: pass\n",
"\n",