Posts Tagged ‘Hardware’

WTPA v0.98 Review and Shakedown!

Wednesday, March 18th, 2009


So I got the test PCBs Monday, bare as the day they were born. The last couple days I’ve been going through all the circuits and checking the hardware for problems, bugs, things to optimize, and stuff that would otherwise be Bad To Deal With in a run of 200 units.
The good news: The third rev of boards does more or less all the stuff it is supposed to, and has most of the performance improvements I’d expected. However, nothing is perfect.

First, let me give you young nerds a piece of advice. Become rich. Then use your dough to buy prototype boards that have a soldermask. Good lord. You will save yourself hours in debugging stupid soldering problems, and gray hair in debugging other problems which you may at first erroneously attribute to solder bridges.
Bare PCBs do offer an advantage in that they’re easy to probe wherever you need to, and all that exposed tin makes it easy to solder fixes in, but in general they will make you crazy at least once with some weird connection that you didn’t mean to make. That was the first round of problems I had to solve.

With those out of the way came the first real, serious, problem: The VCO. The VCO got incorporated in the last board rev and I dutifully wanked on it a few times and then set it aside to deal with other problems. This in retrospect was quite stupid, because if I had paid more attention I could’ve saved myself a lot of time and a little false advertising.
It turns out that the VCO design I used (ripped wholesale, with a few changes, from Horowitz and Hill p. 240, who I’m pretty sure in turn ripped it wholesale-with-changes from the LM324 datasheet) is good in many regards. It is single supply and simple. It requires only opamps and a fairly generic transistor or FET. The problem came in trying to tune the monster over a wide range. Though the TLV2474 opamps I’m using are pretty good at RRIO, they aren’t perfect.
All the drama occurred when the CV was some small number of millivolts from the bottom rail. The ‘2474s don’t really want to drive that low, so I made the little Merce Cunningham looking mess of dancing resistors (pictured above) to help pull them there. Simple enough, but a little ugly.
Approaching REALLY closer to the rail (say within 10mV or less) the VCO stops responding in anything approaching a linear fashion and gets jittery and tends to drop out. Normally I wouldn’t care and would just bias the CVs above 10mV, but that ends up being a significant amount of tuning in the low-sample rate range. Which is silly. _NO_ op amp is that good, really, and no good design should try and expect one to be assuming it isn’t colliding particles or something.
With a marathon all-nighter / all-dayer the best performance I could get from the VCO was a not-so-great 2kHz to 16kHz, a tuning range of 8-to-1. This sucks. In retrospect the humble relaxation oscillator of the first WTPA did something like 60-to-1.

I fiddled around trying to get another VCO design breadboarded for a little while, but all the good ones I know use an OTA. I’ve seen some designs with analog switches and of course plenty with specialized VCO ICs, but I had three op amp sections and a dream. The final decision was to drop the VCO, return to the traditional relaxation oscillator, and reduce the opamp from a quad to a dual. Even Saving You Money(tm) in the process.

For those of you crying “Noooo! How will I make it talk to my Modular?” first let me say — samplers usually don’t talk to modular synthesizers, you’re spoilt. Second, let me say, because I love you, and because that’s a weird and cool idea, I’ve worked out a way to make the sampler’s oscillator clock sync up to audio inputs — so you’re losing a VCO, but you’re gaining a sync! This means that now you can synchronize your samples to your vocal line, synth line, guitar, or any signal in the audio frequency range.
This should work pretty reliably — I’ll know soon. I can no longer say “The only sampler with a VCO” but I think the new effect will probably be cooler anyway.

