Loading bin/msp430-etv +41 −8 Original line number Diff line number Diff line #!/usr/bin/env python3 import getopt import matplotlib.pyplot as plt import numpy as np import os import re import subprocess import sys if __name__ == '__main__': try: duration = int(sys.argv[1]) except IndexError: print('Usage: msp430-etv <duration>') except ValueError: print('Error: duration "{}" is not a number'.format(sys.argv[1])) opt = dict() def measure_data(time): if not 'LD_LIBRARY_PATH' in os.environ: os.environ['LD_LIBRARY_PATH'] = '{}/var/projects/msp430/MSP430Flasher_1.3.7'.format(os.environ['HOME']) Loading @@ -21,7 +18,37 @@ if __name__ == '__main__': res = subprocess.run([energytrace_cmd, str(duration)], stdout = subprocess.PIPE, universal_newlines = True) lines = res.stdout.split('\n') return res.stdout if __name__ == '__main__': try: optspec = ('load= save=') raw_opts, args = getopt.getopt(sys.argv[1:], "", optspec.split(' ')) for option, parameter in raw_opts: optname = re.sub(r'^--', '', option) opt[optname] = parameter if not 'load' in opt: duration = int(args[1]) except getopt.GetoptError as err: print(err) sys.exit(2) except IndexError: print('Usage: msp430-etv <duration>') sys.exit(2) except ValueError: print('Error: duration "{}" is not a number'.format(sys.argv[1])) sys.exit(2) if 'load' in opt: with open(opt['load'], 'r') as f: log_data = f.read() else: log_data = measure_data(duration) lines = log_data.split('\n') data_count = sum(map(lambda x: len(x) > 0 and x[0] != '#', lines)) data_lines = filter(lambda x: len(x) > 0 and x[0] != '#', lines) data = np.empty((data_count, 4)) Loading @@ -33,12 +60,18 @@ if __name__ == '__main__': m_duration = data[-1, 0] - data[0, 0] m_energy = data[-1, 3] - data[0, 3] m_calc_energy = np.sum(data[1:, 1] * data[1:, 2] * (data[1:, 0] - data[:-1, 0])) m_energy_deviation = np.abs(m_energy - m_calc_energy) / np.max([m_energy, m_calc_energy]) print('{:d} measurements in {:.2f} s = {:.0f} Hz sample rate'.format( data_count, m_duration, data_count / m_duration)) print('Reported energy: E = {:f} J'.format(m_energy)) print('Calculated energy: U*I*t = {:f} J'.format(m_calc_energy)) print('Energy deviation: {:.1f}%'.format(m_energy_deviation * 100)) if 'save' in opt: with open(opt['save'], 'w') as f: f.write(log_data) pwrhandle, = plt.plot(data[:, 0], data[:, 1] * data[:, 2], 'b-', label='U*I', markersize=1) #energyhandle, = plt.plot(data[1:, 0], (data[1:, 3] - data[:-1, 3]) / (data[1:, 0] - data[:-1, 0]), 'r-', label='E/Δt', markersize=1) Loading Loading
bin/msp430-etv +41 −8 Original line number Diff line number Diff line #!/usr/bin/env python3 import getopt import matplotlib.pyplot as plt import numpy as np import os import re import subprocess import sys if __name__ == '__main__': try: duration = int(sys.argv[1]) except IndexError: print('Usage: msp430-etv <duration>') except ValueError: print('Error: duration "{}" is not a number'.format(sys.argv[1])) opt = dict() def measure_data(time): if not 'LD_LIBRARY_PATH' in os.environ: os.environ['LD_LIBRARY_PATH'] = '{}/var/projects/msp430/MSP430Flasher_1.3.7'.format(os.environ['HOME']) Loading @@ -21,7 +18,37 @@ if __name__ == '__main__': res = subprocess.run([energytrace_cmd, str(duration)], stdout = subprocess.PIPE, universal_newlines = True) lines = res.stdout.split('\n') return res.stdout if __name__ == '__main__': try: optspec = ('load= save=') raw_opts, args = getopt.getopt(sys.argv[1:], "", optspec.split(' ')) for option, parameter in raw_opts: optname = re.sub(r'^--', '', option) opt[optname] = parameter if not 'load' in opt: duration = int(args[1]) except getopt.GetoptError as err: print(err) sys.exit(2) except IndexError: print('Usage: msp430-etv <duration>') sys.exit(2) except ValueError: print('Error: duration "{}" is not a number'.format(sys.argv[1])) sys.exit(2) if 'load' in opt: with open(opt['load'], 'r') as f: log_data = f.read() else: log_data = measure_data(duration) lines = log_data.split('\n') data_count = sum(map(lambda x: len(x) > 0 and x[0] != '#', lines)) data_lines = filter(lambda x: len(x) > 0 and x[0] != '#', lines) data = np.empty((data_count, 4)) Loading @@ -33,12 +60,18 @@ if __name__ == '__main__': m_duration = data[-1, 0] - data[0, 0] m_energy = data[-1, 3] - data[0, 3] m_calc_energy = np.sum(data[1:, 1] * data[1:, 2] * (data[1:, 0] - data[:-1, 0])) m_energy_deviation = np.abs(m_energy - m_calc_energy) / np.max([m_energy, m_calc_energy]) print('{:d} measurements in {:.2f} s = {:.0f} Hz sample rate'.format( data_count, m_duration, data_count / m_duration)) print('Reported energy: E = {:f} J'.format(m_energy)) print('Calculated energy: U*I*t = {:f} J'.format(m_calc_energy)) print('Energy deviation: {:.1f}%'.format(m_energy_deviation * 100)) if 'save' in opt: with open(opt['save'], 'w') as f: f.write(log_data) pwrhandle, = plt.plot(data[:, 0], data[:, 1] * data[:, 2], 'b-', label='U*I', markersize=1) #energyhandle, = plt.plot(data[1:, 0], (data[1:, 3] - data[:-1, 3]) / (data[1:, 0] - data[:-1, 0]), 'r-', label='E/Δt', markersize=1) Loading