-
Notifications
You must be signed in to change notification settings - Fork 0
Signal multiplexer
Markus Grönholm edited this page Jun 15, 2026
·
3 revisions
python -mpip install pyserial alshain
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 )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()
# 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 )