NerD60 - TMK Conversion / It works !!!

User avatar
DanielT
Un petit village gaulois d'Armorique…

10 Jul 2016, 18:02

Hmm, strange, I sure it's in the config but I'm missing it. I'm on mobile and this makes it hard for me to have a clear picture.

User avatar
scl

10 Jul 2016, 20:39

the key itself registers, i tried the magic menu and enabled matrix debug:

Code: Select all

r/c 0123456789ABCDEF
00: 0000000000000000
01: 0000000000000000
02: 0000000000000000
03: 0000000000000000
04: 0000000000000000
05: 0000000000000000
06: 0000000000000000
07: 0100000000000000
08: 0000000000000000

User avatar
DanielT
Un petit village gaulois d'Armorique…

10 Jul 2016, 20:48

So it's just a mapping issue, try and map it to something else like \| or ~`

User avatar
scl

10 Jul 2016, 20:52

scl wrote: the key itself registers, i tried the magic menu and enabled matrix debug:

Code: Select all

r/c 0123456789ABCDEF
00: 0000000000000000
01: 0000000000000000
02: 0000000000000000
03: 0000000000000000
04: 0000000000000000
05: 0000000000000000
06: 0000000000000000
07: 0100000000000000
08: 0000000000000000
i did it, it works now:

Code: Select all

const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    /* 0: Default layer
     * ,-----------------------------------------------------------.
     * |Esc|  1|  2|  3|  4|  5|  6|  7|  8|  9|  0|  -|  =|  Bspc |
     * |-----------------------------------------------------------|
     * |Tab  |  Q|  W|  E|  R|  T|  Y|  U|  I|  O|  P|  [|  ]| \   |
     * |-----------------------------------------------------------|
     * |Ctrl  |  A|  S|  D|  F|  G|  H|  J|  K|  L|Fn3|  '|Return  |
     * |-----------------------------------------------------------|
     * |Shift|  |  Z|  X|  C|  V|  B|  N|  M|  ,|  .|  /|Shift |Fn |
     * |-----------------------------------------------------------|
     * |LCtrl|LGui|Alt|      Space             |Alt |RGui|App |RCtl|
     * `-----------------------------------------------------------'
     */
    KEYMAP_ISO125(
        ESC, 1,   2,   3,   4,   5,   6,   7,   8,   9,   0,   MINS,EQL, BSPC, \
        TAB, Q,   W,   E,   R,   T,   Y,   U,   I,   O,   P,   LBRC,RBRC,BSLS,      \
        LCTL,A,   S,   D,   F,   G,   H,   J,   K,   L,   SCLN,QUOT,1,     ENT,       \
        LSFT,NONUS_BSLASH,Z,   X,   C,   V,   B,   N,   M,   COMM,DOT, SLSH,     RSFT,FN0,       \
        LCTL,  LGUI,LALT,          SPC,                     RALT,  RGUI,APP,RCTL),

Code: Select all

  #define KEYMAP_ISO125( \
          K08, K01, K10, K11, K20, K21, K30, K31, K40, K41, K50, K51, K60, K61, \
          K02, K03, K12, K13, K22, K23, K32, K33, K42, K43, K52, K53, K62, K63, \
          K04, K14, K15, K24, K25, K34, K35, K44, K45, K54, K55, K64, K71, K65, \
          K07, K79, K16, K17, K26, K27, K36, K37, K46, K47, K56, K57, K66, K67, \
          K06, K05, K78,                K70,                K72, K73, K74, K75  \
  ) KEYMAP( \
          K08,      NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO,   NO,   NO,  NO,  \
          NO,  K01, K10, K11, K20, K21, K30, K31, K40, K41, K50, K51, K60, K61,  NO,  NO,  NO,  \
          K02, K03, K12, K13, K22, K23, K32, K33, K42, K43, K52, K53, K62, K63,  NO,  NO, NO,  \
          K04, K14, K15, K24, K25, K34, K35, K44, K45, K54, K55, K64, K71, K65,                 \
          K07, K79, K16, K17, K26, K27, K36, K37, K46, K47, K56, K57, K66, K67,        NO,       \
          K06, K05, K78,                K70,                K72,  K73, K74, K75,  NO,  NO,  NO   \
  )
