Skip to main content

A python package for instrumenting the FleaScope

Project description

Python library for instrumenting FleaScope

With this library, you can control and read your FleaScope(s).

Usage

Connect to your FleaScope

from pyfleascope.flea_scope import FleaScope

scope = FleaScope.connect() # for default hostname FleaScope
# scope = FleaScope.connect('scope1')
# scope = FleaScope.connect(port='/dev/ttyACM0')

Connecting by name will also take care of resetting the device if necessary.

Get your first reading from the BNC connector

df = scope.x1.read(timedelta(milliseconds=20))['bnc']

Calibration

Calibration values are by default read from flash upon connection. If necessary, recalibration can be performed via

# BNC probe in x1 mode
# Connect probe to GND
scope.x1.calibrate_0()
# Connect probe to 3.3V
scope.x1.calibrate_3v3()
scope.x1.write_calibration_to_flash()

# BNC probe in x10 mode
# Connect probe to GND
scope.x10.calibrate_0()
# Connect probe to 3.3V
scope.x10.calibrate_3v3()
scope.x10.write_calibration_to_flash()

Triggers

Trigger reading on analog edges

from pyfleascope.trigger_config import AnalogTrigger

df = scope.x1.read(
            timedelta(milliseconds=20),
            trigger=AnalogTrigger.start_capturing_when().rising_edge(volts=2),
)

or on digital signals

from pyfleascope.trigger_config import DigitalTrigger, BitState

df = scope.x1.read(
            timedelta(milliseconds=20),
            trigger=DigitalTrigger.start_capturing_when()
              .bit1(BitState.HIGH)
              .bit7(BitState.LOW)
              .starts_matching(),
)

Delay

Start capturing with a delay.

df = scope.x1.read(
            timedelta(milliseconds=20),
            trigger=AnalogTrigger.start_capturing_when().rising_edge(volts=2),
            delay=timedelta(milliseconds=0.2),
)

Waveform

Configure the built-in waveform generator.

from pyfleascope.flea_scope import Waveform

scope.set_waveform(Waveform.EKG, hz=1000)

Digital inputs

The digital input is captured in the column bitmask. The function extract_bits extracts boolean columns bit_$i for each bit.

df = scope.x1.read(
            timedelta(milliseconds=20),
            trigger=DigitalTrigger.start_capturing_when()
              .bit0(BitState.HIGH)
              .bit1(BitState.HIGH)
              .starts_matching(),
)
df = FleaScope.extract_bits(df)
df['bit_0'] = df['bit_0'].apply(int)

Using multiple FleaScopes

Multiple FleaScopes can be used at the same time. For exact timing alignment, the trigger signal can be forwarded.

scope1 = FleaScope.connect('scope1')
scope2 = FleaScope.connect('scope2')


capture_time = timedelta(microseconds=120)

# Capture data from two FleaScopes at the same time by forwarding the trigger
# TRIGGER_OUT on scope1 is connected to Bit 0 on scope2 via cable

def read_scope1():
    time.sleep(1) # give scope1 time to prepare
    return scope1.x1.read(
        capture_time,
        AnalogTrigger.start_capturing_when().auto(2),
    )

def read_scope2():
    return scope2.x1.read(
            capture_time,
            DigitalTrigger.start_capturing_when().bit0(BitState.HIGH).starts_matching(),
    )

with ThreadPoolExecutor(max_workers=8) as executor:
    f1 = executor.submit(read_scope1)
    f2 = executor.submit(read_scope2)
    df1 = f1.result()
    df2 = f2.result()

Cancel ongoing read

While waiting for the trigger or capturing values, the FleaScope is unresponsive. The ongoing read operation can be canceled via the unblock method.

scope.unblock()

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pyfleascope-0.1.0.tar.gz (534.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pyfleascope-0.1.0-py3-none-any.whl (8.0 kB view details)

Uploaded Python 3

File details

Details for the file pyfleascope-0.1.0.tar.gz.

File metadata

  • Download URL: pyfleascope-0.1.0.tar.gz
  • Upload date:
  • Size: 534.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.3

File hashes

Hashes for pyfleascope-0.1.0.tar.gz
Algorithm Hash digest
SHA256 55cd9ab1c5dea1fc659dacd9762bf442afb613b417fafbba23a1e56d472d35ba
MD5 7dc19ea5aef318a81d532418bf5c7885
BLAKE2b-256 402c3afd936205d43ef08de8b972a7dfb149918d5b3755cce373bad4d9a3c111

See more details on using hashes here.

File details

Details for the file pyfleascope-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: pyfleascope-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 8.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.3

File hashes

Hashes for pyfleascope-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 40fdb2347060d11efe73082b53d79cd2cb5244a352c966d4344039c33a7e4eab
MD5 35a2ceacd0a42bfd206df23cf978e72d
BLAKE2b-256 3552e43a1c4b2601ac12156f80ebb0cb401eba523e0e23d53a1f775718ffc65b

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page