more info
This commit is contained in:
@@ -1,9 +1,9 @@
|
|||||||
MIT License
|
MIT License
|
||||||
|
|
||||||
Copyright (c) <year> <copyright holders>
|
Copyright (c) 2018 Ondřej Hruška
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|||||||
@@ -1,8 +1,27 @@
|
|||||||
# demo-bode-plotter
|
# demo-bode-plotter
|
||||||
|
|
||||||
GEX demo measuring the amplitude and phase frequency response of analog filtes
|
GEX demo measuring the amplitude and phase frequency response of analog filtes.
|
||||||
|
|
||||||
To run it, change the 'gex' symlink to point to your copy of the GEX client library.
|
This demo uses an external waveform generador AD9833 (on a breakout module from eBay).
|
||||||
|
It could also use the built-in DAC, but the performance is sub-optimal and the plots
|
||||||
|
obtained with it had a lot of glitches. Feel free to adjust the script to use the
|
||||||
|
internal DAC and try it.
|
||||||
|
|
||||||
|
The AD9833 is connected to SPI on pins PA4 (SS), PA5 (SCK), and PA7 (MOSI).
|
||||||
|
Pins PA1 and PA2 are used by the ADC and attach before and after the filter (DUT).
|
||||||
|
|
||||||
|
The generator has a very low output amplitude (0.65 V max). To better utilize the
|
||||||
|
input range of the ADC, I used OP213 in a non-inverting configuration
|
||||||
|
(resistors 7.5k and 2.2k), with a 10M resistor from the input to GND. This gives us gain
|
||||||
|
of around 4.4, enough to reach just under 3V.
|
||||||
|
|
||||||
|
## To run the script
|
||||||
|
|
||||||
|
- Change the 'gex' symlink to point to your copy of the GEX client library.
|
||||||
|
- Load the attached UNITS.INI file into GEX (intended for GEX Hub)
|
||||||
|
- Connect the external circuitry and run the script.
|
||||||
|
|
||||||
|
Dependencies - pyplot, numpy, and whatever you need to use the GEX library: typically pyusb or pyserial.
|
||||||
|
|
||||||
## Example outputs
|
## Example outputs
|
||||||
|
|
||||||
|
|||||||
@@ -7,9 +7,9 @@
|
|||||||
# remove the same way. Reload to update the unit sections below.
|
# remove the same way. Reload to update the unit sections below.
|
||||||
|
|
||||||
# Digital output
|
# Digital output
|
||||||
DO=areset
|
DO=
|
||||||
# Digital input with triggers
|
# Digital input with triggers
|
||||||
DI=psign
|
DI=
|
||||||
# Neopixel RGB LED strip
|
# Neopixel RGB LED strip
|
||||||
NPX=
|
NPX=
|
||||||
# I2C master
|
# I2C master
|
||||||
@@ -25,7 +25,7 @@ ADC=adc
|
|||||||
# Shift register driver (595, 4094)
|
# Shift register driver (595, 4094)
|
||||||
SIPO=
|
SIPO=
|
||||||
# Frequency and pulse measurement
|
# Frequency and pulse measurement
|
||||||
FCAP=fcap
|
FCAP=
|
||||||
# Capacitive touch sensing
|
# Capacitive touch sensing
|
||||||
TOUCH=
|
TOUCH=
|
||||||
# Simple PWM output
|
# Simple PWM output
|
||||||
@@ -33,35 +33,7 @@ PWMDIM=
|
|||||||
# Two-channel analog output with waveforms
|
# Two-channel analog output with waveforms
|
||||||
DAC=
|
DAC=
|
||||||
|
|
||||||
[DO:areset@1]
|
[SPI:spi@2]
|
||||||
# Port name
|
|
||||||
port=A
|
|
||||||
# Pins (comma separated, supports ranges)
|
|
||||||
pins=8
|
|
||||||
# Initially high pins
|
|
||||||
initial=8
|
|
||||||
# Open-drain pins
|
|
||||||
open-drain=
|
|
||||||
|
|
||||||
[DI:psign@2]
|
|
||||||
# Port name
|
|
||||||
port=A
|
|
||||||
# Pins (comma separated, supports ranges)
|
|
||||||
pins=3
|
|
||||||
# Pins with pull-up
|
|
||||||
pull-up=
|
|
||||||
# Pins with pull-down
|
|
||||||
pull-down=
|
|
||||||
|
|
||||||
# Trigger pins activated by rising/falling edge
|
|
||||||
trig-rise=
|
|
||||||
trig-fall=
|
|
||||||
# Trigger pins auto-armed by default
|
|
||||||
auto-trigger=
|
|
||||||
# Triggers hold-off time (ms)
|
|
||||||
hold-off=100
|
|
||||||
|
|
||||||
[SPI:spi@3]
|
|
||||||
# Peripheral number (SPIx)
|
# Peripheral number (SPIx)
|
||||||
device=1
|
device=1
|
||||||
# Pin mappings (SCK,MISO,MOSI)
|
# Pin mappings (SCK,MISO,MOSI)
|
||||||
@@ -83,48 +55,30 @@ first-bit=MSB
|
|||||||
# SS port name
|
# SS port name
|
||||||
port=A
|
port=A
|
||||||
# SS pins (comma separated, supports ranges)
|
# SS pins (comma separated, supports ranges)
|
||||||
pins=14
|
pins=4
|
||||||
|
|
||||||
[ADC:adc@4]
|
[ADC:adc@4]
|
||||||
# Enabled channels, comma separated
|
# Enabled channels, comma separated
|
||||||
# 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
# 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
||||||
# A0 A1 A2 A3 A4 A5 A6 A7 B0 B1 C0 C1 C2 C3 C4 C5 Tsens Vref
|
# A0 A1 A2 A3 A4 A5 A6 A7 B0 B1 C0 C1 C2 C3 C4 C5 Tsens Vref
|
||||||
channels=1-2, 17
|
channels=1-2
|
||||||
|
|
||||||
# Sampling time (0-7)
|
# Sampling time (0-7)
|
||||||
sample_time=2
|
sample_time=2
|
||||||
# Sampling frequency (Hz)
|
# Sampling frequency (Hz)
|
||||||
frequency=10000
|
frequency=1000
|
||||||
|
|
||||||
# Sample buffer size
|
# Sample buffer size
|
||||||
# - shared by all enabled channels
|
# - shared by all enabled channels
|
||||||
# - defines the maximum pre-trigger size (divide by # of channels)
|
# - defines the maximum pre-trigger size (divide by # of channels)
|
||||||
# - captured data is sent in half-buffer chunks
|
# - captured data is sent in half-buffer chunks
|
||||||
# - buffer overrun aborts the data capture
|
# - buffer overrun aborts the data capture
|
||||||
buffer_size=256
|
buffer_size=512
|
||||||
|
|
||||||
# Enable continuous sampling with averaging
|
# Enable continuous sampling with averaging
|
||||||
# Caution: This can cause DAC output glitches
|
# Caution: This can cause DAC output glitches
|
||||||
averaging=Y
|
averaging=N
|
||||||
# Exponential averaging coefficient (permil, range 0-1000 ~ 0.000-1.000)
|
# Exponential averaging coefficient (permil, range 0-1000 ~ 0.000-1.000)
|
||||||
# - used formula: y[t]=(1-k)*y[t-1]+k*u[t]
|
# - used formula: y[t]=(1-k)*y[t-1]+k*u[t]
|
||||||
# - not available when a capture is running
|
# - not available when a capture is running
|
||||||
avg_factor=800
|
avg_factor=800
|
||||||
|
|
||||||
[FCAP:fcap@5]
|
|
||||||
# Signal input pin - one of:
|
|
||||||
# Full support: A0, A5, A15
|
|
||||||
# Indirect only: A1, B3
|
|
||||||
pin=A0
|
|
||||||
|
|
||||||
# Active level or edge (0-low,falling; 1-high,rising)
|
|
||||||
active-level=1
|
|
||||||
# Input filtering (0-15)
|
|
||||||
input-filter=0
|
|
||||||
# Pulse counter pre-divider (1,2,4,8)
|
|
||||||
direct-presc=1
|
|
||||||
# Pulse counting interval (ms)
|
|
||||||
direct-time=1000
|
|
||||||
|
|
||||||
# Mode on startup: N-none, I-indirect, D-direct, F-free count
|
|
||||||
initial-mode=N
|
|
||||||
|
|||||||
Reference in New Issue
Block a user