i inserted k71 near K65 (was: NO). now it works, "close enough" :)

thanks for your help :)

User avatar
DanielT
Un petit village gaulois d'Armorique…

11 Jul 2016, 11:31

Cool, I'm glad it worked out :)

User avatar
scl

17 Jul 2016, 18:30

Hey guys, i have another question: how can i control the indicator LED? i'd like to use the LED as a layer indicator.

User avatar
DanielT
Un petit village gaulois d'Armorique…

17 Jul 2016, 18:51

I don't have a clue. I know it works for Caps Lock. I think it's doable from the code to map it to do anything, I've said for some time that I will have a look for more options, but I'm no C guru, I know enough to get around. Someone with good programming skills could extend the code and help with new features.

ocodo

25 Aug 2016, 19:45

I've been playing with QMK for the NerDTKL this evening, and it's currently not working. It's late now, so I'll post details later.

If anyone would like to take a look, I've pushed the code to https://github.com/jasonm23/qmk_firmwar ... do-NerDTKL

ocodo

25 Aug 2016, 19:46


User avatar
kekstee

20 Sep 2016, 22:57

I have an issue with the caps lock indicator. Backlighting works fine, but I just cannot toggle the caps light with either the default led_set function based on it's state or by coupling it to layer activation.

Given the standard tmk firmware, with working LEDs installed in every key as confirmed by backlighting - is there anything I have to do to get the caps LED to toggle for something?

User avatar
DanielT
Un petit village gaulois d'Armorique…

21 Sep 2016, 06:12

In NerD60 PCB the Caps Lock indicator LED is not the in-switch LED but the one between Caps and W . Only that one can be used, at least with the default stuff. Just making sure this is not the issue :)

User avatar
kekstee

21 Sep 2016, 11:45

I only just managed to figure that out from some GON thread over at geekhack. So yeah, I'm stupid. I guess the good news is that I can stop worrying and just use it. :)

(I always assumed those pinouts to be completely related to bluetooth stuff, but it actually makes sense that they are the indicators for use with GON plates)

User avatar
DanielT
Un petit village gaulois d'Armorique…

21 Sep 2016, 11:49

It's normal to be a little confusing, from all the custom PCB's I think only NerD boards have extra pins for Caps. I find it a nice feature, that way you get backlight on all switches and have a separate indicator for Caps.

RavenII

23 Oct 2016, 16:49

How did you guys manage to get different backlight levels? I was only able to achieve on and off...

User avatar
DanielT
Un petit village gaulois d'Armorique…

23 Oct 2016, 16:59

Well...we didn't :( I wanted to take a dive into that part but had other things to worry about. Some say QMK has support for fancy lights, but again no time.

RavenII

24 Oct 2016, 20:17

Ah, crap. Yeah I've been trying to look through the code to hack something together, but I'm not a programmer, so I don't even know where to begin....it was a few hours of trial and error....resulting in more errors than anything. Oh well.

User avatar
kekstee

29 Oct 2016, 13:50

The only thing I modified for the NerD so far is turning off backlight during suspend.
The changes are fairly small and visible in my github fork: https://github.com/kekstee/tmk_keyboard

FAILix

10 Feb 2017, 09:19

Hi guys,
I just finished building my Nerd60 board from the recent LeandreN GB two weeks ago.
Now I would love to follow the awesome Guide you provided to flash a new firmware on it to be able to use some advanced functions like one-shot modifiers, etc.

I already got the USBavr, cables etc. ready.

Now I am just wondering if someone was already able to flash the Nerd60 with QMK instead of TMK.

I do not really need QMK for this board, but I am having a KBD75 coming that will have RGB underglow and in-switch LEDs. I figured that QMK will offer some more options regarding those. So I would prefer to use QMK on both boards, so I only have to learn the ropes of one of the two.

