From aa12b20c2a80f3bc55bd4fd1a9cd94eefb05f509 Mon Sep 17 00:00:00 2001 From: Daniel Friesel Date: Mon, 8 Oct 2018 10:10:44 +0200 Subject: Initial commit. Shows matplotlib graphs of MSP430 EnergyTrace power readings --- bin/msp430-etv | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100755 bin/msp430-etv diff --git a/bin/msp430-etv b/bin/msp430-etv new file mode 100755 index 0000000..de138cf --- /dev/null +++ b/bin/msp430-etv @@ -0,0 +1,49 @@ +#!/usr/bin/env python3 + +import matplotlib.pyplot as plt +import numpy as np +import os +import subprocess +import sys + +if __name__ == '__main__': + try: + duration = int(sys.argv[1]) + except IndexError: + print('Usage: msp430-etv ') + except ValueError: + print('Error: duration "{}" is not a number'.format(sys.argv[1])) + + if not 'LD_LIBRARY_PATH' in os.environ: + os.environ['LD_LIBRARY_PATH'] = '{}/var/projects/msp430/MSP430Flasher_1.3.7'.format(os.environ['HOME']) + + energytrace_cmd = '{}/var/source/energytrace-util/energytrace'.format(os.environ['HOME']) + + res = subprocess.run([energytrace_cmd, str(duration)], stdout = subprocess.PIPE, universal_newlines = True) + + lines = res.stdout.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)) + + for i, line in enumerate(data_lines): + timestamp, current, voltage, total_energy = map(float, line.split(' ')) + data[i] = [timestamp, current, voltage, total_energy] + + 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])) + + 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)) + + 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) + plt.legend(handles=[pwrhandle]) + plt.xlabel('Time [s]') + plt.ylabel('Power [W]') + plt.grid(True) + plt.show() -- cgit v1.2.3