这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » 【极简版GH60】【和拓荒犬一起做最精简的GH60】【GH60剖析】(25264

共16条 1/2 1 2 跳转至

【极简版GH60】【和拓荒犬一起做最精简的GH60】【GH60剖析】(252642555的进程贴)

菜鸟
2015-12-26 23:49:22     打赏

组件的选购


      由于申请的时间比较晚,加上由于卖家疏忽给我漏发了一个USB母座,所以导致我12.25才集齐全部的零件,完成GH60。


      由于我本人比较追求简单,所以在申请的时候就明白我心目中的GH60是怎么样的。首先,本人对于灯光并没有要求,因为使用的环境都比较明亮,而且盲打也不需要看着键盘,所以灯光就变得没有必要了。


     然后是轴的选择,因为本人都是用于码字和码代码,所以还想选用克数比较轻的轴,最后还是决定使用红轴,因为喜欢樱桃3494的手感。所以要不要钢板也确定下来了,最终选择了红轴不带钢板。因为觉得长期打字的话还是克数比较轻会舒服一点。


     接下来是比较不重要也是比较重要的键帽和壳,因为比较追求质感,所以必须上PBT,原本是想要HHKB那种灰白的混搭配色的,不过好像得买两套才能这样配出来,所以后来选择激光的灰色侧刻的PBT键帽,壳的话配就选择了普通的白色壳,因为不打算上灯,所以透明壳和乳壳也没有多大必要了。


下面是购物清单:



     两家报上EEPW的名的话都有少许优惠,还是挺好的。橡胶环并没有什么作用,只是顺带买来玩玩,大家可以按自己的需要选购。这里建议多买几个开关轴,或者黑轴什么的,给空格键使用。





比较无语的是竟然给我漏发最重要的USB母座,而且这里是公司,也找不到这小玩意儿,学校实验室一抓一大把,所以耽误了好几天




最终效果图




关键词: 极简版     进程     剖析     精简    

菜鸟
2015-12-26 23:55:30     打赏
2楼

原理图的分析


说完了配件的选择,下面分析下原理图,因为我要做的是极简的GH60,所以PCB上的原件有很多都不需要焊上去,我们来分析下GH60revQE原理图。

首先可以看到大概有61个按键,然后每个按键由一个轴,一个LED,一个330欧电阻,一个二极管。因为330欧电阻是LED的限流电阻,所以我的极简版GH60就不需要LED330R了,只需要焊轴和二极管,二极管在这里起到一个按键无冲突的作用。


然后Jump4是为了实现LED的功能,所以上面的原件PMOS和电阻都不需要焊,单片机和晶振是大脑,这是必须要的,USB母座是和电脑连接的接口,也十分重要,当初就是因为缺了这个接口导致我的项目再昨天才能收工。

然后是电容,C4-C8四个电容是电源的滤波电容,让电压稳定没有交流,c1c2是晶振的电容,让频率稳定。

剩下MCUUSB接口接的电阻是按照Datasheet的要求标配的,原理图很简单,就这么一些原件,当然,如果要玩灯的话就得多几个模块了。因为我们要做的是极简GH60,所以这里就不涉及这些了。



菜鸟
2015-12-27 00:02:35     打赏
3楼

贴片元件的焊接


      接下来到元件焊接,焊接先由低到高,先焊MCU、贴片原件,可以先不焊二极管,然后可以焊上usb母座连接电脑刷固件看是否有问题。没有问题之后可以焊上二极管,330R电阻就不需要了,因为没有用到LED。










      焊好后可以用镊子短路按键,以测试按键二极管有无问题。我测试的结果是这样的,说明一切正常,测试Fn键的方法是Fn+Esc,看是否可以输出左上角的按键。







到现在,说明键盘的整体是可以工作的,只是缺少开关而已,那就是一个个的轴了,下面,我们就要安最核心其实也就是一个个开关的轴了。


菜鸟
2015-12-27 00:20:25     打赏
4楼

     轴的安装与焊接



      没问题后就可以安微星轴了,当时拿到卫星轴我还琢磨了一会儿,因为拿到的是散件,琢磨了一番才知道怎么样把他们装配到一起,装配好后反过来是这样的话是好着的,如果装好后是这样表示里面那个小塑料装反了。卫星轴需要比较大力才可以按下去,这里建议不要用镊子或者硬物去压,不小心会刮伤,建议用软塑胶什么的。



安装好后应该是这样,可以伸出了一长截



用力按进去后应该倒立应该可以正常垂下,这里不得不吐槽一下,卫星轴快20一套,竟然很多水口料,比较粗糙,希望质量和润滑度可以加强。


这样就是平时的状态,缩下去是正常的


      安装好后就可以上红轴了,因为我不用钢板,所以这里用的是五角轴,因为原厂轴断货了,只好买G家的了。

 

      焊接红轴没有什么难道,需要注意的是轴是否按到底了,是否紧贴PCB,这样可以避免轴不正。


其中Caps Lock键位的孔开得有点小,需要用烙铁烫小一点,对PCB扩孔也是可以的,不过怕伤害pcb了,比较质量比较,嘿嘿,你懂的。



      还有就是GH60为了让用户可以更加地自定义键盘,所以个别键预留了2-3种孔位,用户可以在这两种或三种孔位中挑选一个孔位安装,这里最保险的方法就是用户用自己买来的键帽安上轴后去试一试孔位,这样就可以得出正确的孔位了。




然后还是连接电脑,测试按键,这里我也是一次通过。

 




菜鸟
2015-12-27 00:32:45     打赏
5楼

壳和键帽的装配



       既然没有什么问题了,下面就可以装壳上螺丝了, 上好键帽后,这样我们极简GH60的硬件部分就完成了,连接USB数据线,就是一个实用的小键盘了。



        这里我用的USB数据线是TI原厂的MSP430开发板数据线,只要质量不是太次的数据线都没有问题。也许这样一把看起来很普通,没有灯光的酷炫效果的GH60看起来并不是一把合格的GH60,但是,适合自己的就是最好的,这也是DIY精神的精髓,可以自定义,符合自己的需求。




OK,普通极简版GH60get,下面我们来修改修改软件部分吧。



菜鸟
2015-12-27 00:41:18     打赏
6楼

修改配列——最基本的软件修改



说完了GH60的硬件部分,接下来到软件部分,我觉得,软件部分才是极简版GH60的精髓部分,毕竟仅有硬件的话GH60只是一个有手感可以按动的一堆没有功能的按键,而软件让他变成了灵活多变的键盘。通过对软件的修改,我们只需要改一些bit,就可以让键盘实现许多种功能,正是这种编程的思想让计算机变得如此强大。我们可以通过编程,使得我们按一个按键键盘就可以替我们完成一系列的操作(比如说输入密码),就算哪天密码改了,我们还可以再次修改,十分灵活。


当然,我们不可能一口气吃成一个大胖子,下面先让我们从简单的开始,先尝试修改一个按键,由于我的键帽在官方的RWin键上面是Menu,所以我们想把RWin改成Menu,让大家熟悉整个Flow。



首先,第一个网站是http://www.keyboard-layout-editor.com/#/layouts/7d55431c8a8d9f9bf94b6f6af8ce7c12

在里面我们自定义我们的键盘,它会自动给我们生成相应代码



这里,我修改RWin,让他变成Menu

然后选择Raw data,复制所有的代码


然后,打开http://www.enjoyclick.org/tkg/


选择简单,然后粘贴代码,Fn0改成如图所示


由于没有灯所以我全关闭了,其实无所谓,因为是断路的


接下来生成.eep文件,就是eeprom的二进制文件,是网站已经汇编好了的二进制文件。


拖动文件到reflash.bat,打开烧录软件,然后复位一下,就可以烧录进去了。


到此为止,我们简单地修改配列就完成了,下面我们挑战复杂一点的,直接分析原码,修改代码,自己编译文件。


这个是我自己用的配列,FGH我设置的是:prev/play/next,然后Fn1~Fn3的位置我排列了一下,给L多加了一个Ins,并没有大改,后面我重点讲一讲宏设置。


菜鸟
2015-12-27 00:42:50     打赏
7楼

软件部分进阶篇(分析源代码)


接下来,我们研究我们的程序,看下怎么可以使得键盘可以一键输入密码。

首先,https://github.com/tmk/tmk_keyboard,这里有几乎所有的固件源码,新手可能一看会头大,大家应该还记得http://www.keyboard-layout-editor.com/#/layouts/7d55431c8a8d9f9bf94b6f6af8ce7c12这个网站吧。


没错,这个就是简单改配列的网站,我们依然可以利用它来生成代码,然后我们依然要用到http://www.kaiserver.com/tkg/这个网站,不过,这次我们需要生成.c文件而不是编译过后的.eep文件。


然后我们来看一下生成的.c文件。

    [0] = KEYMAP_TKG(
        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, \
        CAPS,A,   S,   D,   F,   G,   H,   J,   K,   L,   SCLN,QUOT,     ENT,  \
        LSFT,     Z,   X,   C,   V,   B,   N,   M,   COMM,DOT, SLSH,     RSFT, \
        LCTL,LGUI,LALT,          SPC,                     RALT,FN0, APP, RCTL),



    [1] = KEYMAP_TKG(
        GRV, F1,  F2,  F3,  F4,  F5,  F6,  F7,  F8,  F9,  F10, F11, F12, DEL,  \
        TRNS,TRNS,UP,  TRNS,TRNS,TRNS,CALC,TRNS,INS, TRNS,PSCR,SLCK,PAUS,TRNS, \
        TRNS,LEFT,DOWN,RGHT,TRNS,TRNS,TRNS,TRNS,TRNS,INS, HOME,PGUP,     TRNS, \
        TRNS,     TRNS,TRNS,FN1, FN2, FN3, VOLD,VOLU,MUTE,END, PGDN,     TRNS, \
        TRNS,TRNS,TRNS,          TRNS,                    TRNS,TRNS,TRNS,TRNS),



    [2] = KEYMAP_TKG(
        NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO,   \
        NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO,   \
        NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO,       NO,   \
        NO,       NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO,       NO,   \
        NO,  NO,  NO,            NO,                      NO,  NO,  NO,  NO),


很明显,这是我们刚刚配列的三层设置


然后,最后的   

    [0] = ACTION_LAYER_MOMENTARY(1),
    [1] = ACTION_MACRO(),
    [2] = ACTION_MACRO(),
    [3] = ACTION_MACRO(),


是我们研究的重点,这四条语句分别代表着Fn0~Fn3,ACTION_LAYER_MOMENTARY(1)意思是瞬时切换到第1层(第二层),然后ACTION_MACRO()可以给我们添加宏。下面,我将会教会大家如何设置自己的宏。



菜鸟
2015-12-27 00:45:08     打赏
8楼

增加一键输入密码(邮箱)功能


有一些高频率的输入字符串,我们可以写入到源代码中,让键盘可以替我们输入,比如说我们的密码、我们的用户邮箱等等,这样可以提高我们的效率。


我们先看看K大给的文档,里面有

Build firmware
--------------
### 1. Open terminal
Open terminal window to get access to commands. Use Cygwin(or MingGW) `shell terminal` in Windows or `Terminal.app` on Mac OSX. In Windows press `Windows` key and `R` then enter `cmd` in 'Run command' dialog showing up.

### 2. Change directory
Move to project directory in the firmware source.

cd tmk_keyboard/{'keyboard' or 'converter'}/

### 3. Make
Build firmware using GNU `make` command. You'll see `_.hex` file in that directory unless something unexpected occurs in build process.

里面很清楚地讲解了制作固件的步骤。

第一步,打开调试终端,在Windows下面就是打开cmd,然后第二步就是cd到tmk_keyboard/{'keyboard' or 'converter'}/这个目录,比如说GH60就是\tmk_keyboard_custom-master\keyboard\gh60这个目录。

然后使用make -f Makefile.clean
make -f Makefile.
命令就可以生成一个_.hex文件,我们就可以把它烧录进去了。


我们可以看到GH60下面有keymap_hhkb.c等很多keymap_打头的c文件,我们把下载得到的c文件加上_xxx后缀就好了,然后放到GH60目录下面。


Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `keymap_.c` and see keymap document(you can find in top README.md) and existent keymap files.

To build firmware binary hex file with a certain keymap just do `make` with `KEYMAP` option like:

$ make KEYMAP=[poker|poker_set|poker_bit|plain|hasu|spacefn|hhkb|]
按照文档里面的说法,我们只需要 $ make KEYMAP =就可以了。

回到

[1] = ACTION_MACRO(),
[2] = ACTION_MACRO(),
[3] = ACTION_MACRO(),

这三条语句,我们需要给他们加上自己写的函数、

首先在keyboard文件夹下面搜索ACTION_MACRO,找到一个keymap_hasu.c里面有这个语句使用,

[8] = ACTION_MACRO(ALT_TAB),                      // Application switching

//  [x] = ACTION_MACRO(HELLO),                          // Macro: say hello
//  [x] = ACTION_MACRO(VOLUP),                          // Macro: media key


/*
* Macro definition
*/
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
switch (id) {
case HELLO:
return (record->event.pressed ?
MACRO( I(0), T(H), T(E), T(L), T(L), W(255), T(O), END ) :
MACRO_NONE );
case VOLUP:
return (record->event.pressed ?
MACRO( D(VOLU), U(VOLU), END ) :
MACRO_NONE );
case ALT_TAB:
return (record->event.pressed ?
MACRO( D(LALT), D(TAB), END ) :
MACRO( U(TAB), END ));
}
return MACRO_NONE;
}

