Split ergonomic keyboard project
-
- DT Pro Member: -
Oh ya... they missed that. And it's an easy thing to miss, unless you're probing around with a multimeter coz you don't know what's going on and you end up asking bpiphany about it (like I did, lol).
That bridge connects the capacitor pin closest to it with GND (the other pin is connected to Vcc via a bridge that's by default joined, on the other side of the PCB). So without the bridge, as far as I can tell, the capacitor isn't doing anything.
That bridge connects the capacitor pin closest to it with GND (the other pin is connected to Vcc via a bridge that's by default joined, on the other side of the PCB). So without the bridge, as far as I can tell, the capacitor isn't doing anything.
-
- Main keyboard: ErgoDox
- Favorite switch: Buckling
- DT Pro Member: -
I have blogged about my new ergodox keyboard. [0]
Now I just need to spend some time with this puppy and figure out a mapping that works for me.
0 - http://hairysun.com/blog/2013/04/02/oh- ... -keyboard/
Now I just need to spend some time with this puppy and figure out a mapping that works for me.
0 - http://hairysun.com/blog/2013/04/02/oh- ... -keyboard/
- sordna
- Location: USA
- Main keyboard: Kinesis Advantage LF / Dvorak layout
- Main mouse: Logitech M500
- Favorite switch: Cherry MX Red
- DT Pro Member: -
Thanks! I verified what you said by looking at the PCB, so I posted about it on MD for them to update the instructions. Funny that the PCB silkscreen doesn't have the capacitor drawn, I think bpiphany should add that. BTW the switches with integrated diodes work great with your MCP23018__DRIVE_ROWS/MCP23018__DRIVE_COLUMNS options !!!ic07 wrote:Oh ya... they missed that. And it's an easy thing to miss, unless you're probing around with a multimeter coz you don't know what's going on and you end up asking bpiphany about it (like I did, lol).
That bridge connects the capacitor pin closest to it with GND (the other pin is connected to Vcc via a bridge that's by default joined, on the other side of the PCB). So without the bridge, as far as I can tell, the capacitor isn't doing anything.
-
- Main keyboard: ms ergo 4000 (kinesis ordered, ergodox planned)
- Main mouse: some multibutton logitech thing
- Favorite switch: dunno, i'm new to this. brown and clear sound good
- DT Pro Member: -
Please everyone, stop posting about how you've got your kit and how great it is while all of us non-US customers are sitting around waiting for them to arrive in our countries. That's just mean
- sordna
- Location: USA
- Main keyboard: Kinesis Advantage LF / Dvorak layout
- Main mouse: Logitech M500
- Favorite switch: Cherry MX Red
- DT Pro Member: -
Say, how do you momentarily access Layer 0 from another layer? I'm using the MD layer generator by the way.
When I'm in Layer 0 I can momentarily access layer 1 by holding down the ~L1 button. How come there is no ~L0 button to do the equivalent when you are in Layer 1 ? Or am I missing something?
When I'm in Layer 0 I can momentarily access layer 1 by holding down the ~L1 button. How come there is no ~L0 button to do the equivalent when you are in Layer 1 ? Or am I missing something?
-
- Main keyboard: ms ergo 4000 (kinesis ordered, ergodox planned)
- Main mouse: some multibutton logitech thing
- Favorite switch: dunno, i'm new to this. brown and clear sound good
- DT Pro Member: -
I've spent the last couple of months using a kinesis countoured jobby, so I'm already converted to the way of thumb buttons. You're just rubbing it in now :bmharrison wrote:Hey, I said it was harder to type on. That should give you some comfort
-
- DT Pro Member: -
Good to hear thanks!sordna wrote:BTW the switches with integrated diodes work great with your MCP23018__DRIVE_ROWS/MCP23018__DRIVE_COLUMNS options !!!
Hmm... I don't see one either. I guess that wasn't an anticipated action . You could ask them to add one, of course - but since you're already dealing with the source, you might find it just as easy to do it yourself? What you'd do, for the key position you want to be an ~L0 is, in ".../default--layout.c" :sordna wrote:Say, how do you momentarily access Layer 0 from another layer? I'm using the MD layer generator by the way.
When I'm in Layer 0 I can momentarily access layer 1 by holding down the ~L1 button. How come there is no ~L0 button to do the equivalent when you are in Layer 1 ? Or am I missing something?
- in "_kb_layout", put the number "0"
- in "_kb_layout_press" put an unused "push" function ("lpush10" perhaps? the number has nothing to do with the layer being pushed onto the stack in the firmware, though it appears to correspond in the files generated by the massdrop configurator)
- in "_kb_layout_release" put the corresponding "pop" function ("lpop10", for example)
- ironman31
- Main keyboard: Filco Majestouch 2 w/Browns
- Main mouse: Logitech G500
- Favorite switch: Topre all-45g
- DT Pro Member: -
I got mine put together and now the O, L, '.' up column does not work. Any ideas on how I could fix this? All switches work and the diodes are all correct and work properly.
- sordna
- Location: USA
- Main keyboard: Kinesis Advantage LF / Dvorak layout
- Main mouse: Logitech M500
- Favorite switch: Cherry MX Red
- DT Pro Member: -
My solution to avoid scratching my desk is to put the screws from the bottom, and the nut at the top, since the screw heads aren't as sharp as the screw ends are It also makes it easier to open up the top plate and access the teensy. But I'll probably stick some rubber feet over the screw heads.
Hey, I wanted to ask you, does the aluminum case have the same thickness switch plate as the acrylic case? In normal keyboards, the metal plate is thin and the switch lower body "clips" lodge into it and can't be pulled out. However with the acrylic case, the material is very thick and of course the switch "clips" don't reach the edge of the plate, so switches can be pulled out. Is that the case also with the aluminum plates, or are switches securely attached to them?
Hey, I wanted to ask you, does the aluminum case have the same thickness switch plate as the acrylic case? In normal keyboards, the metal plate is thin and the switch lower body "clips" lodge into it and can't be pulled out. However with the acrylic case, the material is very thick and of course the switch "clips" don't reach the edge of the plate, so switches can be pulled out. Is that the case also with the aluminum plates, or are switches securely attached to them?
- litster
- Location: Washington State, USA
- Main keyboard: KMAC2, The Cheat
- Favorite switch: Brown, Topre, Red, BS
- DT Pro Member: -
I have not seen the aluminum case myself and I didn't design it, so I don't know how it is made. It is all Mass Drop's. For the acrylic case, since acrylic is much weaker, you can't use a 1/16" thick acrylic plate as the mounting plate because it would flex too much. All acrylic cases I have seen so far that has an integrated acrylic mounting plate have a thick mounting plate. As long as the switches are soldered correctly onto the PCB, you can't pull out the switches. Well, you could, but you would have to rip the PCB apart.
- sordna
- Location: USA
- Main keyboard: Kinesis Advantage LF / Dvorak layout
- Main mouse: Logitech M500
- Favorite switch: Cherry MX Red
- DT Pro Member: -
ic07 do you know why there is voltage on D4 and D5 on the teensy ? I put an LED between D4 and GND and it light up, dimly. I measured 1.7 volts across the LED. If I instruct the firmware to actually light it properly (doing it on a keypress) it goes to 2.6 volts and on key release back to 1.7volts.
If I don't put a LED I can measure over 4 volts even though it's supposed to be off. Any ideas?
BTW I noticed this while getting on a buzzer for clicky sounds. It worked by the way, I'm using sparkfun part number COM-07950, here is the code, "led4" is the buzzer (D5) and "led5" is an led (D4) that is lit as long as any key is held down.
Another buzzer I tried was very sensitive and made a light sound even without a keypress, any idea why the voltage doesn't drop to zero on either D4 or D5 ?
If I don't put a LED I can measure over 4 volts even though it's supposed to be off. Any ideas?
BTW I noticed this while getting on a buzzer for clicky sounds. It worked by the way, I'm using sparkfun part number COM-07950, here is the code, "led4" is the buzzer (D5) and "led5" is an led (D4) that is lit as long as any key is held down.
Another buzzer I tried was very sensitive and made a light sound even without a keypress, any idea why the voltage doesn't drop to zero on either D4 or D5 ?
Code: Select all
--- ../../src/keyboard/ergodox/controller/teensy-2-0--led.h 2013-04-01 15:06:12.000000000 -0700
+++ ./keyboard/ergodox/controller/teensy-2-0--led.h 2013-04-03 08:41:12.000000000 -0700
@@ -30,17 +30,23 @@
#define _kb_led_3_set(n) (OCR1C = (uint8_t)(n))
#define _kb_led_3_set_percent(n) (OCR1C = (uint8_t)((n) * 0xFF))
+ #define _kb_led_4_on() (DDRD |= (1<<5))
+ #define _kb_led_4_off() (DDRD &= ~(1<<5))
+ #define _kb_led_5_on() (DDRD |= (1<<4))
+ #define _kb_led_5_off() (DDRD &= ~(1<<4))
#define _kb_led_all_on() do { \
_kb_led_1_on(); \
_kb_led_2_on(); \
_kb_led_3_on(); \
+ _kb_led_5_on(); \
} while(0)
#define _kb_led_all_off() do { \
_kb_led_1_off(); \
_kb_led_2_off(); \
_kb_led_3_off(); \
+ _kb_led_5_off(); \
} while(0)
#define _kb_led_all_set(n) do { \
--- ../../src/main.c 2013-04-01 15:06:12.000000000 -0700
+++ ./main.c 2013-04-03 08:39:26.000000000 -0700
@@ -82,15 +82,21 @@ int main(void) {
#define is_pressed main_arg_is_pressed
#define was_pressed main_arg_was_pressed
for (row=0; row<KB_ROWS; row++) {
+ if (row == 0)
+ _kb_led_4_off();
+
for (col=0; col<KB_COLUMNS; col++) {
is_pressed = (*main_kb_is_pressed)[row][col];
was_pressed = (*main_kb_was_pressed)[row][col];
if (is_pressed != was_pressed) {
if (is_pressed) {
+ _kb_led_4_on();
+ _kb_led_5_on();
layer = main_layers_peek(0);
main_layers_pressed[row][col] = layer;
} else {
+ _kb_led_5_off();
layer = main_layers_pressed[row][col];
}
-
- DT Pro Member: -
I'm pretty sure it's because both D4 and D5 are initialized as inputs with internal pull up on, in .../controller/teensy-2-0.c, and it looks like your code doesn't reinitialize them. Take a look at this file (in the same directory). Probably what you want to do, is somewhere in your custome main(), after calling kb_init(), clear the 4th and 5th bits of PORTD with "PORTD &= ~(1<<4)" and PORTD &= ~(1<<5)".
Hope I got all that right... I'm on my phone right now.
Hope I got all that right... I'm on my phone right now.
- sordna
- Location: USA
- Main keyboard: Kinesis Advantage LF / Dvorak layout
- Main mouse: Logitech M500
- Favorite switch: Cherry MX Red
- DT Pro Member: -
Hmm I tried it but no luck. If I put those 2 commands after kb_init(); then they don't light up at all, they become unoperational.
If I put them before the kb_init(); call, then D4 and D5 still hame some current going into them instead of turning completely off.
If I put them before the kb_init(); call, then D4 and D5 still hame some current going into them instead of turning completely off.
-
- DT Pro Member: -
Ahhh... when you put those commands after kb_init(), it makes the pins alternate between drive-low and hi-z - so the things you're driving would have to have their other pin connected to Vcc. I feel like this is safer, in general - but since it looks from your picture like you have stuff pretty much set, you could try this in main()
and then in teensy-2-0--led.h
This will make the pins alternate between drive high (when they're turned "on") and drive low (when they're "off") - so in this case, the pin of the buzzer or LED not connected to the Teensy should be connected to GND (through a resistor of course, at least for the LED).
Code: Select all
// ... kb_init() ...
// set internal pull-up off for both pins
PORTD &= ~(1<<4);
PORTD &= ~(1<<5);
// set the pins as output
// (because we cleared the applicable PORT bits above, the pins will now be driving low)
DDRD |= (1<<4);
DDRD |= (1<<5);
Code: Select all
#define _kb_led_4_on() (PORTD |= (1<<5))
#define _kb_led_4_off() (PORTD &= ~(1<<5))
#define _kb_led_5_on() (PORTD |= (1<<4))
#define _kb_led_5_off() (PORTD &= ~(1<<4))
- sordna
- Location: USA
- Main keyboard: Kinesis Advantage LF / Dvorak layout
- Main mouse: Logitech M500
- Favorite switch: Cherry MX Red
- DT Pro Member: -
Bingo!! Changing _kb_led_on to use PORTD instead of DDRD made the new LEDs operational after the initialization! Thank you so much.
Strange why the other 3 LEDs use DDRD, as well as some register stuff that I don't understand
Strange why the other 3 LEDs use DDRD, as well as some register stuff that I don't understand
- ne0phyte
- Toast.
- Location: Germany
- Main keyboard: HHKB Pro 2
- Main mouse: Mionix Avior 7000
- Favorite switch: Topre 45g, MX Blue
- DT Pro Member: 0003
Available again!
https://www.massdrop.com/buy/ergodox-2
https://www.massdrop.com/buy/ergodox-2
-
- Main keyboard: Laptop, MS Wireless Comfort 5000
- Main mouse: Touchpad, Microsoft Wireless Mouse 5000
- Favorite switch: Cherry MX Blue
- DT Pro Member: -
Mine arrived yesterday (I'm in Canada) and I'm typing on it now! To be frank I think I would have been fine with my CM Storm, but... well, what can I say, the ErgoDox is just too cool I'm finding myself ambivalent to non-staggered layouts; while they're theoretically better I have trouble doing some common bigrams quickly. In particular, "in" is a bit of a stretch for me
FWIW, I'm pretty happy that the switches can be taken off of the plate easily if they're desoldered. I decided, after having put the caps on, that I wanted labelled caps (yanked from my CM Storm), even though I'm a good touch typist (I find this useful for the nonstandard keys as well as the home row marker on the j and f keys). The caps that were sold in the MassDrop GB are insane; they're damn near impossible to remove from the switch. I managed to actually destroy one switch so I had to desolder it and put in a new one. I'm really glad that MD included extra switches! And I had little blue flecks on my desk when I was done from all the slightly broken switches. They work, but I may have to replace them at some point.
Overall I like it. I think the thumb cluster is too far from the main keys, and I wouldn't mind some LEDs to indicate which layer I'm in. It's a pity that the tinkering cost for this is so high (PCBs and cases are expensive, and I want a nice design---no LEDs sticking out of my case! But these are, I think, some minor gripes and it's awesome to see this project come to fruition.
Now all we need is a labelled keycap GB, at least if I can get everyone to agree to my layout >:)
FWIW, I'm pretty happy that the switches can be taken off of the plate easily if they're desoldered. I decided, after having put the caps on, that I wanted labelled caps (yanked from my CM Storm), even though I'm a good touch typist (I find this useful for the nonstandard keys as well as the home row marker on the j and f keys). The caps that were sold in the MassDrop GB are insane; they're damn near impossible to remove from the switch. I managed to actually destroy one switch so I had to desolder it and put in a new one. I'm really glad that MD included extra switches! And I had little blue flecks on my desk when I was done from all the slightly broken switches. They work, but I may have to replace them at some point.
Overall I like it. I think the thumb cluster is too far from the main keys, and I wouldn't mind some LEDs to indicate which layer I'm in. It's a pity that the tinkering cost for this is so high (PCBs and cases are expensive, and I want a nice design---no LEDs sticking out of my case! But these are, I think, some minor gripes and it's awesome to see this project come to fruition.
Now all we need is a labelled keycap GB, at least if I can get everyone to agree to my layout >:)
- sordna
- Location: USA
- Main keyboard: Kinesis Advantage LF / Dvorak layout
- Main mouse: Logitech M500
- Favorite switch: Cherry MX Red
- DT Pro Member: -
It shouldn't be hard to implement a layer LED in firmware at all. And if you don't want to add LEDs on top of the case, you can program say the existing scroll lock LED.heuristicist wrote: Overall I like it. I think the thumb cluster is too far from the main keys, and I wouldn't mind some LEDs to indicate which layer I'm in.
Regarding the thumbclusters, a few folks noted that on Geeckhack as well. They are a bit hard to reach... I think it would be an improvement if they could move either down and to the right, or, by making one of the vertical keys a 1x key, just to the right. Below photo (I doctored litster's original photo) illustrates the 2 alternative solutions to improve the thumb cluster position:
- sordna
- Location: USA
- Main keyboard: Kinesis Advantage LF / Dvorak layout
- Main mouse: Logitech M500
- Favorite switch: Cherry MX Red
- DT Pro Member: -
You gave me a great idea, now I made the teensy built-in led light up whenever you are not in the main layer. Shines great through the acrylic case. My code patch includes 2 additional leds, one that momentarily lights up when a key is pressed (using it to connect a buzzer for audible feedback) and the other lights up continuously as long as any key is held down.
Wow the layer LED is so useful, highly recommended firmware mod !
Wow the layer LED is so useful, highly recommended firmware mod !
Spoiler:
-
- Main keyboard: Laptop, MS Wireless Comfort 5000
- Main mouse: Touchpad, Microsoft Wireless Mouse 5000
- Favorite switch: Cherry MX Blue
- DT Pro Member: -
Regarding the thumb cluster, I'm finding it a little bit easier if I angle the two halves a little bit more. Still not perfect, but very workable. Of your two pictures I prefer the second---it puts the innermost thumb key right under my thumb.
Regarding your patch: holy balls. This is genius. It should be merged upstream---you might want to consider submitting it on github. I've never worked with a Teensy before so it would have taken me much longer to make the change myself! Thanks so much sordna. Unfortunately now I'll have to recompile anytime I tweak the layout, but I think we can class that issue firmly in the nerd-world problems category (although the fact that I'm not used to non-staggered columns is slowing me down in the terminal...). FTR I also checked in on the Geekhack thread and only used the second patch, obviously, since I don't have anything else attached to the Teensy. I don't imagine your other code would do anything detrimental, though, from the looks of it.
Regarding your patch: holy balls. This is genius. It should be merged upstream---you might want to consider submitting it on github. I've never worked with a Teensy before so it would have taken me much longer to make the change myself! Thanks so much sordna. Unfortunately now I'll have to recompile anytime I tweak the layout, but I think we can class that issue firmly in the nerd-world problems category (although the fact that I'm not used to non-staggered columns is slowing me down in the terminal...). FTR I also checked in on the Geekhack thread and only used the second patch, obviously, since I don't have anything else attached to the Teensy. I don't imagine your other code would do anything detrimental, though, from the looks of it.
- sordna
- Location: USA
- Main keyboard: Kinesis Advantage LF / Dvorak layout
- Main mouse: Logitech M500
- Favorite switch: Cherry MX Red
- DT Pro Member: -
If you compiled with my patch, please post a photo with the layer indicator lit!
Compiling is no issue, it's an 3 extra seconds at most for me to load my layout. After downloading my layout source code, I do this into my already existing code directory:
unzip ../../user_xxx.zip keyboard/ergodox/layout/default--layout.c keyboard/ergodox/layout/default--layout.h && make
Basically I only unzip the default--layout.c and .h files, that's the only thing the massdrop configurator changes. I also have the teensy app running on my linux box, and "auto" selected, so I hit a key combo on the ergodox and it loads the new firmware immediately.
Compiling is no issue, it's an 3 extra seconds at most for me to load my layout. After downloading my layout source code, I do this into my already existing code directory:
unzip ../../user_xxx.zip keyboard/ergodox/layout/default--layout.c keyboard/ergodox/layout/default--layout.h && make
Basically I only unzip the default--layout.c and .h files, that's the only thing the massdrop configurator changes. I also have the teensy app running on my linux box, and "auto" selected, so I hit a key combo on the ergodox and it loads the new firmware immediately.
-
- Main keyboard: Laptop, MS Wireless Comfort 5000
- Main mouse: Touchpad, Microsoft Wireless Mouse 5000
- Favorite switch: Cherry MX Blue
- DT Pro Member: -
Here you go :)
Now all I need is some rubber feet and some tenting!
Now all I need is some rubber feet and some tenting!
- Attachments
-
- Layer LED closeup
- IMG_2821.jpg (386.01 KiB) Viewed 8767 times
-
- Layer LED
- IMG_2820.jpg (606.15 KiB) Viewed 8767 times