这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » 【纯水小白玩键盘】KingCloud的GH60进程(staryu简单教程+震撼发

共15条 1/2 1 2 跳转至

【纯水小白玩键盘】KingCloud的GH60进程(staryu简单教程+震撼发布默认八种灯效的移植代码-适用于keng板,JB板)

助工
2015-10-08 22:11:11     打赏
首先作为一个高中狗,我其实是个大水怪,就会玩玩游戏,电路啥的也算基本不懂。感谢去年一个偶然的机会,认识了eepw这个论坛,还有xiudi、小撸等好多好多技术大神。作为一个游戏玩家,我对电脑外设也有着追求。先是看过了LJB在空间里发的键盘图,就深深的被吸引了,参加了本次活动。也在这里感谢eepw论坛以及各位大神小白的陪伴与帮助。

那么就先发一张完成了的键盘作品图,手机拍照质量……就请各位不要吐槽了吧。

传送门


开箱+周边采购

焊接+测试

LED热插拔灯座的安装

键帽安装+灯光配色

键盘成品展示

外接灯控板(keng板)焊接

灯控板(keng板)参考资料

配合代码详解keng板

Arduino平台分析wlbxcj大神的i2c固件

JB板软件框架总思路

震撼发布默认八种灯效的移植代码

staryu玩耍记录






关键词: 小白     键盘     败家King     进程    

助工
2015-10-08 22:34:31     打赏
2楼
开箱+周边器件采购

其实我在14日就收到了pcb,但是由于种种个人(逗比的)原因,拖到了今天才搞完键盘。废话不多讲,先看看拆箱图吧。

胖玲的包装很给力(虽然对于暴力快递来说有点单薄),包的还严实。



pcb+元件全家福


漂亮的沉金EEPWlogo,恨不得拿牙咬一咬。

可爱的小撸logo

键帽买的4X元普通白色键帽

键轴买的老鸨家的三角Cherry红轴。外壳、卫星轴和led热插拔灯座也在老鸨家买的。


led小灯由xiudi介绍购买的

由于我买的是三角轴,必须使用定位板,所以在淘宝上买了定位板。大家买的时候一定要提醒卖家好好包装!我因为钢板折弯的问题拖延了一个周才解决。



在这里提醒大家,如果用老鸨家的那个焊锡焊键盘,最好买个三四个,免得到时候焊锡没了要像我一样东跑西跑买焊锡。



助工
2015-10-08 22:46:25     打赏
3楼
焊接+测试

前面提到过,我是小白,这算是我这辈子活到现在第一次动手焊接,难免出错。搞砸了USB口,各种短路、掉焊盘,万般无奈我想起了我的好基友-LJB[滑稽][滑稽]。于是快递了过去让他帮帮忙,在这里也是谢谢LJB的无私帮助。


LJB还顺便帮我搞了一块keng板,果然是好基友


虽然LJB帮我完成了pcb贴片的焊接,但是键轴还是需要自己焊接。
注意在焊接大键位部分的时候,板子上的重影很有可能会影响到焊接。为了保险起见,败家King提醒大家最好在焊大键位的时候,盖上键帽比对着,免得最后因为配列问题要反复折腾。

附上一张焊接完毕的图片




键盘测试通过。




助工
2015-10-09 12:47:27     打赏
4楼
LED热插拔灯座的安装 各位大神写得热插拔灯座的安装我等小白也是看的云里雾里,搞不明白到底是怎么做。那么就由我以一个小白的视角来为大家发一个LED热插拔灯座的安装吧


首先这是我们可爱的cherry红轴。

我们需要用镊子顶开两侧的钩角。


当两侧都顶开之后,我们就可以用手直接拿下轴盖。于是我们就看到了红轴的内部结构。

本人拍照技术是在渣,不能完美表现红轴里面的结构,就用网上搜来的gif代替一下吧。



打开了轴盖之后把轴体和弹簧清清取出,留下弹片。注意不要挤压弹片导致变形。



用镊子夹好灯座放到轴座前面预留的小孔里面。


【强迫症请自觉换楼】完成图。由于这个灯座有点小高,我是卡着装的。其实不卡着装也行,只是焊接的时候需要手扶着而已。具体问题可以咨询xiudi。






助工
2015-10-09 22:48:56     打赏
5楼
键帽安装+灯光配色

键帽的安装不用多说,照着其他键盘的配列装就可以了。但是右下角部分每个人刷的键都不一样,根据各自的键位功能装就可以了。左上角的那个键默认是ESC,所以装ESC的话能比[~]顺手一些。

贴上我的键帽安装方案给大家作为参考

当然个人观点,请各位轻喷。

板子led也是有坑,右下角那三个键和其他的键led正负比起来正好是反的。  PCB正放,左正右负;右下角三个是左负右正。希望大家注意一下,避免不必要的折腾。

那么在这里请允许我贴上 小撸 的在线键帽配色工具
地址如下http://h.0w0.pw/keyboard-color.html


为大家提供一些配色参考方案










我自己用的配色方案就是第一张。



助工
2015-10-10 22:07:17     打赏
6楼

键盘成品展示


先来一个图片展示


再来一个视频展示

——回复可见内容——

键盘默认的灯光效果一共有8种。Fn+V是开启,Fn+C是前一个灯光效果,Fn+B是后一个灯光效果。注意灯效只能按顺序切换,切换到最后一种灯效了之后是无法继续往下换的(也就是说只能通过倒退来改变灯效)。





助工
2015-10-10 22:17:33     打赏
7楼

外接灯控板(keng板)焊接

 

请允许我搬借一些文字

——回复可见内容——



有件事情需要说一下,灯控板上主控焊接需要的指示圆点并不明显,是在找不到可以直接把圆点对准U1即可。

如果单独焊排针的话容易歪,会导致灯控板插不上去 ,所以建议大家先把灯控板上的排针焊好了,插到键盘PCB上对着焊,这样就不会歪了。



助工
2015-10-10 22:35:52     打赏
8楼

灯控板(keng板)参考资料


关于开发概要的初稿可以去炫Q的帖子里面找。这里主要补一下炫Q漏掉的一部分。


这是关于arduino as isp的方法介绍

https://www.arduino.cc/en/Tutorial/ArduinoISP


我手里没有Nano,所以用的是uno做下载器。

这里为大家讲一下具体的连线方式

首先,拿出6根杜邦线,按照下图iscp接口定义连接。

如图所示reset连接D10

           MOSI连接D11

           MISO连接D12

           SCK连接D13

           VCC连接5V

           GND接GND


连接好之后给uno先接到电脑上,打开文件>>示例>>ArduinoISP>>上传

接下来是最重要的一步。 工具>>板 选择Arduino Nano 工具>>处理器 ATmega328 工具>>端口 选择 uno所在端口 工具>>编程器 Arduino as ISP 工具 工具>>烧录引导程序

提示上传成功之后,找出来灯板代码,打开 文件>>新建 然后把代码放进去


在这里经常会有一些朋友卡在这里 烧录引导程序各种出错 那么我给出的建议就是 ①检查连线有无错误,是否正确、准确连接 ②检查灯板上面三个595芯片引脚是否正确焊接,有无虚焊漏焊。因为keng板的焊盘是银色的,很容易与焊锡混成一个色,分辨不清楚。建议大家使用放大镜认真观察 ③检查系统是否缺少一些重要文件。此问题经常出现于一些 非官方的私人ghost系统中 ④检查IDE能否正确与Arduino Uno正常通讯,因为有些时候不同版本的IDE也存在组件不全的问题。

对于使用较早版本IDE-比如说1.0-的用户,再打开这个ArduinoISP示例之后,改成需要找到 heartbeat()这一行,把其中"delay(40);" 改成"delay(20);"

附上本人的连接图如下:

首先在未连接keng板的时候Uno上的L灯(绿灯)和ON灯(红灯)会常亮

在连接了keng板之后 ON灯依旧常亮,而L灯会熄灭,证明Uno成功连接并识别了新的Arduino设备(即keng板)。

这样就算是连接成功了。

下面附上全灯亮测试代码。

#include <SPI.h>

void setup() {
  pinMode (8, OUTPUT);
  pinMode (9, OUTPUT);
  pinMode (10, OUTPUT);
  digitalWrite(8, HIGH);
  SPI.begin();
  digitalWrite(10, LOW);
  SPI.transfer(0x00); 
  SPI.transfer(0xff); 
  SPI.transfer(0xff); 
  digitalWrite(10, HIGH);
  digitalWrite(9, LOW);
  delay(100);
}

void loop() {
    digitalWrite(10, LOW);
    SPI.transfer(0xff); 
    SPI.transfer(0x00); 
    SPI.transfer(0x00); 
    digitalWrite(10, HIGH);
    delay(50);  
}




助工
2015-10-10 22:36:12     打赏
9楼
配合代码详解keng板

其实看到025大神的帖子后半段的人大概都能了解keng板的控制原理了吧,那么我在这里附一张图来为大家讲解一下keng板。

先借用一下pengchang大蜀熟给我的keng板原理图(我也忘了作者是谁)

那么这张图就表示了三个595芯片的连接状态。先讲最基础的吧,三个595分别控制后六列LED的负极、前八列LED的负极、五行LED的正极。为什么是负极呢,这个就要去查GH60原理图了。三个595首尾相连,所以在代码里面对应的就是三条SPI.transfer放在一起,与之一一对应。

有些细心的同学如果在这个时候比对上一楼给出的全灯亮的代码就可能会疑问了:这对应关系是不是错了啊?

我很负责任的告诉大家:没错。因为这个涉及到了595级联的知识。

请允许我引用pengchang大蜀熟的形象的比喻吧:

   你把数据看成一队小学生   一共3*8  24个
   595看成3个可以站八个人  并且出口入口相连的房子
   0x多少代表学生性别
   你的clk就是命令   

   一个clk就进一个学生 

   发了8个之后 第一间房占满了8个小学生    

   你继续发这一队学生继续往前走  这时候第一个进去的小学生会走到第二间房子的第一个位子   

   以此类推   24个学生都走进来的时候   最先进来的八个人已经在第三间房子了





  SPI.transfer(0x00); 
  SPI.transfer(0xff); 
  SPI.transfer(0xff); 

为啥要这样对LED进行这样“复杂”的控制呢?估计有些大神看到这里要笑了,那你们就先跳过去,这一段给我们这样的无脑小白讲一讲吧。



先来一张表示LED灯阵控制大体原理的图片

(图片转自百度文库)

这是讲解了LED灯阵的控制原理。我们可以把Nano 328芯片理解为控制芯片,是控制者;而那三块595就是执行者,控制行列的通断电。


有些小白朋友可能会感到奇怪,为毛要用0x00 这样奇怪的字符来控制595的输出呢?如果你真想到这里请先打自己屁股!!快去前面看原理图。每个595有8个引脚(第九个是作为通讯的),每个引脚的输出高低电平用0 1表示。0表示低电平,1表示高电平。所以595的输出情况就可以用8位二进制数字表示了。(比如00011000)

为什么要用16进制的数字来替换呢?我也不知道,但是至少两位的16进制数字可以表示8位二级制数字。


这样就好理解关于这些SPI代码的意义了吧。


这里送出来自己瞎写的双排流水灯代码:


#include <SPI.h>

void setup() {
  pinMode (8, OUTPUT);
  pinMode (9, OUTPUT);
  pinMode (10, OUTPUT);
  digitalWrite(8, HIGH);
  SPI.begin();
  digitalWrite(10, LOW);
  SPI.transfer(0x00); 
  SPI.transfer(0xff); 
  SPI.transfer(0xff); 
  digitalWrite(10, HIGH);
  digitalWrite(9, LOW);
  delay(100);
}

void loop() {
  int i;
  for(i=1;i<256;i*=2)
  {
    digitalWrite(10, LOW);
    SPI.transfer(0xff); 
    SPI.transfer((byte)(0xff-i)); 
    SPI.transfer((byte)(0xff-i)); 
    digitalWrite(10, HIGH);
    delay(50);  
  }
}

 

在这里感谢一下pengchang大蜀熟帮助我来理解代码





助工
2015-10-10 22:36:35     打赏
10楼

Arduino平台分析wlbxcj大神的i2c固件

为了实现按键联动,为了实现多种等效的切换,为了不外加开关,需要我们来研究研究i2c协议。

在这里讲一句,因为我参加了JB板的内测活动,而我又负责软件框架的搭建,同时为了减少麻烦,建议大家最好能统一一下键盘固件,即使用025大神最新发布的i2c键盘固件作为基础。

因为据分析不同版本的i2c固件发送出来的数据不一样,我并不能保证我写出来的框架能完美兼容不同版本的键盘固件。

=============接线分析===============

先发一个键盘的扩展接口定义

如图四个GPIO即为键盘用于和外接灯控板进行i2c通讯的接口,但是实际上只用到了两个:GPIO0和GPIO3

那么怎么连线呢?

在这里用到了uno的SDA SCL

根据arduino官方给出的定义来解读 GPIO0接SDA GPIO3接SCL

在这里附一张uno的引脚图(引用自极客工坊)

到这里,接线分析完成

《《《《【注意】》》》》 如果使用的uno和键盘没有接在同一个hub上面 最好把P4上面的GND印出来一块接到uno上面,防止数据不共地造成误差以及一些我暂时还不懂的错误[可爱]


==============刷写新固件===============

既然要对i2c做研究,没有i2c固件怎么行。于是费劲潜心万苦终于找到了025大神的最新版的i2c键盘固件

掏出来键盘,准备好固件

把固件拖到toolkit里面的refresh中去


输入Y 回车


出现如图提示时按下键盘北面的reset复位键(最好按下一秒钟左右,直到系统发出提示音)


然后等待固件烧录

到这里,固件就算烧好了


==============接线实拍================

接线分析好了,固件也刷好了,那么开始i2c的测试吧

掏出来我的uno 几根杜邦线

然后接好线


首先刷入示例中的reciever:文件》》示例》》Wire》》slave-reciever


打开Arduino串口监视器来分析数据

净是些乱七八糟的数据,怎么才能让他变成正常的二进制数字或者十六进制数字呢?

这就需要修改一下我们的reciever了

在这里需要感谢炫Q的帮助


#include 

void setup()
{
  Wire.begin(8);                
  Wire.onReceive(receiveEvent);
  Serial.begin(9600);          
}

void loop()
{
  delay(100);
}

void receiveEvent(int howMany)
{
  while (1 < Wire.available()) { 
int c = Wire.read(); 
Serial.print(" a=");
 Serial.print(c);
} 
int x = Wire.read();
 Serial.print(" b="); 
Serial.println(x); 
} 

 




把修改后的重新刷入 再来看我们的串口监视器读取到的数据

瞬间舒服了好多好多


==========继续乱按键,寻找规律=========

由于考虑到灯效切换问题,需要一些特殊键位的数据,所以测试了一下Fn+G和Fn+H的键位数据

但是结果如下

注:第一行为Fn数据

明显发现了Fn+H的数据字节短了一块,为啥。于是咨询了025大神原因,答复如下:


7E  LEN  CMD  DATA[0...LEN-1] CHECK 7E

LEN 为CMD 和DATA的总长度


整一包的数据长度不定,但由LEN可知后面数据有多长


虽然看不大懂,但算是问出了原因,等和大家一起讨论帮我这小白理解理解吧。





共15条 1/2 1 2 跳转至

回复

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