mirror of https://github.com/ArduPilot/ardupilot
53 lines
1.2 KiB
Python
53 lines
1.2 KiB
Python
|
#!/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]))
|
||
|
|