# Pico PIO ADC

Sigma-delta ADC demo for Raspberry Pi Pico using PIO.


## Building

1. Clone with `git clone --recursive` to get the alternative stdio.
2. You need to have `PICO_SDK_PATH` set.
3. Just run `cmake -B build src` to configure the project.
4. And then `cmake --build build` to build it.
5. Flash the firmware via `picotool load -f build/pico-pio-adc.uf2`.


## GNU Radio Companion

The GNU Radio Companion examples work with a FIFO that receives the stream from the serial.
Build creates a simple tool to move the bytes around, so you can do this:

```
mkfifo samples.fifo
build/tools/serial /dev/ttyACM1 >samples.fifo
```

Then GRC can grab the samples.

If you tire of having to start the serial tool manually, you can do this:

```
watch -n1 'build/tools/serial /dev/ttyACM1 >samples.fifo'
```

This restarts it in a second once it quits.


## Circuit

<a href="https://www.falstad.com/circuit/circuitjs.html? ">
  <img src="images/circuitjs.png" alt="Circuit Schema" />
</a>

Click the image to open interactive version in Paul Falstad's excellent online simulator.


## Screenshots

Please note that all these are with **AMS-1117** linear voltage regulator replacing the stock switched regulator on Pico. This is done by jumpering `3V3_EN` pin to `GND`, feeding `VSYS` to the regulator input and passing the regulator output to `3V3` pin. The `3V3` rail is then decoupled with `10uF` ceramic capacitor to `GND` on the analog board.

<details>
  <summary>Noise Floor</summary>
  <img src="images/noise-floor.png" width="956" />
</details>

<details>
  <summary>IR Blast, full rate</summary>
  <img src="images/ir-blast-full.png" width="956" />
</details>

<details>
  <summary>IR Blast, tuned at 38 kHz</summary>
  <img src="images/ir-blast-narrow.png" width="931" />
</details>
