I promised myself that once my x0xb0x is in a fully functional state, the first thing I’ll do with it will be a cover from a song that I consider to be _THE_ acid tune of all times. So finally, after a lot of trial and error with the x0x build process, here’s my rendition of “Acid Tracks” by Phuture (1987 / Trax Records). Press play on the player below and read on!
About a month ago, I resumed with the x0x (relaxing summer break <3) only to find myself in a constant keyboard “fault loop”. I would fix one fault just to end up being stuck with another shortly after. As this rather effectively halted further progress, I figured I’ll just toss the current design as “too unstable” and make a new one around switches that will be soldered directly to the mainboard. Changing switches of course impacts the top panel as well, so I have a chance to make the design more compact :)
I still wanted to retain the LEDs within the button frame, so after a while investigating options I chose the Omron B3J series. They are basically the standard 12x12mm switches with a hinged button and a LED added on one end. They’re also available in various colours, (‘piano keyboard’, yay) and have the same pin spacing as the x0x keyboard switches (TL1100 series by E-Switch). So, seemingly a no-brainer in this sense. Any other issues, I figured I’ll just sort them out on the fly.
After receiving a set of B3Js, the first problem I bumped into was their overall height. Because of my double panel structure, the buttons didn’t go anywhere near the surface of the top panel. The idea with the double panel is that all the UI controls which are not installable directly to the mainboard, are mounted to a secondary sub panel. This is fastened to the mainboard and the resulting stack is installed inside the final enclosure, effectively hiding the fastening nuts and bolts (switches, potentiometers etc). Anyway.. To work around the height difference between the top panel and buttons, I made risers under each switch from stacks of PCB pieces. This required also extendeding the feet of all the switches to the x0x mainboard.
Besides helping to level the actuators during installing, the riser stacks also give support to the switch frame. I doubt the plain extended feet could’ve provided continued support when the switch is in use.
A more advanced option working around the problem would’ve been to make a “step”. That is, shape the top panel to an angle so that the part covering the keyboard would move closer to the mainboard than what it is around the potentiometers. This angle could also be a smoother curve if a bit of design would be called for.. Anyway, adding this to the panel sounded too much of a plan requiring CAD, so I chose a leveled top panel and switch riser stacks instead.
The switch LEDs weren’t even close to the pads on the x0x board. The pin configuration was also reversed. To nail both issues at once, I chose to bend the feet extensions to correct orientation. It would’ve been possible to open the switch casing and turn the LED to correct position. But for the sake of clarity, when/if replacing these switches later, the bending method seemed more appropriate as the feet needed to be extended anyway.
This way, the modification is also clearly indicated: Whoever might replace the switches at a later date has, without further documentation required, a visible indicator that the LEDs should be checked for correct orientation and/or “warned” that modification is required.. Besides wondering something like “WTF is this shit?!” :)
Whilst soldering the LEDs, I managed to sweep the soldering iron incautiously and hit one of the white buttons. This left a nice reminder on it:
The switch placement might need slight adjustment, but this is easily accomplished when I have the final enclosure sorted out. The ultimate workaround to these problems created by using a out-of-spec switch would’ve of course been to design the mainboard to use B3Js instead.
Despite the burn mark and all workarounds, I think these B3Js will turn out more stylish than what the original x0x buttons / LEDs are or my initial design would’ve been.
I have no idea what happened, but when I started experimenting with fuse settings after diagnosing the MCU running at wrong clock speed, the chip went dead. The programmer software (Ponyprog) just constantly reported the chip as “unknown device” despite detecting it ok previously. My bet is on a voltage spike or such, though ESD can be counted out right from the start.
Anyway, a replacement part arrived last week, after which I was able to complete mapping the fuse settings. Here’s the combination that works on my setup:
- bod0level = 0
- bod1level = 0
- bod2level = 1
- ckdiv8 = 1
- sut0 = 0
- sut1 = 0
- cksel0 = 1
- cksel1 = 1
- cksel2 = 1
- cksel3 = 1
- bootsz0 = 0
- bootsz1 = 0
- ocden = 1
- wdton = 1
- eesave = 1
- ckout = 1
- m161c = 1
Not that I tested every combination, but this was rather the first set with which the x0x powered up seemingly normal. Sequencer running ok, buttons responsive and all that.
Getting the MCU running revealed plenty of defunct leds on my custom keyboard though. The ones soldered directly to the board work fine, so it’s not difficult to gues that the problem lies somewhere with my custom cabling! No need to guess what I’ll be working on next..
In order to complete calibration and initial testing, I decided to make a temporary mounting solution for the x0x modifications. I chose to go with the following mods:
- VCO: Slide time adjust
- VCF: Resonance boost, VCO modulation, overdrive
- Env: Variable decays, env. mod. amount, increase accent range, accent sweep speed
- VCA: Bass boost, muffler distortion
Some other mods like ‘gate / env. on forever’ can be added at a later stage. At this point I was only interested with mods that affect the sound in some way. Need to hear whether I like a particular mod enough to incorporate controls for it to my enclosure design. The Pac-Tec cases with mods added on both sides of the top panel are f-u-g-l-y (so steer clear from that shit :P).
Following the instructions from the x0x wiki, calibrating the analog side was a snap. The digital side.. well, crap. The buttons and whatnot behaved like the microcontroller (MCU) is on Valium.. No wonder why; a bit of poking around with the oscilloscope revealed that it’s running at a wrong clock rate! Nothing else visible that might cause the problem, so I’m guessing the internal setup options (aka ‘fuses’) for the MCU are not right.
Looking around the Ladyada forums revealed nada, the topics there seemed to mostly revolve around basic “Hi I’m a n00b” type of stuff. So, where to get the proper setup options??
Looks like I have a bit of testing to do..
With the button cabling sorted out, I focused immediately to assembling the keyboard and making a test assembly. This is good for testing the buttons/LEDs and their cabling for functionality. I also get to verify some mechanical clearances to base further decicions about the enclosure on.
For the panel, I simply printed the basic x0xb0x panel layout to paper and transferred this to a scrap piece of clear acrylic. This is a quick way to get the drill holes roughly to appropriate spots, perfect for mockups and such. Once potentiometers are wired this test assembly should also be good for testing / calibrating the mainboard.
Of course, I had to do a bit of testing with the LEDs as well :).
Above, you can see how the LEDs are installed on top of the switch. A button is fastened to the top panel and a clip-on mounting flange is attached to it. Finally, the keyboard PCBs is fastened to the flanges with screws, leaving the LEDs inside the hollow button shaft. In case you’re wondering “what flanges?”, they’re the beige ones slightly visible under a button. The first side view picture on this post shows them slightly better.
Also, on the picture above, the button lenses are not yet installed (hence the recess on the surface). A decal can be inserted under the lens, so I’m thinking of printing graphics on a overhead projector slide. This way, the step buttons will have numbers on them etc.