Browse Source

arduino: remove delay to increase sample rate from 1.2kHz to 11.7kHz

Fabian Peter Hammerle 3 years ago
parent
commit
82a5d61de7
3 changed files with 11 additions and 6 deletions
  1. 0 1
      arduino-sketch.ino
  2. 6 4
      scope.grc
  3. 5 1
      serial_source_block.py

+ 0 - 1
arduino-sketch.ino

@@ -7,7 +7,6 @@ void setup() {
 
 void loop() {
     // effective sample rate measured with "Probe Rate" block
-    delayMicroseconds(800);
     // $ tail --follow /dev/ttyUSB0 | od --format=u1 --width=1
     Serial.write(digitalRead(A0));
 }

+ 6 - 4
scope.grc

@@ -36,7 +36,7 @@ blocks:
   id: variable
   parameters:
     comment: ''
-    value: '1203.47'
+    value: '11678.3'
   states:
     bus_sink: false
     bus_source: false
@@ -143,14 +143,16 @@ blocks:
       \            self, name=\"Serial Source Block\", in_sig=None, out_sig=[numpy.uint8]\n\
       \        )\n        self._serial_port = serial.Serial(\n            port=port,\
       \ baudrate=baud_rate, bytesize=serial.EIGHTBITS, timeout=timeout\n        )\n\
+      \        # remove first bytes that may have unexpected values > 1, unclear why\n\
+      \        # seen [0b110000000, 0] and [0, 0b11111110] so far\n        self._serial_port.read(2)\n\
       \        self._buffer_max_length = buffer_max_length\n        self._invert =\
       \ invert\n\n    def work(self, input_items, output_items):\n        # pylint:\
       \ disable=unused-argument\n        buffer = self._serial_port.read(\n      \
       \      min(len(output_items[0]), self._buffer_max_length)\n        )\n     \
       \   output_items[0][: len(buffer)] = numpy.frombuffer(buffer, dtype=\"u1\")\n\
-      \        if self._invert:\n            output_items[0] ^= 1\n        assert\
-      \ output_items[0][: len(buffer)].max() <= 1, \"invalid value\"\n        return\
-      \ len(buffer)\n"
+      \        if output_items[0][: len(buffer)].max() > 1:\n            raise ValueError(output_items[0][:\
+      \ len(buffer)])\n        if self._invert:\n            output_items[0] ^= 1\n\
+      \        return len(buffer)\n"
     affinity: ''
     alias: ''
     baud_rate: '115200'

+ 5 - 1
serial_source_block.py

@@ -19,6 +19,9 @@ class SerialSourceBlock(gnuradio.gr.sync_block):
         self._serial_port = serial.Serial(
             port=port, baudrate=baud_rate, bytesize=serial.EIGHTBITS, timeout=timeout
         )
+        # remove first bytes that may have unexpected values > 1, unclear why
+        # seen [0b110000000, 0] and [0, 0b11111110] so far
+        self._serial_port.read(2)
         self._buffer_max_length = buffer_max_length
         self._invert = invert
 
@@ -28,7 +31,8 @@ class SerialSourceBlock(gnuradio.gr.sync_block):
             min(len(output_items[0]), self._buffer_max_length)
         )
         output_items[0][: len(buffer)] = numpy.frombuffer(buffer, dtype="u1")
+        if output_items[0][: len(buffer)].max() > 1:
+            raise ValueError(output_items[0][: len(buffer)])
         if self._invert:
             output_items[0] ^= 1
-        assert output_items[0][: len(buffer)].max() <= 1, "invalid value"
         return len(buffer)