Hey @mcleinn. The ultrasonic IO channels allow much higher frequency signals to pass, up to MHz range. The audio channels are bandwidth limited and allow up to about 24kHz.
You certainly can use the ultrasonic channel for audio or even for very low frequency signals. It’s just not configured to reject higher than audio range signals like the audio channels are.
The +5 / -5 inputs are protected. Out of range signals are clipped.
The 0 - 3V IO does not have additional protection. They are direct connections to the FPAA device itself. Each of these cells is a differential pair labeled P (+, non-inverting) and N (-, inverting). The signal the device “sees” is the sum of these (i.e. signal_p + signal_n_inverted). Additionally, these differential input signals need to be centered at 1.5V (VMR, the FPAA’s reference voltage). You can convert to and from whatever signal range you prefer; you just need to scale and shift.
There is no DIN midi implementation right now, but it’s absolutely possible. You would use the MCU’s serial peripheral. It needs a bit of firmware to work as well as the normal DIN circuitry (like an optocoupler and so on).
In general, you can override any of the IO cells and do digital IO with it. If you take a look at the IO objects here: https://zrna.org/docs/modules#input-and-output, the Audio and Ultrasonic objects are just convenience objects that use the lower level InputCell and OutputCell objects. Each of the latter has a bunch of configuration options, including digital mode. There’s a separate dedicated digital output you can access with the DigitalOutputCell object.
There’s a lot to take in here actually on the IO configuration stuff. A lot of the complexity there is coming from the underlying complexity of the FPAA device itself. It needs to be more well documented. If you have a practical example in mind that you want to implement with the digital FPAA IO, ping me and I can walk you through the implementation.
Feel free to ping me if you get stuck.