Everything else: I found a hardware bug in the in-circuit serial programming section related to changing around the data bus. I fixed with some pullup resistors. After that I made sure the switches and LEDs worked with the new bus structure. It’s technically still possible to PWM the LEDs and maybe I’ll do that sometime before release, but it’s low on the list. Next I quantified the bus-turnaround time related to the bus routing changes, and they’re almost invisible. It took some NOPs in the ISR, but I bet I can optimize those out later. I tested the MIDI output — so far WTPA has only received midi messages. But today it took charge, such as it can.
Finally, I took a look at the audio path. This was important and enlightening. Using a function generator and a fancypants benchtop meter set to take dB readings, I figured out the f3dB points for all the different audio paths through the system. They were pretty good — the first reading showed the audio range of the sampler’s pass-through and DAC paths to be about 14Hz-356kHz (pictured above). Not bad!
Still, as a rule of thumb (also ganked from H&H) I try and position f3dB points 10 times greater or less than the frequency of interest to avoid phase shifts in the audio range. You know what they say about phase shifts, right? “They make for weak ass west coast bass, not that Miami shit.” That’s what I heard them say.
Anyway, I got the range for those paths to be more like 2.8Hz to 370kHz with a few changes. In the overdub path I managed to actually DC couple some of the connections which means that there should be no loss in that path relative to the rest of the sampler.
Giving it the listen test, it sounds Really Good. I’m happy with the audio quality. It’s nice and quiet where it should be, with good frequency response, leaving it free to Expose Da Crust in all the important parts.

Finally, there was one more valid thing I found. In an effort to keep impedances (and costs) low I settled on two values of potentiometer for the final thing — a 500k audio taper for the input and output amp gain controls and 1k linear pots for everything else. In all the audio controls on the board, the 1k pots have a resistor from the wiper to ground to approximate a logarithmic curve (and make your life silky smooth). This means that the total resistance in some places in circuit ends up being pretty darn low. Although this does keep noise pickup low and the top f3dB point high, it also ends up working out the driving opamps something fierce. My hot rail-to-rail output doesn’t swing nearly as rail-to-rail as it used to. This of course means less usable bits in our sample. I can fix this a little by chaning the tapering resistors on the pots, but the right thing to do would be to bump the pots up to 10k and scale their related circuits. Easy enough, if I didn’t have a boatload of pots on the way from China already. The ENOB isn’t terrible, but it could be a little better. Hey, what’s a design if there isn’t room for revision?

Lastly, before I leave the soapbox, I’d like to take this opportunity to show this off as yet another example of an old TMB truism: Analog Be Harder Than Digital. Not better, but harder, and perhaps by association more noble and romantic.
While I was frantically breadboarding crappy VCOs, I came across this app note in which that continuous font of inspiration, Jim Williams, designs like 10 analog circuits which are complicated enough that they make my head spin even after reading his explanations, and he figures them out for shits in his garage or something, while on vacation. There’s a badass VCO in there which tests my understanding, and whose makeup is also (or consequently?) not quite right for WTPA.

Oh, and it also made me always remember to refer to VCOs as “Voltage to Frequency Converters” again. Saying VCO makes you sound like Jean-Michel Jarre; saying VFC makes you sound like a curmudgeon with a white beard and a bunch of Teflon caps and bandgaps. Who would you rather be?

Hello, big bag of Chinese boards? Perhaps you would like to come over?

Xoxoxo, TMB

WTPA v0.98 Designed! Kit To Be Released At Bent 2009!

Thursday, March 12th, 2009

God, it’s been so long I hardly know what to say. But I believe the big banner above says the most important thing :-)

It is with excitement and not a little trepidation that I am announcing WTPA’s booting out of workbench land and into the hard, cold world.
That’s right: The wait is almost over — the real deal kits WILL BE out for the Bent Festival in New York this April! Not my usual, waffly “soon”. But on a real, fixed, finite date!
That’s exactly one year since the proto came out, and would be embarrassingly slow if the latest WTPA wasn’t head and shoulders better than its forefather. But. Lest you think I’ve been idle, know that since my last post I have done several things:

  • I have become a business. Not a sissy nonprofit either.
  • I have used my extensive pull in the “business” world to do some international commerce, and have a boat full of components on the way from Taiwan.
  • I’ve set up (and am continuing to set up) an “E-commerce solution”. Although I like these about as well as I like “blogs” and “hipster runoff” they are all totally unavoidable in 2009.
  • I’ve revised the dickens out of the boards.
  • And all of this is to sell you kits!

