Skip to content

Signal multiplexer

Markus Grönholm edited this page Jun 15, 2026 · 3 revisions

Alshain Signal multiplexer

Install required packages

python -mpip install pyserial alshain

Quick start

import alshain
import serial
import sys

# Serial port as first command line parameter
com = serial.Serial( sys.argv[1], alshain.BAUDRATE, timeout = 0.25 )

mux = alshain.SignalMultiplexer( com, address = 100 )

# Set multiplexer channel
mux.write( alshain.SignalMultiplexer.Parameters.CHANNEL, 1 )

Two-channel logging with Alshain Pica

import alshain
import serial
import sys
import time


# Serial port as first command line parameter
com = serial.Serial( sys.argv[1], alshain.BAUDRATE, timeout = 0.25 )

mux = alshain.SignalMultiplexer( com, address = 100 )
pica = alshain.Pica( com, address = 1 )

# Set Pica lowpass filter to 3.0 Hz for faster sampling
pica.write( alshain.Pica.Parameters.LOWPASS_FREQ, 3.0 )

# Start time
t0 = time.time()

try:
    with open( "output-mux.csv", "w" ) as handle:
        while True:
            results = []
            for channel in [0, 1]:
                pica.write( alshain.Pica.Parameters.PULSE_ENABLE, 0) # Stop measurement
                mux.write( alshain.SignalMultiplexer.Parameters.CHANNEL, channel ) # Select channel
                pica.write( alshain.Pica.Parameters.PULSE_ENABLE, 1) # Start measurement (resets lowpass filter)
                time.sleep( 1.0 ) # Wait lowpass filter to stabilise
                results.append( pica.read( alshain.Pica.Parameters.RESULT ) ) # Read measurement
            
            # Write to log file                
            t = time.time() - t0
            print( t, results[0], results[1], file = handle )
            
            # Print to terminal
            print( t, results[0], results[1], file = sys.stderr )
except KeyboardInterrupt:
    pass

com.close()

Parameters

# Set multiplexer channel ie. routing from input to which output (signal flow is bidirectional)
# (default: 0)
mux.write( alshain.SignalMultiplexer.Parameters.CHANNEL, 0 ) # Set to channel 0 (channels are 0, 1, 2, 3)

# Read multiplexer bus voltage
mux.read( alshain.SignalMultiplexer.Parameters.VBUS ) # in volts (floating point)

# Uptime counts milliseconds from power on
mux.read( alshain.SignalMultiplexer.Parameters.UPTIME )

# Current firmware version can be queries
mux.read( alshain.SignalMultiplexer.Parameters.FIRMWARE_VER )

Clone this wiki locally