You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
52 lines
1.2 KiB
52 lines
1.2 KiB
#!/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])) |
|
|
|
|