summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Friesel <derf@finalrewind.org>2018-10-08 10:10:44 +0200
committerDaniel Friesel <derf@finalrewind.org>2018-10-08 10:10:44 +0200
commitaa12b20c2a80f3bc55bd4fd1a9cd94eefb05f509 (patch)
tree0e9c0d3099d0d803e44d44e5944f4fc10ce64ec5
Initial commit. Shows matplotlib graphs of MSP430 EnergyTrace power readings
-rwxr-xr-xbin/msp430-etv49
1 files changed, 49 insertions, 0 deletions
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 <duration>')
+ 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()