Commit 90eeeaf7 authored by Daniel Friesel's avatar Daniel Friesel
Browse files

add threshold monitor option

parent 5785c4ce
Loading
Loading
Loading
Loading
+26 −2
Original line number Original line Diff line number Diff line
@@ -26,7 +26,7 @@ def show_help():
USAGE
USAGE


msp430-etv [--load <file> | <measurement duration>] [--save <file>]
msp430-etv [--load <file> | <measurement duration>] [--save <file>]
	[--skip <count>] [--plot] [--stat]
	[--skip <count>] [--threshold <power>] [--plot] [--stat]


DESCRIPTION
DESCRIPTION


@@ -52,7 +52,7 @@ OPTIONS


if __name__ == '__main__':
if __name__ == '__main__':
	try:
	try:
		optspec = ('help load= save= skip= plot stat')
		optspec = ('help load= save= skip= threshold= plot stat')
		raw_opts, args = getopt.getopt(sys.argv[1:], "", optspec.split(' '))
		raw_opts, args = getopt.getopt(sys.argv[1:], "", optspec.split(' '))


		for option, parameter in raw_opts:
		for option, parameter in raw_opts:
@@ -71,6 +71,9 @@ if __name__ == '__main__':
		else:
		else:
			opt['skip'] = 0
			opt['skip'] = 0


		if 'threshold' in opt:
			opt['threshold'] = float(opt['threshold'])

	except getopt.GetoptError as err:
	except getopt.GetoptError as err:
		print(err)
		print(err)
		sys.exit(2)
		sys.exit(2)
@@ -110,6 +113,27 @@ if __name__ == '__main__':
	print('Calculated energy: U*I*t = {:f} J'.format(m_calc_energy))
	print('Calculated energy: U*I*t = {:f} J'.format(m_calc_energy))
	print('Energy deviation: {:.1f}%'.format(m_energy_deviation * 100))
	print('Energy deviation: {:.1f}%'.format(m_energy_deviation * 100))



	if 'threshold' in opt:
		power = data[:, 1] * data[:, 2]

		peaks = []
		peak_start = -1
		for i, dp in enumerate(power):
			if dp >= opt['threshold'] and peak_start == -1:
				peak_start = i
			elif dp < opt['threshold'] and peak_start != -1:
				peaks.append((peak_start, i))
				peak_start = -1

		for peak in peaks:
			duration = data[peak[1]-1, 0] - data[peak[0], 0]
			print('{:.2f}ms peak ({:f} -> {:f})'.format(duration * 1000,
				data[peak[0], 0], data[peak[1]-1, 0]))
			print('    {:f} µJ / mean {:f} µW'.format(
				np.mean(power[peak[0] : peak[1]]) * duration * 1e6,
				np.mean(power[peak[0] : peak[1]]) * 1e6 ))

	if 'save' in opt:
	if 'save' in opt:
		with open(opt['save'], 'w') as f:
		with open(opt['save'], 'w') as f:
			f.write(log_data)
			f.write(log_data)