照猫画虎:

[1] = ACTION_MACRO(PASSWORD1),
[2] = ACTION_MACRO(MAIL),
[3] = ACTION_MACRO(PASSWORD2),

const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
switch (id) {
case PASSWORD1:
return (record->event.pressed ?
MACRO( I(0), T(H), T(E), T(L), T(L), W(255), T(O), END ) :     //密码改T()括号里面的字符,下同
MACRO_NONE );
case MAIL:
return (record->event.pressed ?
MACRO( I(0), T(H), T(E), T(L), T(L), W(255), T(O), END ) :
MACRO_NONE );
case PASSWORD2:
return (record->event.pressed ?
MACRO( I(0), T(H), T(E), T(L), T(L), W(255), T(O), END ) :
MACRO_NONE );
}
return MACRO_NONE;
}

这里我使用了两个密码,一个邮箱名,大家按自己所需改T()

case MAIL:
return (record->event.pressed ?
MACRO( I(0), T(p), T(a), T(l), T(e), T(2), T(5), T(2), T(6), T(@), T(f), T(o), T(x), T(m), T(a), T(i), T(l), T(.), T(c), T(o), W(255), T(m), END ) :
MACRO_NONE );
我不知道这个W(255)等待时间是要每隔4个等待一次还是最后等待一次就可以了,现在先试一下最后等待一次,这里我的邮箱是pale2526@foxmail.com,大家可以看到。

然后我发现在Windows下面用cmd或者powershell都出报错,看了make还需要在linux或者缺少什么组件,待研究待更



助工
2015-12-28 23:40:58     打赏
9楼
围观软件大神带我们学习源码,嘿嘿嘿,也正想着弄个层玩玩呢

菜鸟
2016-01-05 16:42:44     打赏
10楼
都不给我加精,没有更新的动力了~~~~~~~~~~~~~~

共16条 1/2 1 2 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]