So can someone confirm that I can also flash QMK to the board after flashing the new bootloader?

Thanks a lot for providing the tutorial and helping out, since before finding this, I was almost considering to sell the Nerd60 for a GH60.

User avatar
DanielT
Un petit village gaulois d'Armorique…

10 Feb 2017, 09:43

Yes, QMK works too, MrRooks did a fork of QMK for NerD60 and had success with installing this firmware.
This is the link to his GitHub repo : https://github.com/MrRooks/qmk_firmware
You you are able to add new features please share them ! It would be nice to have fancy lights controls for NerD60 like pulsating lights, control of the underglow etc ... 8-)

I'm glad that people are finding this guide useful ;)

FAILix

10 Feb 2017, 10:01

That is great news, thanks DanielT.

I think before I come up with anything new, I'll be happy if I get the basics to work.

What I want to try later for this board, is to get some layer indicator LEDs set up.
But first I need to learn the ropes of QMK and get it on the board ;)

User avatar
DanielT
Un petit village gaulois d'Armorique…

10 Feb 2017, 10:02

You're welcome!
Wish you good luck with this and don't forget to share. It would so cool to have new features added to NerD boards, because these are really great.

mauin

12 Feb 2017, 12:02

Thanks so much for your guide DanielT!

I've spent my last weekend flashing the stock bootloader onto my NerD60 and trying to get QKM working on the board. I was successful in the end and the files are now available in the main QMK repo: https://github.com/qmk/qmk_firmware/tre ... ds/gonnerd (I took the liberty to link to your guide in the readme)

Haven't played around with backlighting (as my build doesn't use any LEDs) but keymap wise everything seems to work perfectly.

User avatar
DanielT
Un petit village gaulois d'Armorique…

12 Feb 2017, 16:24

That is very cool :) Maybe now that there is a working branch for NerD in GMK more people will contribute. NerD PCBs have a lot of potential and it would be nice to see more features added.

FAILix

16 Feb 2017, 07:37

I am still trying to get everything set up in qmk for my Keymap before I try to unlock the bootloader. By now I was not able to find the fitting Keymap for the "nerd.c" that represents the columns/rows of my layout (us-ansi split backspace and split right shift) can someone of you maybe give me a hint?
This should be my Keymap.c:

Code: Select all

  #include "nerd.h"

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = KEYMAP_60( /* Base */
    KC_ESC,        KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS,    KC_EQL,    KC_BSLS,    KC_GRV,\
    KC_TAB,        KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_LBRC,    KC_RBRC,               KC_DEL,\
    OSL(1),        KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT,    KC_NO,                 KC_ENT,\
    OSM(MOD_LSFT), KC_NO,   KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH,    MT(MOD_LSFT,KC_RALT),  TO(2), \
    OSM(MOD_LCTL), KC_LGUI, OSM(MOD_LALT),                      LT(4, KC_SPC),                      KC_RALT, KC_APP,     MO(3),                 KC_RCTL),
[1] = KEYMAP_60( /* Funcion */
    KC_TRNS,   KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,     KC_F10,   KC_F11,   KC_F12,   KC_TRNS,  KC_TRNS,\
    KC_TRNS,   KC_PGDN, KC_UP,   KC_PGUP, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, KC_UP,   KC_PGDN,   KC_PSCR,  KC_SLCK,  KC_PAUS,            KC_BSPC,\
    KC_TRNS,   KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS, KC_HOME, KC_LEFT, KC_DOWN, KC_RIGHT,  KC_DEL,   KC_INS,   KC_NO,              KC_TRNS,\
    KC_TRNS,   KC_NO,   KC_TRNS, KC_DEL,  KC_TRNS, KC_TRNS, KC_TRNS, KC_END,  KC_MUTE, KC_VOLD,   KC_VOLU,  KC_TRNS,  KC_TRNS,            KC_TRNS,\
    KC_TRNS,   KC_TRNS, KC_TRNS,                        KC_BSPC,                                            KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS),

