85 lines
3.3 KiB
Python
Executable File
85 lines
3.3 KiB
Python
Executable File
###############################################################################
|
|
# Filename: led_test.py
|
|
# Prepared By: James Dudley
|
|
# Date Prepared: February 26, 2018
|
|
# Date Revised: February 26, 2018
|
|
# Revision: 0.0.1
|
|
###############################################################################
|
|
|
|
import brainstem # import BrainStem API
|
|
from brainstem.result import Result # for easy access to error constants
|
|
from time import sleep
|
|
|
|
RESISTOR_VALUE = 412 # Current-limiting resistor value, Ohms
|
|
POWER_VOLTAGE = 5000000 # LED power voltage setpoint, uV
|
|
DAC = 16 # Analog output index for LED power
|
|
CURRENT = 14 # Differential analog input index for current measurement
|
|
VOLTAGE = 0 # Single-ended analog input index for voltage measurement
|
|
|
|
# Generic function to run BrainStem commands with error checking
|
|
def step(func, func_str, *args):
|
|
print '>> ' + func_str[0].upper() + func_str[1:] # Capitalize first letter of string
|
|
res = func(*args)
|
|
err = val = res
|
|
if isinstance(err, Result):
|
|
err = res.error
|
|
val = res.value
|
|
|
|
if err is not Result.NO_ERROR:
|
|
raise Exception('Error %s: %d' % (func_str, err))
|
|
|
|
return val
|
|
|
|
|
|
def main():
|
|
# Create MTM-DAQ-1 object
|
|
daq = brainstem.stem.MTMDAQ1() # Uses default module address
|
|
|
|
# Initialize error tracker
|
|
err = Result.NO_ERROR
|
|
|
|
try:
|
|
# Discover and connect to MTM-DAQ-1 object
|
|
# Connects to the first USB module discovered
|
|
step(daq.discoverAndConnect, 'connecting to MTM-DAQ-1', brainstem.link.Spec.USB)
|
|
|
|
# Run the test twice, once with LED power enabled, once with it disabled
|
|
for enable, enable_str in zip([1, 0],['enabled', 'disabled']):
|
|
# Set MTM-DAQ-1 DAC0 (analog 16) to 5V and enable to power LED
|
|
step(daq.analog[DAC].setVoltage,'setting DAC voltage', POWER_VOLTAGE) # uV
|
|
step(daq.analog[DAC].setEnable,'setting DAC enable to %s' % enable_str, enable) # enable DAC0
|
|
|
|
# Set measurement ranges
|
|
step(daq.analog[VOLTAGE].setRange, 'setting Position B analog range to +/-10.24V', 12) # range value from datasheet
|
|
step(daq.analog[CURRENT].setRange, 'setting Position A->B analog range to +/-5.12V', 9) # range value from datasheet
|
|
|
|
sleep(1) # Leave the LED on/off for a second
|
|
|
|
# Read voltage measurements
|
|
v = step(daq.analog[VOLTAGE].getVoltage, 'reading Position B voltage')
|
|
v_current = step(daq.analog[CURRENT].getVoltage, 'reading Position A-B differential voltage')
|
|
|
|
# Calculate current
|
|
i = v_current / RESISTOR_VALUE # I = V / R
|
|
|
|
print '* * * * * * * * * * * * * * * * * * * * * * * * * * * * * *'
|
|
print 'MTM-DAQ-1 DAC0 status: %s' % enable_str
|
|
print 'Position B voltage (uV): %d' % v
|
|
print 'Position B voltage (V): %.3f' % (v / 1e6)
|
|
print 'Position A->B voltage (uV): %d' % v_current
|
|
print 'Position A->B current (uA): %d' % i
|
|
print '* * * * * * * * * * * * * * * * * * * * * * * * * * * * * *'
|
|
|
|
step(daq.analog[DAC].setEnable, 'disabling DAC', 0)
|
|
|
|
except Exception as exc:
|
|
print exc
|
|
|
|
finally:
|
|
daq.disconnect() # Clean up possible remaining connections
|
|
del daq # Clean up MTM-DAQ-1 object
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main()
|