The first run of kits will number 0-199. This figure made the most sense considering all the number crunching I did, at least for now. The retail price will be announced on or around the release date, but for the curious it will be nestled snugly somewhere between Mssrs Grant and Benjamin.
There may, at some point, be another distributor besides Narrat1ve for this kit, but they will not likely be onboard by the release date. The kit will come BYO-enclosure, although I will probably sell some parts on the site to make it easier for those of you who want a little of the guesswork taken out. The website will (has to, basically) get beautified to accomodate info for the people building the kit, and not so much my gibbering. Finally, on (or right around) the release date, you’ll be able to get ahold of the source, schematics, instructional videos, manual, and theory of operation docs all from right here.

The hot mess you see above is the test pressing of the final WTPA boards (it’s a picture of the gerber files, complements of GEDA’s Gerbv, which (sadly) unlike most of GEDA, totally rules). The real thing gets here Monday for requisite twiddling.
This is the third and last (hopefully) major hardware revision WTPA will go through. The second WTPA totally slayed the first in audio quality, latency, functionality and pretty much everything else. This last rev cleans up the rough spots that were still left on the second rev, and adds a sprinkle of small new features.
Mostly, however, it is the physically smallest and most simplified of the WTPAs to come out yet and is geared to make the kit easier to build and cheaper to sell. There is very little fat left on this design in my opinion.

Technically, WTPA has returned to single-MCU design. Shortly after I made the two-MCU rev I learned about a device called an I/O expander, which is cheaper, simpler, and more robust than a goofy UART link with a second MCU. Shortly after beginning to do battle with the I/O expander I did some much needed forehead-smacking and figured out how to rearrange the databus and replace the whole nasty expander / MCU / mess / with another parallel latch. Which of course was the Right Answer. Pie-simple, cheap, effective.
This WTPA also has its two analog subsystems (the input/output amps and the VCO / CV section) isolated with separate ground planes and ground returns to the main regulator. The last WTPA was not noisy, but I expect this one to be even better. The goofy emitter follower in the front end has been removed. This should result in better audio response, more headroom, and fewer parts.
The jitter generator has been moved into the realm of software. This does a lot for us. Most importantly, it makes the jitter work right (and sound cooler). It also introduces less HF noise onto the board, and further reduces the parts count. Finally it allows the jitter to be controlled by MIDI! This is obviously good for playability reasons, but it’s “orthoganally good” as well because the jitter clock was the only effect left exclusively in the analog domain. Other than the gains, everything on WTPA is now controllable from both the knobs and switches AND the MIDI in.
Finally, all this hardware juggling allowed me to free up a few extra pins which I assigned to a spare UART / SPI module. I have no immediate plans to expand WTPA, but if I ever did, this would be a great way to do it (say, to talk to other instruments or to add an SD card interface or the like).

This all means that the hardware is basically done changing. It also means I’m getting down to the wire on software business, too. WTPA will not go gently into the aforementioned good night — expect to see LOTS of updates here for the next month while I pull all-nighters getting this monster ready for her catwalk. There will be some ugly fixes, a huge rush of features, sample banks, scope traces, the whole nine. Exciting stuff!

And hey, thanks so much for sticking around this long. Xoxoxo.

WTPA v0.95 ISR Speed Characterized, Code Revs, H/W Changes

Thursday, January 8th, 2009

Online in 2k9, my ducks.

So sometimes, contrary to common blogline belief there are times when I’m quite busy even when I’m not posting. This New Year / Holiday period was one of them. There are some big advances on the WTPA front:

