ardupilot/Tools/scripts/logic_decode_channels.py

53 lines
1.2 KiB
Python
Raw Permalink Normal View History

#!/usr/bin/env python
'''
decode a Saleae logic CSV export file as PWM values. Used for
testing output values on PWM channels
'''
import csv, sys
filename = sys.argv[1]
c = open(filename, 'r')
data = csv.reader(c)
pulse_start = []
prev_values = []
pwm = []
nchannels = 0
for row in data:
# skip header
if row[0].startswith('Time'):
continue
changed = False
if len(row) > nchannels+1:
nchannels = len(row)-1
while len(pwm) < nchannels:
pwm.append(0)
pulse_start.append(0)
prev_values.append(0)
# time in microseconds
t = int(float(row[0])*1e6)
# current value of each channel
values = [int(row[i]) for i in range(1,len(row))]
for c in range(nchannels):
if values[c] == 0 and prev_values[c] == 1 and pulse_start[c] != 0:
pulse = t - pulse_start[c]
if pulse < 10000:
pwm[c] = pulse
changed = True
if values[c] == 1 and prev_values[c] == 0:
pulse_start[c] = t
prev_values[c] = values[c]
if changed:
for c in range(nchannels):
sys.stdout.write("%4u " % pwm[c])
sys.stdout.write("%.3f\n" % float(row[0]))