Time to wrap up this project on the blog end too!
I’ve had the x0x complete and in use from around fall 2011 (first live at Dekadence Dataparty 2011), but finishing this text has gotten pushed aside.. Prioritizing masses of this and that over writing, as usual. This delay however has also a little in common with the “extra” I wanted to do for this project.. I give you ‘Jam the x0x’:
Not by far the first take I did of this song, but a one-go live recording without additional editing anyway! Besides x0x I’m using XBase09 for drums, MC-202 routed through a MX-200 effects unit and x0x through Filterbank 2.
On to the build..
I’ll get me coat.
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..