First, all circuits and modes are totally functional. The resampling problem I was having had two roots. First (and lesser of the two) the input impedance of the AVR’s A/D converter is actually a lot lower than I ever realized. In the datasheet Atmel recommends that you don’t drive the ADC with anything less than a 10k impedance but I actually found that an input resistance as small as 470 Ohms still
produced a noticeably smaller waveform at the ADC input pin than driving the pin directly from the output of an opamp. This was easy (though annoying) to fix — it requires another op-amp section and a redesign of the summing amp into the resampling ADC input. The only unfortunate thing about this is that it will drive the cost of the final device up for you, dear customer, and this kit is already, as they say in France, tres cher.
Still, I made a decision a long time ago that when I design things for me (as opposed to the toy world) I will always err on the side of badassery rather than cost, because I can. And because everybody wants to be a baller, right?

The other (more significant) problem was a Read-Modify-Write issue in the audio ISR. OMGWTFBBQ, was it hard to find! When is a NOP not just a NOP? When it lets you sync an output port you’ve just written to with its input latch. Weird, weird bugs from that one, to be sure. And fixing bugs in my code is, like, totally free!

In other important news I bothered to scope out the speed of the audio IRQs and compare them to the old WTPA. As I had hoped, there was mondo improvement on that front:

  • WTPA 0.9, Time in IRQ:
    • Recording / Playback: 22-24uS
  • WTPA 0.95, Time in IRQ:
    • Recording: 5.8uS
    • Playback: 7.5uS
    • Resampling/Overdubbing: 9.0uS

This means that we could now sample at 44kHz (CD quality — remember CDs?) without breaking a sweat if we wanted to! Of course, I’m not sure how much good that would do us since the ADC on the AVR is already “not-so-accurate” at the paltry 24kHz I’ve got it set to now. But hey, the headroom is there if you all want to get your overclock on.
Practically this means that the processor now actually has some time to get some work done other than audio, which is good.

So the final hardware related issue in this animal is the jitter generator. The way it was originally designed the jitter generator used a PRBS white noise source to mess up the clock signal, and it worked! Sort of.
It became apparent that when the “jitter” control was at maximum, the knee frequency of the filter on the white noise became the dominant interrupt frequency. In English: The fastest noise waveform actually determined the clock frequency in a totally deterministic sounding way.
Since this frequency was different than the clock frequency, you would hear a “jump” in sample rates when adjusting the jitter. This sucked. Right now I’m trying to get the jitter to mess up clocks of all frequencies equally well without inserting a dominant frequency of its own. Meaning a jittered-up 600Hz clock will still have a frequency of 600Hz, it will simply have a totally random duty cycle. (You know, like peak-to-peak displacement, like Wikipedia says under “Jitter”).
After fiddling around with another analog solution (pictured above) and then with some circuit sketches using AND gates and JK flipflops I realized that the best way to do this (everybody all together now) was IN SOFTWARE. I can’t decide if it’s sad or not that it always seems to be that way. Anyhoo, once I’m done with that it’s time for new boards.
Oh, and my birthday is coming up in a little less than a week. Send me naked pictures, or LOLCATs or something. Xoxoxox.

WTPA v0.95 Gets All MIDI Up In Here (and Hardware Changes)

Monday, December 22nd, 2008

As a matter of fact that IS an Akai MPK49 inquiring where the party is.

In brief: all the MIDI business is working great, although I’ve run into some annoying problems resampling (what guitar players might call overdubbing) which are both hard- and firmware related.
I’m late to haul my freight back to the mid-midwest for the holidays as of now, but you can see the hardware fix I did in the form of that gnarly looking perfboard. That part at least works great. Maybe I’ll nail the firmware issues over some wassail, Kwanzaa candles, or something. Happy Holidays!

WTPA v0.9 First Audio

Wednesday, April 23rd, 2008


Remind me to tell you a story about integer promotion and casting in C one of these nights before bedtime. Until then this yarn and photo about an R2R DAC singing its heart out while lots of little shift registers keep time will have to call the sheep. We blink, we parse, we sawtooth. Now we need the gift of speech. We’re not altogether sure our little LM324 is very linear, but what else is new. Off to dream of assignment operators.