I/O connectors
Tested on a bare Seed
examples/io_connectors has run on a Daisy Seed 2, wired to itself: CV1’s DAC
read back on CV2’s ADC within 0.1 % across its range, and a digital output read
back as an input. Not yet run on a Rev B motherboard, whose connectors add a
1 kΩ series resistor and the quiet 3V3_A supply.
Every Seed pin the motherboard doesn’t need for something else is a 3-pin JST SH connector: ground, the signal through 1 kΩ, and 3.3 V. It’s the pinout the single-pot board uses, so a pot plugs straight into any analog-capable one.
| Silkscreen | Can do |
|---|---|
D1 | Digital in or out |
A1–A7 | Digital in or out, or analog in |
CV1, CV2 | CV out (0–3.3 V from the DAC), or analog in |
Using them
Say what each connector is for, once:
#include "io.h"
rodeo::Io io;
bool ok = io.Init(rodeo::IoConfig() .Set(board::kIoA1, rodeo::IoMode::kAnalogIn) .Set(board::kIoD1, rodeo::IoMode::kDigitalInPullUp) .Set(board::kIoCv1, rodeo::IoMode::kCvOut));Then read and write by connector:
float knob = io.Read(board::kIoA1); // 0..1, the latest background scanbool gate = io.Get(board::kIoD1);io.Write(board::kIoCv1, 0.5f); // half of 3.3 VThe configuration is checked before any pin is touched. Ask for analog on D1,
or CV out on anything but CV1/CV2, and Init() returns false with
io.Plan().why saying which connector and why. The ADC scans every analog input
in the background on DMA, so Read() never waits. Every name is in the
API reference.
Limits worth knowing
- CV range. The DAC reaches 0–3.3 V. Useful CV ranges need an op-amp stage, which belongs on the jack board. With its output buffer on (the default here) it bottoms out a few tens of millivolts above 0 V.
- Shared interrupts.
A3andA6(PB1, PC1) share an interrupt line, and so doA7andCV1(PC4, PA4). Interrupt-driven gate inputs aren’t in the API yet; when they come, only one of each pair can have one. - No 5 V on these connectors.