Via began as a DIY project, and Starling wouldn't exist without synth DIY. We think that it can expand accessibility to hardware synthesis tools, foster a deeper relationship between artist and instrument, and inspire technical innovation.
Distributing Via as a DIY project presented an interesting choice. On one hand, we have done our fair share of SMT builds, and we know all about the strange satisfaction and cost-savings of being a human pick-n-place. On the other hand, having built many prototypes by hand, we know how difficult and time-consuming the process can be (certainly not something for inexperienced builders).
For our initial run, we have chosen to distribute pre-SMT populated boards, making the project accessible to beginners and quick work for more experienced builders. It also gives us a better shot at covering development and production costs on a project years in the making.
In the spirit of DIY, we have made the schematics and source code available for anyone who wants to dive deep into the design and use some or all of it for derivative works or other projects.
Now that you know a bit more about where we are coming from, the following resources will take you from pre-populated circuit boards to a fully functional module.
You can get your kit at Modular Addict.
Break down your panel
Admire the panel one last time then break it along the scored lines with your hands. Snap off the tooling rails with some pliers. To save yourself from splinters, use the edge of the blank panel to buff the scored edges. Mind your fingers while you do this.
Make and place 17-pin headers.
Snap off two sections of the .1" single row header pins so you have 17 pins on each. Cut down a pair of 17-pin socket headers to match. Push the long end of the pins into the socket headers.
Seat the headers in the analog and digital board. It will make your life easier to solder the socket headers into the smaller digital board and the pin headers into the larger analog board.
Note that the SMT parts are facing up on both boards when you make the header sandwich. Take care when placing the headers unless you want desoldering practice.
Stack the two boards and solder the headers.
Take your time with this part to ensure proper alignment. Add light pressure so that the headers are flush with the PCB as you begin to solder. Solder the pins on the two opposite corners of the digital board and check that the headers are still aligned correctly.
Once you are satisfied with the alignment, secure the headers by soldering the rest of the pins, then flip and repeat with the other side. You can now separate the two boards.
Add the digital board power header.
Snap off a 10-pin chunk of the dual-row .1" headers, place it so the pins are sticking up from the component side of the board, and solder it in place, tacking a single pin down first to lock in alignment. It helps to prop up one side of the board to make sure that the header lies flush with the PCB.
This revision can only accommodate an un-shrouded header, but red stripe is down, and the power circuit is reverse protected.
Add the digital board expander header.
This belongs on the underside of the digital board, so the solder points will be on the same side as the SMT parts. It's good practice to put the expander cable on the header when soldering it in place to ensure the proper clearance.
As you can tell from the false start in the video, getting the alignment is a bit tricky, but you can prop up the digital board with the other boards to make it easier to get the first solder joint in place.
Attach the expander header.
Let's get the headers out of the way. Break away a 12-pin chunk of .1" dual-row pin headers and place it on the silkscreen indicator (the pins stick up from the component side of the board). Solder from the opposite side as shown.
As with all the other headers, figure out a way to get the alignment, tack a corner, and secure all the pins once your first solder joint locks in the alignment.
Phew, headers are done!
Insert the pots into the analog board.
Insert the pots into the side of the board with the silkscreen outlines. Note the placement of the 50K pot. When placing the pots, it helps to lead with the 3 pins and then push the lugs through.
Place the LEDs.
You might want to start with the cloudy bicolor LED so you don't mix it up with one of the clear white LEDs. For all 5 of the two-legged LEDs, in this corner of the universe the short lead goes to the square hole. You can let the LEDs sit in the holes against the PCB for now.
For the RGB LED, the longest lead goes next to the square hole. You might need to fiddle with this one a bit because the holes are close together, which gives you extra time to make sure that you have it oriented correctly.
Place the jacks.
The next step requires attaching the faceplate, so make sure that the faceplate and pot nuts are within reach before you start. Place the jacks while holding the board level with the other hand. The ground pins that stick out from the jacks should all be facing the same direction (towards the potentiometers).
Attach the faceplate.
Make sure all the pots are sitting flush and then ease the faceplate onto them. It should slide right down and onto the jacks with minimal fiddling. Once it is sitting flush on the pots and jacks, drop one or all of the pot washer/nuts on and secure them enough to hold the board in place.
This should make the assembly secure enough to set aside while you prepare to attach the expander.
Place the expander parts.
First off, make sure that you are placing the parts on the side of the board opposite the components (just like the analog board).
Make sure the middle potentiometer is 50k as per the silkscreen.
The jacks have the same orientation as the analog board; ground lug towards the top of the board.
Take care with the orientation of the pushbutton; as shown on the silkscreen, the flatted side goes towards the bottom edge of the PCB.
Attach the expander to the faceplate
This should go down pretty much the same as when you attached the analog board to the faceplate. As before, secure the assembly with one or all of the pot nut/washers.
Add the rest of the nuts and washers
Now that the full assembly is secure, you can add the rest of the nuts and washers and tighten them up (no need to go overboard with the torque, that can pull the PCBs out of alignment).
A nut driver or socket is recommended, as pliers could mar your faceplate. Finger tightening might be a bit fidgety, but you should be able to get everything tight enough if you have to go that route.
Solder the delicate bits
Make sure the the PCBs are aligned and sitting flush against the components. Tightening the nuts can pull the expander board out of alignment.
The pushbutton needs to be pressed up flush against the PCB when it's soldered, so maybe start with that. You can use finesse and hold it up with your solder-feeding hand, or you can make your life easier and prop it up with something. Again, tack a pin and check alignment then secure the rest when you are happy.
The two-legged LEDs should be pushed through the holes in the faceplate as far as possible. The RGB LED gets pulled up so it is flush with the PCB.
TAKE YOUR TIME WITH THE RGB LED, IT'S THE HARDEST PART OF THE WHOLE THING.The hack here is to solder one pin, clip down the leads, then solder the rest to avoid bridges. That makes it comparable to soldering an IC. Go
Solder everything else
Now you can enjoy the zen of synth DIY and solder all of the remaining connections.
Reattach the analog board to the faceplate and insert the long header.
Insert the long 8 pin header through the analog board so that it is resting lightly in the socket header on the front panel. Attach the digital board to the analog board, seating the long pin headers before fully inserting. Keeping the base of the long pin header flush with the digital board, solder the two opposite pins on the header. Double check the alignment, then solder the rest. When disassembled, the long header stays attached to the digital board.
If you're not using the expander, make sure you place the 3 jumpers as shown here.
Insert your expander cable paying attention to the white stripes present on the board and the white wires on the cable. Your Via will be extremely unhappy and likely suffer damage if you reverse this cable.
You're done with the hardware build!
Now, its time to program the microcontroller and calibrate the unit.
The in-house production assistant firmware is available so that you can test and calibrate your DIY module.
The first step is to flash it using the Viaflash tool.
Assuming you have successfully loaded the firmware onto your module, this guide walks you through the calibration steps:
- Testing the LEDs and touch sensors
- Testing the IO
- Trimming for v/oct
- Measuring CV offsets
- Measuring and storing the signal output offset
LEDs and Touch
Connect the module to eurorack power so you can access the back side and maneuver easily. Ensure the -12V rail (red stripe) on the connector is facing downwards. Start with nothing plugged into the jacks.
If the expander is present, tap the push button to turn the triangle green.
Tap each of the touch sensors; they will successively turn on an LED. After all 6 sensors have been been tested, the LEDs go dark and the module moves on to the next calibration stage.
All LEDs on the module should be dark.
Turn the black knobs fully clockwise.
Patch the main logic output to the main logic input. You should see the two left white LEDs blink. If that is successful, unpatch from the main logic input and patch into the aux logic input, if the expander is present. You should see the two right LEDs blink.
Test the aux logic input by unpatching from the main logic output, and patch the aux logic output into the aux logic input to verify that output.
Patch either logic input into the CV2 input. The triangle should blink red.
Patch into the CV3 input and the triangle will blink blue.
Currently, v/oct response is only relevant on the Meta and Sync firmwares, so the next steps are optional if you do not plan to ever use the platform for either of those modules. If you want to skip this step, tap the pushbutton to exit this stage or hold any touch sensor for more than a second.
Patch the output into an audiomonitor. Turn the A and B knobs. The distance between the A and B manual controls sets the level of the output, and when adjusting, ensure that you can hear a stepped response when adjusting either A or B. This verifies that the sample and hold circuits are operational. With the knobs furthest apart, you should see a mix of green and red on the bicolor LED. The output is a test tone that can aid v/oct trimming.
The CV1 input is calibrated for v/Oct by means of a trim pot on the analog board. There is a hole in the top left section of the digital board to allow access to the trim pot below. Finding the right screwdriver can be tricky; ideally a trimmer tool such as those from Vishay or Bourns works well and costs a couple of dollars. Get a feel for adjusting the trimmer. It is somewhat fragile.
Find a sequencer and set the steps so the first half is at a low note and the second half is some number of octaves(volts) above the low note. A bigger octave jump will require a more precise trim but it will be more sensitive. Patch the sequencer CV output into the CV1 input on the module. Increase the tempo of the sequencer until the output cycles between the high and low voltages about once a second. You can also manually toggle a reference voltage between two values, with an appropriate span.
Each rising edge is measured, and the color of the triangular LED instructs you how to correct the error. If its blue, adjust the trim pot clockwise (when looking at the module right side up from the back), if its red, turn it to the counterclockwise. When the jump is correct, the triangle is green.
Once you are satisfied with the CV1 response, if you want to use an alternate firmware taking advantage of the signal output v/oct response, patch the signal output into the CV1 input. Use the same method to trim the signal output (the output trim pot is down near the bottom left corner of the analog board). Knob1 sets the speed of the test LFO, knob 2 sets the number of octaves in the jump, and knob3 sets the lower octave.
Once you are satisfied with the trimming, REMOVE ALL PATCH CABLES and press the touch button or hold a touch sensor for more than a second. This advances to the next stage when ADC offsets are calibrated.
Immediately upon entering this stage, the CV offsets at ground are measured. When measurement is successful, the triangle becomes green.
Patch the signal output into the CV1 output.
You can now press the pushbutton or hold a sensor and release after a second to advance to the final stage where the signal output offset is measured.
Provided you had the signal output properly patched into the CV1 input, the offset of the signal output was just measured.
You can now press the pushbutton or hold and release a touch sensor for more than a second to store the calibration data. The LEDs will go dark when the data is stored.
Disconnect the module from eurorack power and flash your firmware of choice with the ViaFlash tool. You must use this tool for uploading firmware if you want to maintain calibration data and presets.
This is a basic troubleshooting guide to help get your Via up and running. It assumes you have no sophisticated tools like a scope, but in case you aren't successful on your first power-up this might help you get going. If you need additional help, look to the forums.
Of course the best first step, even before plugging in your Via, is to double-check your work -- look for unsoldered connections, cold joints or solder bridges.
Here are some of the issues that we have encountered:
My synth turns off or behaves strangely.
If you feel a component getting very hot on the board, remove it from power immediately to limit the risk of damage. If you have a current-limiting power supply this is a good use case for it, to safely limit the current until you can find what's causing excessive current consumption.
Check the power cable is plugged into your power supply and module correctly. A silkscreen line on the PCB indicates where the red stripe on the power cable should go. Make certain it is correctly seated on the pins. Using the voltmeter mode of a multimeter, put the black lead on one of the GND pins. With the red lead, measure +12v, -12v, 3.3v and 3.3va. If any of them are not what they should be, you can also test for continuity between each of them and make sure they aren't shorted.
Make sure that D6 and D7 near the power header are soldered in and the correct way around, as indicated by the line in the silkscreen and on the body of the diode.
Viaflash doesn't detect my module.
First, make sure that your expander cable is unplugged (either end), and that you're holding down the DFU button while plugging in the module. Double-check that you're using an appropriate cable, and make sure that if you're on windows the appropriate drivers are installed. Follow the instructions on the Viaflash page. If it still seems like your module is not detecting, check the power as outlined above, except using USB to power. You should see a much lower voltage on +12V, nothing on -12v, and 3.3v/3.3va should be present and correct. If that looks good, chances are something is keeping your microcontroller from starting.
Double-check that the microcontroller is seated correctly on the pads and there are no bridges. If you spot one, you can get rid of it by adding some flux to the pins and using a clean soldering iron (not with heaps of solder still on it) heat up the pins and try to lift away the solder. Surface tension should be able to suck the solder onto the iron tip.
Take a close look at the USB connector and make sure that each of the 5 pins that sit on the PCB are soldered with no shorts. Also look at the diode D8 ensuring that the line on the diode body is oriented to the line on the silkscreen, and check resistors R108, R109, R110 and ensure they are present and soldered correctly.
Make sure the crystal Y1 is oscillating (check the crystal pins with an oscilloscope and see that it is a nice healthy oscillation, and ensure that it's soldered down along with the two crystal capacitors C101 and C102.
Touch sensors are unresponsive.
First check the soldering on the long 8-pin male header of the digital board. Make sure there are no shorts or cold joints. Check the resistors R101-R106 and capacitors C104-C106 to make sure they're all soldered, and ensure that the microcontroller looks seated properly with no bridges on the pins.
Try touching the pins on the header directly while calibrating to see if you can get it to respond to a touch there. If it does, the problem is likely on the faceplate, and if it doesn't the problem is likely on the digital board.
Check that the SMT header on the front panel is soldered correctly.
LEDs aren't lighting up.
If you don't get the RGB to light up, ensure that there are no bridges across the RGB LED pins. This takes some finesse to do right. Remove some solder with solderwick, or add flux to the bridge and try to drag the solder away with a clean soldering iron. Make sure that the LED is oriented correctly.
If the bicolor LED seems to work backwards, desolder it and flip it around.
If the other LEDs fail to light up, check that they're not in backwards.
Analog A input / CV2 / CV3 is misbehaving
Check to ensure that the expander cable is plugged in and has the correct orientation. Locate the white stripes on the PCB to the white wires If you aren't using the expander, make sure that the 3 jumpers are placed in their appropriate spots.
If you happened to plug in the expander cable the wrong way, you may damage the manual analog A circuit. You'll know if you don't get a +/-5v swing on the manual A control. If this has happened, the two transistors Q203-Q204 may need replacing. Hot air is the easiest way to get these off of the board without pulling up traces in the process, but it can be done with a soldering iron by heating up an entire side of the package, and bending that side up and away from the pads.
I can't trim 1v/octave input or output
Resistors were chosen to get the trimmer adjustment range sensitive enough to be both accurate and easy to trim. In a few cases the manufacturing error in the resistor values are such that the trimmer doesn't have enough range to bring into tune. If you are turning all the way clockwise( is this right? ) and you run out of room on the trimmer, remove R36 (or R35 for output trim) and replace with a solder blob or short out the pads with a very small piece of wire and solder. If you are turning all the way counterclockwise, you can replace R36 (or R35) with an 0603 1k resistor.
You can download a PDF version of the schematic here.
Each section is described below:
The 10-pin power input uses series schottky diodes D6 and D7 for power protection. If plugged in backwards, no current will flow through the schottky diodes as they are reverse-biased. However using this configuration the 12V input is slightly lowered by ~.3V, decreasing the overall headroom. CP1 and CP2 provide bulk power supply bypassing.
Sample and Hold
Sample and holds appear at input A and B. We chose the monolithic LF398, which is noninverting and has a high input impedance (10Gohm typ.). An external 10nF capacitor (C1/C2) is the "storage element" for the sample and hold, and was chosen as a C0G/NP0 type for its low leakage characteristics, to minimize droop which is voltage drop over time while held. The capacitor size selection is a complex tradeoff between droop rate, voltage error, minimum sample duration, and feedthrough rejection. A moderately-sized capacitor was chosen because our intention was to provide very fast sampling for decimation-type effects while also allowing for long hold times.
The crossfader is built upon the SSI2164 quad VCA chip. This has 4 identical -33mV/dB gain cells that are used here to produce two linear VCAs which are generally driven with inverse control voltages so that the input A and B are crossfaded. The 2164 mode resistor (R48) was chosen as 390k to minimize control voltage bleedthrough at the expense of VCA total harmonic distortion. While an SSM2164 could be used here, no provision was made to protect the chip from damage when the negative supply becomes more positive than GND. Typically a diode between the -12V input and GND would be adequate for protection, but it is integral to the SSI2164. It also has several other improved specifications.
There are two identical linear VCAs constructed by Mike Irwin's well-known 2164 linearization technique . Taking the A input as an example, R3 converts the -5V reference voltage Vref to an input current at IC1B(pin 7). The 2164 input is at ground potential so we can calculate the input current as Vref/R3 (-5V/68K) = ~75uA. C7 and R9 is an input compensation network for stability. You will see that same network at the input of each 2164 VCA, and notes on calculating the compensation network can be found in the SSI2164 Datasheet . The output current of IC1B(pin 5) is summed with the unbuffered DAC output Vdac (0V to 3.3V) through a 33k resistor into opamp U4A(pin2). U4A maintains ground at its inverting input by driving IC1B's control pin which has an exponential response 10^(-V/.67). Because of the loop formed with IC1B, U4A will produce a logarithmic output to counteract the exponential response of the 2164, and is calculated as -.67log[(-Vdac*R3)/(Vref*R5)]. Complicating matters somewhat, it was found that the DAC output does not go fully to 0V, but by turning the output buffers off we accomplish maximum attenuation at 0V and unity gain at 3.3V. The unbuffered output resistance of the DAC is summed with R5. More information about the DAC electrical characteristics can be found in this document.
The output of U4A(pin1) is the log-converted control voltage to IC1A(pin3), which is the 2164 gain cell for the signal path. The combination of the log-converted control voltage with the exponential response of the 2164 cancel each other out to provide linear control. R1 converts the output of the sample and hold into a current at IC1A(pin2), which is varied from full attenuation to unity gain by U4A. The output current is summed into U4B with the B input VCA, and the input voltage will equal the output voltage because R1=R24.
The mixer at U4B inverts the signal path, so U9B is an inverter with a gain of -1 to restore the polarity relative to the input. This passes through output protection resistor R27 to the output.
An MCP6004 powered from 3.3VA and 0V provides an input scaling and conditioning stage. The op amp cannot produce a voltage greater than 3.3V to ensure the microcontroller is not exposed to harmful voltages. U1D is not used so it is connected in such a way that it doesn't interfere with the rest of the circuitry or harm the op-amp.
CV1 (12-bit SAR ADC)
R15 sets the input impedance of this input at 100k. U1A is an inverting amplifier, with gain set by R16/R36/RV1 (Rfdbk). RV1 is a calibration adjustment to produce a gain of 3.3/10.666 - taken in terms of semitones, the 0-3.3v analog output of the conditioning stage will correspond to a 10.666V span, which is 128 semitones large, measuring 1v/oct. By scaling to this value, our 12-bit ADC values will be centered around the ideal voltage for any given semitone and the lower-precision ADC will return a value which is directly usable as pitch data, without transformation. Between each semitone are 16 values, giving plenty of resolution in between to be able to use this input for more general purposes.
R17 biases this amplifier to allow for bipolar inputs. ~+5.33 volts will be 0v at the output, while ~-5.33v will produce 3.3v. A slight asymmetry is compensated through software calibration so 0v (or no plug inserted into the jack) is at a constant ADC value.
C10 is 560pF, which provides some filtering. It is larger than the capacitors on the other CV inputs as this ADC is noisier than the SDADCs of CV2 and 3, and can use more filtering as its purpose is for lower-frequency signals by design. There is a single filter pole, whose frequency response is given by 1/(2*pi*Rfdbk*C10) - approximately 9kHz.
CV 2 and 3 (16-bit SDADC)
These are similar to CV1, but the gain is changed slightly to .33 to provide for a 10VP-P input. Taking CV2 as an example, input impedance is given by R18, gain is -(R19/R18), and the input is mixed with -5V also through 100kOhms, biasing the amplifier positive to allow for negative inputs. The range is +/-5V to produce a 0-3.3V output. The 100pF capacitor provides a filter pole at approximately 48kHz.
DAC Output Buffer
U10A is a noninverting buffer with a gain of 1 for the unbuffered DAC ouput (STM32F373 Pin 16). U10B is basically the inverse of the CV1 input, with input resistance and feedback resistance swapped, providing the inverse function to scale and bias from 0-3.3V to -5 to 5V. R50 is a 560 ohm output protection resistor. TRIMMERS!
B CV Processor
When RV2 is fully counterclockwise, U4C's noninverting input (pin10) is at 0V, and R11 and R12 provide a traditional inverting amplifier with a gain of -1. When RV2 is fully clockwise, U4C behaves as a voltage follower with a gain of 1. In the center of the potentiometer, the inverting and noninverting responses are matched, cancelling the effects of the other, and the output is zero. The input impedance of this block varies with the potentiometer, from very high when noninverting to 33kOhms when fully inverting.
The jack normal is connected to a 5V reference through R49 to allow the knob to produce +/-5V when nothing is plugged into the jack. R49 is a current-limiting resistor so that the reference is not directly connected to the plug tip or sleeve briefly while plugging and unplugging.
Voltage Regulation and Reference
Two voltage regulators are present, a 3.3V bulk regulator for the microcontroller supply (LM1117) and a 3.3V analog reference (NCP51460) for the microcontroller DAC and ADC reference voltages, as a supply for the CV input conditioning circuit, and to generate the +/-5V reference voltages.
U5B takes the 3.3v analog reference at pin 6, and generates a -5V reference by the combination of R37 and R38 in an inverting configuration. U5A is a unity-gain inverting amplifier, and flips the -5V reference to 5V. The only place the 5v reference is needed is at the normal pin of the B input jack, to provide a reference 5v with no cable plugged in. -5V is used for biasing the CV inputs and output, and providing reference currents for the VCAs in the crossfader core.
A simple transistor switch, this produces a negative voltage when the input exceeds approximately .7V. Note that the collector is connected to the 3.3v digital supply so that the microcontroller is safely isolated from logic input voltages.
The pair of resistors R30/R31 divide the 12V to produce ~4.8V when the transistor is off. These values were picked to optimize the BOM and give a logic level close to 5V.
These are simply voltage dividers between the 3.3V analog reference and ground. They have dedicated ADC pins on the microcontroller. 100nF capacitors provide some smoothing/filtering.
Expander Manual A
Two 5.6V zener diodes D201/D202 provide local +/- 5.6v references. R201/R202 reverse-bias these diodes providing a moderate ~1.4mA zener current. This value was chosen to limit power consumption for the circuit and is a tradeoff with the effective reference voltage. The 50kOhm potentiometer RV201 is a voltage divider between the local references. Q203 and Q204 form a simple "class B" amplifier, to take advantage of the small dead zone between -.7V/+.7V. This drops the voltage output to roughly +/-5V and creates a null area at the middle of the travel of the potentiometer where the output is effectively zero. R208 ensures that the output is 0V when nulled. When the expander is not used, a jumper shunts the A input to 0V instead.
When the expander cable is plugged in, the control voltages for CV2 and CV3 passe through the top of potentiometers RV202/RV203 which act as voltage dividers. When the expander is not plugged in, jumpers shunt the supply and return paths at the expander header. No attenuation was provided for CV1 in order to maintain the accuracy of the 1v/oct circuit.
The bulk supply comes from the LM1117-3.3v regulator, with bypassing from C107/C108. The SDADC, ADC, and DAC power supply pins 9/24/25 are supplied from the NCP51460 to ensure low noise and analog supply voltage isolation. C103 and C111 are paralleled bypass capacitors for the SDADC while C109/C110 are paralleled bypass capacitors for the ADC and DAC. NRST pin 7 must be pulled high for correct operation and is done so by R107. The BOOT0 pin is grounded through R108 for normal operation, and SW101 pulls this pin high while pressed. During startup with SW101 depressed, the STM32 executes the bootloader rather than normal program execution.
An external 24mhz crystal Y1 is connected to pins 5 and 6. An external crystal is necessary for USB operation and to be able to achieve the maximum system clock rate, 72MHz. C101 and C102 are the crystal's load capacitors.
Touch sense is accomplished by a built-in peripheral to the STM32F373, the Touch Sense Controller. Three groups of touch sensors are used. Each group requires an external 10nF sampling capacitor, and all of the sensors in each group are multiplexed and sequentially read. This is a "charge transfer" type of touch sensing, where the electrode capacitance is sensed by charging it with a series of pulses and transferring it to the storage capacitor until the capacitor voltage crosses a logic threshold and is discharged to restart the cycle (or to read the next sensor in the group). A finger press increases this capacitance and by counting the number of pulses required, a measurement can be acquired as to whether it is being pressed and the magnitude of the increase in capacitance. The controller allows for these electrodes to be arranged in an array and provide a linear position encoder as well as touch buttons. Our LINEAR encoder panel is a prototype to test this functionality.
Due to limitations in the number of available pins, the USB data lines USB_DP and USB_DM share pins with the expander logic input and output. This sometimes causes problems with programming but is easily solved by unplugging the expander cable. Schottky Diode D8 provides power to the two 3.3V regulators while plugged in through USB to power the microcontroller. R110 is the necessary 1.5k pullup resistor on the USB data line to establish presence. The ID pin is grounded through R109 to indicate it is a USB-OTG type A device.
Programming header: The unpopulated header P3 provides the standard STM SWD programming interface. This can be used with an ST-Link programmer, included as part of the STM32 Discovery series evaluation boards, or by using a standalone ST-Link/V2 programmer or equivalent. This provides a much faster means of flashing the microcontroller and also incorporates in-circuit debugging. The Serial debugging line SWO is available but shares a pin with Touch Sensor 3, and is normally disconnected but can be connected by the solder blob on the digital board marked "SWO".
The long pin headers to connect the digital board to the face plate as well as the 12 pin harness to connect the expander are custom. You can contact us if you would like to source these parts for your build. You will find the rest of the info needed to complete a build below, or in this CSV.
||PART NUMBER / DATASHEET||
|J1 J2 J3 J4 J5 J6 J7 J8 J9 J201 J202||11
||Vertical Jack, 3.5mm w/ normal
|Alternative jack at
||50k linear pot, 15mm D-shaft
|RV3 RV4 RV5 RV202 RV203
||10k linear pot, 15mm D-shaft||
|D1 D2 D3 D4
||3mm white LED clear
||Tayda SKU A-2226
||5mm RGB LED common cathode
Tayda SKU A-1103
||3mm bicolor LED R/G diffused
||analog out display
||Push button, Momentary
||2x5, 2.54mm pitch pin header
|| Break down from:
Tayda SKU A-198
||1x17 pin header, 2.54mm pitch
Break down from:
Tayda SKU A-197
|Tayda||Analog Board Mezzanine Connector
||1x17 socket header, 2.54mm pitch
Break down from:
Tayda SKU A-196
||Digital Board Mezzanine Connector|
||2x6, 2.54mm pitch pin header Right Angle
Break down from:
Tayda SKU A-638
|Tayda||Expander Header, digital board
||2x6, 2.54mm pitch pin header Straight||
Break down from:
Tayda SKU A-198
|Tayda||Expander Header, expander board|
Thonk ("Black Small Skirt D Knob")
||Knob Caps, black
Thonk ("Small Black Cap")
|CV attenuators / parameter potentiometers
||Knob caps, grey
Thonk ("Small Grey Cap")
|A + B Controls
There are a number of excellent general purpose hardware platforms for experimenting with digital audio. Via is not one of them. Rather, the specificity and peculiarities of the interface create a set of constraints for the programmer. While this may seem inhibiting (and it may well be for some), we have found that working with what Via gives you can be inspiring and guide the learning process. You can also reinvigorate the existing modules by updating the stored resource data such as wavetables, ratios, scales, and patterns.
Still want to hack your Via? A good first step is learning how to build and flash the source code. You can find documentation for how to do this in the Eclipse IDE or from the command line in a virtual box a-la the Mutable Dev Environment from Mutable Instruments:
The Via Dev Environment has instructions for hacks using a set of Python tools for generating module resources. For example, you can make custom GATESEQ pattern banks by editing a CSV.
You can also build and test firmware changes in Rack:
Many of the modules around Starling HQ have some form of modification or another. Via is no exception.
One of the more ambitious hacks was to replace the crossfader circuit with a video crossfader IC, the LT1256.
Another notable example is the edu-Via, where the analog core was broken out into discrete modules for the track and hold, VCA, and mixing stages.
Finally, the stereo Via is a modification that does away with the mixing stage, allowing for separate outputs for the A and B channels. It is outfitted with TRS jacks for stereo signaling in line with our new TRS stereo modular project.