[2] = KEYMAP_60( 
    KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,\
    KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,\
    KC_CAPS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_NO,  KC_TRNS,\
    KC_TRNS,KC_NO,  KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_UP,  KC_TRNS,\
    KC_TRNS,KC_TRNS,KC_TRNS,                        KC_SPC,                         KC_TRNS,KC_LEFT,KC_DOWN,KC_RGHT),

[3] = KEYMAP_60( 
    RESET,  KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,\
    KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,\
    KC_CAPS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_NO,  KC_TRNS,\
    KC_TRNS,KC_NO,  KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,\
    KC_TRNS,KC_TRNS,KC_TRNS,                        KC_SPC,                         KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS),


[4] = KEYMAP_60( 
    KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,\
    KC_TRNS,KC_TRNS,KC_TRNS,  KC_UP,KC_TRNS,KC_TRNS,KC_TRNS,KC_BTN1,KC_MS_U,KC_BTN2,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,\
    KC_CAPS,KC_BSPC,KC_LEFT,KC_DOWN,KC_RGHT,KC_TRNS,KC_TRNS,KC_MS_L,KC_MS_D,KC_MS_R,KC_DEL, KC_TRNS,KC_NO,  KC_TRNS,\
    KC_TRNS,KC_NO,  KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,\
    KC_TRNS,KC_TRNS,KC_TRNS,                        KC_SPC,                         KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS),

};

const uint16_t PROGMEM fn_actions[] = {

}; 

mauin

16 Feb 2017, 08:21

Split right shift should work correctly. However I see the problem with the split backspace. None of the keymaps I see in the QMK or TMK repository seem to really account for this so you end up with one more key than the keymap definitions provide.

As I don't have that layout on my board it's hard for me to test. Maybe K69 is still on the 60% layout for the split backspace or one of the extra inputs for split enter/split left shift can also map to the split backspace. But I think you need to make adjustments to the main matrix layout for this to work.

FAILix

16 Feb 2017, 20:47

I will now try to figure out if I can find the right place for it in the matrix with the wiring configurator from qmk.sized.io
There you can see more easily what might make sense. Also i tested to put that one to 69 but the configurator refused that and put it on 68 instead. So i think this tells me that 69 is not correct.

If I look at it, other options that might make sense are 71, 79 and 68.
Or, something different would be to start with K00 for Esc in the top row and go from there. Because in the TKL keymap there is K00 in the first position in that row, instead of K01. then the alternating 00,01,10,11,20,21,... sheme of the top row would make sense again.

I think I will get everything else set up right now and prepare different .hex files for the options and then just try them out.

If I don't get any of them work, as a temporarily last resort I might just switch back to the standard BSPC layout.
I don't need the additional key anyway...I just think it looks better/more symmetrical.
Since I used Holtites on the board it won't be a problem to do that at all.

User avatar
kekstee

17 Feb 2017, 23:07

Just decided to have a look at this. The obvious candidates were K00 and K71.

K63 is shared for ANSI \ (BSLS) and the ISO # key next to Enter (NUHS)
K79 is the short left shift ISO \ key (NUBS)
K71 is used on the HHKB \ position

So a KEYMAP definition based on the board layout could look like this:
keymap_common.h

Code: Select all

  #define KEYMAP_60( \
          K08, K01, K10, K11, K20, K21, K30, K31, K40, K41, K50, K51, K60, K71, K61, \
          K02, K03, K12, K13, K22, K23, K32, K33, K42, K43, K52, K53, K62, K63, \
          K04, K14, K15, K24, K25, K34, K35, K44, K45, K54, K55, K64,      K65, \
          K07, K79, K16, K17, K26, K27, K36, K37, K46, K47, K56, K57, K66, K67, \
          K06, K05, K78,                K70,                K72, K73, K74, K75  \
  ) KEYMAP( \
          K08,      NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO,   NO,  NO,  NO,  \
          NO , K01, K10, K11, K20, K21, K30, K31, K40, K41, K50, K51, K60, K61,  NO,  NO,  NO,  \
          K02, K03, K12, K13, K22, K23, K32, K33, K42, K43, K52, K53, K62, K63,  NO,  NO,  NO,  \
          K04, K14, K15, K24, K25, K34, K35, K44, K45, K54, K55, K64, K71, K65,                 \
          K07, K79, K16, K17, K26, K27, K36, K37, K46, K47, K56, K57, K66, K67,       NO,       \
          K06, K05, K78,                K70,                K72, K73, K74, K75,  NO,  NO,  NO   \
  )
