From 92d3724dcdaf0b204f98bf324efc6e233a028c41 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Hru=C5=A1ka?= Date: Thu, 8 Mar 2018 00:56:36 +0100 Subject: [PATCH] support for DOut pulse gen --- demo_neo2.py | 15 +++++++++++++++ demo_pulse.py | 9 +++++++++ gex/TinyFrame.py | 3 ++- gex/units/DOut.py | 37 +++++++++++++++++++++++++++++++++---- test_adc.py | 12 ++++++++---- 5 files changed, 67 insertions(+), 9 deletions(-) create mode 100644 demo_neo2.py create mode 100644 demo_pulse.py diff --git a/demo_neo2.py b/demo_neo2.py new file mode 100644 index 0000000..749aa1a --- /dev/null +++ b/demo_neo2.py @@ -0,0 +1,15 @@ +#!/bin/env python3 +import gex +import time + +with gex.Client(gex.TrxRawUSB()) as client: + # Neopixel strip + strip = gex.Neopixel(client, 'neo') + # Load RGB to the strip + strip.load([0xFF0000, 0xFFFF00, 0x00FF00, 0x0000FF, 0xFF00FF]) + + for i in range(0,255): + strip.load([0xFF0000+i, 0xFFFF00, 0x00FF00, 0x0000FF, 0xFF00FF]) + time.sleep(0.001) + + strip.clear() diff --git a/demo_pulse.py b/demo_pulse.py new file mode 100644 index 0000000..d7a745e --- /dev/null +++ b/demo_pulse.py @@ -0,0 +1,9 @@ +#!/bin/env python3 +import gex +import time + +with gex.Client(gex.TrxRawUSB()) as client: + out = gex.DOut(client, 'out') + + out.pulse_us([0], 20) + out.pulse_us([3], 10) \ No newline at end of file diff --git a/gex/TinyFrame.py b/gex/TinyFrame.py index f7c31e7..e5a88c4 100644 --- a/gex/TinyFrame.py +++ b/gex/TinyFrame.py @@ -301,7 +301,8 @@ class TinyFrame: actual = self._cksum(self.rpayload) if pck != actual: - print("[TF] Payload checksum mismatch") + print("[TF] Payload checksum mismatch (given %x, computed %x)" % (pck, actual)) + print(self.rpayload) self.reset_parser() else: self.handle_rx_frame() diff --git a/gex/units/DOut.py b/gex/units/DOut.py index ec5e8c9..2a56ad0 100644 --- a/gex/units/DOut.py +++ b/gex/units/DOut.py @@ -1,5 +1,11 @@ import gex +CMD_WRITE = 0 +CMD_SET = 1 +CMD_CLEAR = 2 +CMD_TOGGLE = 3 +CMD_PULSE = 4 + class DOut(gex.Unit): """ Digital output port. @@ -17,22 +23,45 @@ class DOut(gex.Unit): """ Set pins to a value - packed, as int """ pb = gex.PayloadBuilder() pb.u16(pins) - self._send(0x00, pb.close(), confirm=confirm) + self._send(CMD_WRITE, pb.close(), confirm=confirm) def set(self, pins, confirm=True): """ Set pins high - packed, int or list """ pb = gex.PayloadBuilder() pb.u16(self.pins2int(pins)) - self._send(0x01, pb.close(), confirm=confirm) + self._send(CMD_SET, pb.close(), confirm=confirm) def clear(self, pins, confirm=True): """ Set pins low - packed, int or list """ pb = gex.PayloadBuilder() pb.u16(self.pins2int(pins)) - self._send(0x02, pb.close(), confirm=confirm) + self._send(CMD_CLEAR, pb.close(), confirm=confirm) def toggle(self, pins, confirm=True): """ Toggle pins - packed, int or list """ pb = gex.PayloadBuilder() pb.u16(self.pins2int(pins)) - self._send(0x03, pb.close(), confirm=confirm) + self._send(CMD_TOGGLE, pb.close(), confirm=confirm) + + def pulse_ms(self, pins, length, active=True, confirm=True): + """ Send a pulse with length 1-65535 ms on selected pins """ + pb = gex.PayloadBuilder() + pb.u16(self.pins2int(pins)) + pb.bool(active) + pb.bool(False) + pb.u16(length) + self._send(CMD_PULSE, pb.close(), confirm=confirm) + + def pulse_us(self, pins, length, active=True, confirm=True): + """ Send a pulse of 1-999 us on selected pins """ + pb = gex.PayloadBuilder() + pb.u16(self.pins2int(pins)) + pb.bool(active) + pb.bool(True) + pb.u16(length) + self._send(CMD_PULSE, pb.close(), confirm=confirm) + + + + + diff --git a/test_adc.py b/test_adc.py index f5dcf6d..b1d67e8 100644 --- a/test_adc.py +++ b/test_adc.py @@ -11,17 +11,21 @@ with gex.Client(gex.TrxRawUSB()) as client: adc = gex.ADC(client, 'a') adc.set_active_channels([3]) - rate=44000 + rate=500 fs = adc.set_sample_rate(rate) - count = 44000*2 - data = np.add(adc.capture(count) / 4096, -0.5) + count = 2000 + data = adc.capture(count) + print("rx, %d samples" % len(data)) + data = np.add(data / 4096, -0.5) + + # if data is not None: # wavfile.write('file.wav', rate, data) # print("Ok") - plt.plot(data, 'r-', lw=1) + plt.plot(data, 'r.', lw=1) plt.show() else: print("Nothing rx")