Dual Gate Delay
When I started on the ADSR, I looked at a few commercial examples in addition to the DIY versions. While watching a couple of Monotrail Tech Talk videos (part 1 and part 2 - highly recommended!), the Erica Synths Black DADSR EG caught my attention with some interesting extras, and one of those was the delay.
Originally, I thought that this would be an interesting analog design challenge, although it also occured to me that the most straightforward approach would use a microcontroller. There are other gate delay examples out there, but they either act as a trigger delay (just the leading edge is delayed) or a pulse delay with a variable length that's independent of the input pulse. For this design, I wanted to create a true delay that maintained the length of the pulse.
In the analog design, this meant creating some controllable current sources, which naturally provide a linear to exponential conversion. Some threshold logic is also required to track the state of system, but this could be achieved with comparators. I ran some simulations of this design and am fairly confident that it could work, but it would likely require a fair bit of tuning.
For the digital design, I wanted to try targeting the ATTiny series, which was an excuse to learn how to use PlatformIO and an in-circuit programmer (ISP), rather than the usual Arduino ecosystem that I'm familiar with. Some notes (to be expanded on later):
- You can program the ATTinys at 3V3 logic levels, so making and ISP with a newer SAMD board is totally fine. All of the tutorials on this topic are old (why would you still choose an ATTiny?) so they all use the 5V ATMega based Arduino. My code for the Adafruit Trinket is on github.
- If you want to use the reset pin for a digital IO, you can, but if you mess up, you'll need a 12V capable programmer.
- I should have picked the ATTiny85 and not the ATTiny13a. The -85 has the same pinout and much more storage. I thought that the -13a would make it a bit more of a challenge (it did), and that was stupid.
- Always test with a blink example first. Always.
The microcontroller opened up some new possibilities, namely delaying multiple pulses in series. Mapping the delay from linear to exponential required a bit of an approximation, but works well enough in the end. To minimize the number of pots and fit two delays in a 4HP form, I had to make a comprimise on the manual & CV control of the delay. This relies on breaking the normal connection to the tip, which isn't ideal (mechanically I've already had problems with cheap jacks not making the connection in the first place).
This was also my first module with mostly SMT components and a 4-layer board. It makes layout and assembly so much easier and I plan to stick to this now. I have the boards back and have assembled and tested the first one. There are a couple of minor tweaks required before I do the faceplate and final, but that will come next.