Using this for ISO would look like this

Code: Select all

    [0] = KEYMAP_60(
         ESC,   1,   2,   3,   4,   5,   6,   7,   8,   9,   0,MINS, EQL,  NO, BSPC, \
         TAB,   Q,   W,   E,   R,   T,   Y,   U,   I,   O,   P,LBRC,RBRC,NUHS, \
        CAPS,   A,   S,   D,   F,   G,   H,   J,   K,   L,SCLN,QUOT,      ENT, \
        LSFT,NUBS,   Z,   X,   C,   V,   B,   N,   M,COMM, DOT,SLSH,RSFT, FN0, \
        LCTL,LGUI,LALT,           SPC,                    NO  ,RALT,RGUI,RCTL),
and the HHKB with regular Ctrl like this

Code: Select all

    [0] = KEYMAP_60(
         ESC,   1,   2,   3,   4,   5,   6,   7,   8,   9,   0,MINS, EQL,BSLS, GRV, \
         TAB,   Q,   W,   E,   R,   T,   Y,   U,   I,   O,   P,LBRC,RBRC,BSPC, \
        CAPS,   A,   S,   D,   F,   G,   H,   J,   K,   L,SCLN,QUOT,      ENT, \
        LSFT,  NO,   Z,   X,   C,   V,   B,   N,   M,COMM, DOT,SLSH,RSFT, FN0, \
        LCTL,LGUI,LALT,           SPC,                      NO,RALT,RGUI,RCTL),
(both split right shift, tsagan bottom row)

//e
pushed the changes to my github: https://github.com/kekstee/tmk_keyboard ... board/nerd

FAILix

21 Feb 2017, 08:48

Thank's a lot for your help Kekstee.
With the help of your findings I have created a keymap in QMK with my layout.
After adjusting some stuff it compile without errors.

So I would like to flash my bootloader and try to load the new .hex on the boaard this evening.
Since this is the only board that I own right now, I would like to have it running without having any stupid failures set up in my layout after flashing the bootloader.

Maybe someone of you who is more experienced with tmk/qmk might be so kind to have a quick look at my qmk setup to check if there are any bugs in there that did not get noticed when compiling it to the .hex file?

I would really appreciate the help, since I am very new to all of this.

Here is the link to the qmk fork on github where I made the changes: https://github.com/oFAILIXo/qmk_firmwar ... ds/gonnerd

My keymap is in the /keymaps/oFAILIXo/ folder.

User avatar
kekstee

24 Feb 2017, 10:01

I think gonnerd.h might be off.

The KEYMAP_TKL block in your KEYMAP_60 definition does not have the same layout as the KEYMAP_TKL definition above. K71 should be next to enter in there. It is supposed to look the same with every unmapped key set to NO.

Other than that it seems fine at a glance.
You could place the K71 key anywhere in the KEYMAP_60 defintion btw, you just have to remember where everything went to design your layout later :D

Also it's a good thing to always have the bootloader reset keybind available, (LSFT, RSFT and PAUS in tmk) since my NerD v2.10 fails to reset into the bootloader when shorting the GND and RST pins on board. I talked to Daniel about this, it seems to be a common problem with PCB revisions above v1.60

User avatar
DanielT
Un petit village gaulois d'Armorique…

24 Feb 2017, 10:59

Yeah, I think the reset thing is related to the position change of the ISP headers on the newer versions of the PCB. On the older ones where the ISP headers are under the spacebar I have no problem.
I have managed to reset newer PCB's, but on a random basis

Post Reply

Return to “Workshop”