Why a tenkeyless Maltron? (Because people who ask why break nothing because they don't get anything done)
Actually, I just type a lot of plain text plus a few programming symbols, so the central key area was generally useless for me. And it meant fewer keys to put diodes in, fewer key modules to buy, fewer keys to buy, fewer things to go wrong, smaller number of controller I/O pins, etc. (And I like the look.)
When I ordered the shells, I had them go ahead and glue in the runners that align the bottom plate because I figured they'd have a better chance of getting them to align right than I would. Some thinks it impedes access to the function row, but that area is tight no matter what. I also had them leave the USB and LED holes un-punched.
I z-bent a length of .5" aluminum bar, drilled it to attach the PCB, and sanded + gouged the inside of the case to get a good adhesion and attached it with JB Kwik / Kwikweld.
Then, after measuring against the PCB, I cut and drilled the USB hole.
(using Cherry MX reds, obviously) I cracked open 82 switches and install diodes. For parts of the installation I was using a wire-wrap tool to give the wire a tight connection to the post, but one pin on the cherry module is too thin to withstand the twist, so I routed the diode to that pin and soldered it and used the stronger pin to attached the column wires.
I started with the function row, and instead of working from the back, threaded the wire through the holes, soldered it and placed the switch. At the end I realized i should've done this row last, because I had to pop them back out to attach and feed through the column wires. For the first couple of switches I burned the insulation off with the soldering iron, but didn't like the results. So I started feeding lengths through an OK machines ST 100 stripper (straight down through the blades at intervals) and pulled the wire out and broke the rest of the insulation with my nails and pulled a gap in it. The insulation on this 28AWG wire-wrap wire worked nicely that way.
Then it's just a matter of working through all the column and rows.
Then wiring up a cross-connect to the rows on each side, and attacking ribbon cables and connectors for the columns, rows, and a capslock LED. Instead of drilling a hole, I fitted the LED in the switch. To get both the LED and diode in, I put heat-shrink tubing on the LED's leads, which meant I had to re-drill the hole in the module.
TO BE CONTINUED...
Tenkeyless Maltron
- werther_de_goethe
- DT Pro Member: -
Last edited by werther_de_goethe on 14 Feb 2016, 21:48, edited 3 times in total.
-
- Location: Utah
- Main keyboard: White Fox / Zealio
- Main mouse: CST trackball / MX Master 2S
- Favorite switch: Alps / Topre / Zealio
- DT Pro Member: -
Wow. Very cool and ambitious project; It would be very interesting to see a video of you typing on it once completed. Good luck buttoning it up.
- werther_de_goethe
- DT Pro Member: -
(CONTINUED)
Then onto the controller board. By disabling JTAG, the adafruit atmega32u4 breakout board has enough pins to handle a 7x12 matrix and an LED or two.
Then all was left was the keys. These are Signature Plastics DSA GDE PBT. Due to the warpy nature of PBT and the vagaries of holes in the case, some keys had to be filed to deal with rubbing. The blue LED won't shine through the key cap, but it reflects off the bottom and lights up the surrounding case and can be seen quite plainly even in a lit room. The 8 home-row keys are deep dish.
TMK was the basis for the firmware. But I decided on an alternate debounce algorithm based on a continually updated window of anded intervals.
Relevant portions from config.h and matrix.c:
config.h:
matrix.c
And here's the layout:
Because of the physical layout on the maltron, it made more since to put the capslock on the left pinky, for me. Re-mapping it on the standard keyboard was only ever a hack. And the maltron allows for true symmetry with the modifiers. (I've never been able to touch-type the right ctrl and alt keys on the standard keyboard). And I'm a unix admin, so the the modifiers and escape are laid out for easy access in vi or emacs. And 5 and 6 are split as the should be. (I'm too used to typing ctrl-8 with my middle finger).
Then onto the controller board. By disabling JTAG, the adafruit atmega32u4 breakout board has enough pins to handle a 7x12 matrix and an LED or two.
Then all was left was the keys. These are Signature Plastics DSA GDE PBT. Due to the warpy nature of PBT and the vagaries of holes in the case, some keys had to be filed to deal with rubbing. The blue LED won't shine through the key cap, but it reflects off the bottom and lights up the surrounding case and can be seen quite plainly even in a lit room. The 8 home-row keys are deep dish.
TMK was the basis for the firmware. But I decided on an alternate debounce algorithm based on a continually updated window of anded intervals.
Relevant portions from config.h and matrix.c:
config.h:
Code: Select all
#define DEBOUNCE_MAX_SAMPLES 10
/* The minimum period in micro seconds (u) of positive key press */
/* equals whole sample window */
#define DEBOUNCE_SAMPLE_WINDOW 5000
...
Code: Select all
static uint8_t DEBOUNCE_INDEX = 0;
static double DEBOUNCE_SAMPLE_DELAY = (double)DEBOUNCE_SAMPLE_WINDOW / (double)DEBOUNCE_MAX_SAMPLES;
static matrix_row_t matrix[MATRIX_ROWS];
static matrix_row_t matrix_2d_debouncing[MATRIX_ROWS][DEBOUNCE_MAX_SAMPLES];
......
void matrix_init(void)
{
......
// initialize matrix state: all keys off
// samples all zeroed
for (uint8_t i=0; i < MATRIX_ROWS; i++) {
matrix[i] = 0;
for(uint8_t j=0; j < DEBOUNCE_MAX_SAMPLES; j++) {
matrix_2d_debouncing[i][j] = 0;
}
}
}
......
uint8_t matrix_scan(void)
{
for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
select_row(i);
_delay_us(30); // without this wait read unstable value.
matrix_row_t cols = read_cols();
unselect_rows();
matrix_2d_debouncing[i][DEBOUNCE_INDEX] = cols;
}
DEBOUNCE_INDEX++;
if (DEBOUNCE_INDEX >= DEBOUNCE_MAX_SAMPLES) {
DEBOUNCE_INDEX = 0;
}
for (uint8_t i=0; i < MATRIX_ROWS; i++) {
matrix[i] ^= matrix[i]; // xor to all 0s
matrix[i] = ~matrix[i];
for(uint8_t j=0; j < DEBOUNCE_MAX_SAMPLES; j++) {
matrix[i] &= matrix_2d_debouncing[i][j];
}
}
// will call _delay_ms() instead if arg > ( 768 / CPU_FREQ_IN_MHz )
_delay_us(DEBOUNCE_SAMPLE_DELAY);
return 1;
}
......
Because of the physical layout on the maltron, it made more since to put the capslock on the left pinky, for me. Re-mapping it on the standard keyboard was only ever a hack. And the maltron allows for true symmetry with the modifiers. (I've never been able to touch-type the right ctrl and alt keys on the standard keyboard). And I'm a unix admin, so the the modifiers and escape are laid out for easy access in vi or emacs. And 5 and 6 are split as the should be. (I'm too used to typing ctrl-8 with my middle finger).
- vivalarevolución
- formerly prdlm2009
- Location: USA
- Main keyboard: IBM Beam spring
- Main mouse: Kangaroo
- Favorite switch: beam spring
- DT Pro Member: 0097
Cool. What was the motivation for this? Save money from the normal Maltron? Create a programmable Maltron?
If the price isn't too high and you're willing to share firmware, I might follow your lead.
If the price isn't too high and you're willing to share firmware, I might follow your lead.
- werther_de_goethe
- DT Pro Member: -
It's like being sent back for remedial typing. Movement is more conservative than a flat keyboard. I want to keep leaping too far and hit the bottom of the number row with my fingernail.seaworthy wrote: ↑Wow. Very cool and ambitious project; It would be very interesting to see a video of you typing on it once completed. Good luck buttoning it up.
- werther_de_goethe
- DT Pro Member: -
With all the customization: diodes on every switch, layout, LED placement, using mx reds, custom controller, and SP key caps, it seemed like it would be just as easy to get the thing and put it together myself as it would be to try and tell someone else to do it.vivalarevolución wrote: ↑Cool. What was the motivation for this? Save money from the normal Maltron? Create a programmable Maltron?
If the price isn't too high and you're willing to share firmware, I might follow your lead.
I plan to upload the firmware source. I'm doing a little cleaning on it at the moment.
Pricing:
(roughly)(prices include shipping within US)
£104.00 for 2 custom-punched shells (£36.00 per shell) (£32.00 shipped from UK to US. The shipping for one was the same as for two, so I said why not get two.)
$37 for usb extender and break-out board
$36 on ribbon cables and proto board
$69 on wire-wrap wire, LEDs, diodes, connectors (of course I bought a whole box of various sizes on connectors and pins, so it cost a little more than it would piece-meal.)
$87 on key caps (1 std base blank pbt, 2 number pad sets, and 2 sets of single deep dish keys)
$61 on switches and a pair of mx key top removal tools from mechanicalkeyboards.com
$10 on jb weld and aluminum bar
TOTAL: ~$450
But then of course there's the time and work. (And I've come the believe the people at maltron earn everything they get to put one together---I just spent an hour figuring out how two rows seemed to apparently this evening decide to short together near the controller and produce double key presses.) Of course, I already had wire strippers, a soldering iron, solder, flux, multi-meter, mini needle-nose pliers, clamping tweezers, a manual wire-wrap tool, heat-shrink tubing, resistors, and such.
- vvp
- Main keyboard: Katy/K84CS
- Main mouse: symetric 5-buttons + wheel
- Favorite switch: Cherry MX
- DT Pro Member: -
Nice! Pinkie columns doe not look that well accessible but very good overall. And the case is pretty cheap.
I can recommend using enamelled (magnet) wire for connecting matrices or pins on a generic PCB. No need for wire strippers. Much quicker work. For more info, read the text around the last image of this post: post247068.html#p247068
I can recommend using enamelled (magnet) wire for connecting matrices or pins on a generic PCB. No need for wire strippers. Much quicker work. For more info, read the text around the last image of this post: post247068.html#p247068
- werther_de_goethe
- DT Pro Member: -
vvp wrote: ↑Nice! Pinkie columns doe not look that well accessible but very good overall. And the case is pretty cheap.
I can recommend using enamelled (magnet) wire for connecting matrices or pins on a generic PCB. No need for wire strippers. Much quicker work. For more info, read the text around the last image of this post: post247068.html#p247068
Yes, I knew about enamel wire. If I do another one, that's probably what I'll use. The thing I'd most like to find is some right-angle 2.54mm break-away headers with extra long pins on the board side so I could wire wrap to them like I did with the atmega headers. But no luck with that yet.
- werther_de_goethe
- DT Pro Member: -
Firmware source is here.
- Attachments
-
- maltron_tenkeyless_src.tar.gz
- (6.34 KiB) Downloaded 167 times
-
- DT Pro Member: -
Is it possible to laser scan the case? Or maybe take a bunch of pictures so I could turn it into a model? That way anyone can print this themselves.
Thank you!
Thank you!