|Switch |Controller |
| board | board |Description |Schematic
|--------|-----------|--------------------------------------|-----------
| 1 |20 | FG |FG
| 2 |19 | GND |GND
| 3 |18 | GND |GND
| 4 |17 | 3.3V |V33
| 5 |16 | 5V |Vcc
| 6 |15 |*Z6-TP1684-4-HYS(o) |FBSTB
| 7 |14 |*Z6-TP1684-2-KEY(i) |OUT
| 8 |13 |*Z2-AD5258-5-SCL(I2C) |SCL
| 9 |12 |*Z2-AD5258-4-SDA(I2C) |SDA
|10 |11 |*Z4-LV4051A-6-~EN(Col 0-7) |INH_1
|11 |10 |*Z5-LV4051A-6-~EN(Col 8-F) |INH_2
|12 | 9 |+Z7-LV07A-5 (LV4051A-9-C) |SEL_C
|13 | 8 |+Z7-LV07A-1 (LV4051A-10-B) |SEL_B
|14 | 7 |+Z7-LV07A-3 (LV4051A-11-A) |SEL_A
|15 | 6 |+Z3-LVC138A-3-C |COL4
|16 | 5 |+Z3-LVC138A-2-B |COL3
|17 | 4 |+Z3-LVC138A-1-A |COL2
|18 | 3 |+Z3-LVC138A-4-~G2A Z6-TP1684-5-~EN |COL1
|19 | 2 |+Z7-LV07A-11-~InsertLED |LED1
|20 | 1 |+Z7-LV07A-13-~CapsLED |LED2
```
* 5V intferface
+ 3.3V interface
```
Row5-7 have no key, you can omit scaning on those lines. Topre original controller scans those rows for some reason.
| |0 |1 |2 |3 |4 |5 |6 |7 |8 |9 |A |B |C |D |E |F |
|----|----|----|----|----|----|----|----|----|----|----|----|----|----|----|----|----|
| 0|Q |W |E |Tab |R |U |T |Y |O |P |[ |I |] | |\ |Del |
| 1|1 |2 |3 |Esc |4 |7 |5 |6 |9 |0 |- |8 |= | |BSpc|Ins |
| 2| |LWin|LAlt|LCtl| | | |Spc |RAlt| |RCtl| |Fn |Down|Left|Rght|
| 3| |Z |X |LSft|C |N |V |B |, |. |/ |M |RSft|Up | | |
| 4|A |S |D |Caps|F |J |G |H |L |; |' |K | | |Entr| |
| 5| | | | | | | | | | | | | | | | |
| 6| | | | | | | | | | | | | | | | |
| 7| | | | | | | | | | | | | | | | |
|Row |A/17|B/16|C/15|
|----|----|----|----|
|0 |0 |0 |0 |
|1 |1 |0 |0 |
|2 |0 |1 |0 |
|3 |1 |1 |0 |
|4 |0 |0 |1 |
|5 |1 |0 |1 |
|6 |0 |1 |1 |
|7 |1 |1 |1 |
|Col |A/14|B/13|C/12|Z4-EN/10|Z5-EN/11|
|----|----|----|----|--------|--------|
|0 |0 |0 |0 |0 |1 |
|1 |1 |0 |0 |0 |1 |
|2 |0 |1 |0 |0 |1 |
|3 |1 |1 |0 |0 |1 |
|4 |0 |0 |1 |0 |1 |
|5 |1 |0 |1 |0 |1 |
|6 |0 |1 |1 |0 |1 |
|7 |1 |1 |1 |0 |1 |
|8 |0 |0 |0 |1 |0 |
|9 |1 |0 |0 |1 |0 |
|A |0 |1 |0 |1 |0 |
|B |1 |1 |0 |1 |0 |
|C |0 |0 |1 |1 |0 |
|D |1 |0 |1 |1 |0 |
|E |0 |1 |1 |1 |0 |
|F |1 |1 |1 |1 |0 |
|Switch | |
| board |Description |ATmega32u4
|--------|------------------------------------------|-----------
| 1 | FG |GND
| 2 | GND |GND
| 3 | GND |GND
| 4 | 3.3V |3.3V/5V
| 5 | 5V |5V
| 6 |*Z6-TP1684-4-HYS(o) |PC7
| 7 |*Z6-TP1684-2-KEY(i) |PC6
| 8 |*Z2-AD5258-5-SCL(I2C) |PD0(TWI)
| 9 |*Z2-AD5258-4-SDA(I2C) |PD1(TWI)
|10 |*Z4-LV4051A-6-~EN(Col 0-7) |PB4
|11 |*Z5-LV4051A-6-~EN(Col 8-F) |PB3
|12 |+Z7-LV07A-5 (LV4051A-9-C) |PB2
|13 |+Z7-LV07A-1 (LV4051A-10-B) |PB1
|14 |+Z7-LV07A-3 (LV4051A-11-A) |PB0
|15 |+Z3-LVC138A-3-C |PD6
|16 |+Z3-LVC138A-2-B |PD5
|17 |+Z3-LVC138A-1-A |PD4
|18 |+Z3-LVC138A-4-~G2A Z6-TP1684-5-~EN |PD7
|19 |+Z7-LV07A-11-~InsertLED |PB5
|20 |+Z7-LV07A-13-~CapsLED |PB6
Been following this from the start, awesome work hasu! :thumb:
Count me in for one of the first ones that you sell, would love to see a bluetooth version w/ a built in switcher :p
Would this work for FC660m?No, C is a different beast.
Hi Hasu,
I have purchased a like new in box, fc980c.
The other day, plugging in the keyboard completely died and is unresponsive. No damages anywhere to be seen, just randomly quit working.
I am wondering if my controller for it failed. Do you know if this controller would work on my 980c?
Hi Hasu,
I have purchased a like new in box, fc980c.
The other day, plugging in the keyboard completely died and is unresponsive. No damages anywhere to be seen, just randomly quit working.
I am wondering if my controller for it failed. Do you know if this controller would work on my 980c?
Would this work for FC660m?
Count me in for USB (and later) BT! :thumb:
A few people I've heard have had issues with the stock female mini USB coming off their stock board, will your controller use a more secure version of the connector?
I got first revision of PCB the other day and have tested it for these two or three days. I have no big problem on it and am typing on it.
First PCB
In the revision screw holes and USB connector is a bit off but no problem in use and it will align completely by filing the hole a little. No electrical issue is found.
USB connector(a bit off)Show Image(http://i.imgur.com/yj8tX8yh.jpg)
PCB.Show Image(http://i.imgur.com/IQ8iNQih.jpg)
Button on bottom.Show Image(http://i.imgur.com/0XJkMznh.jpg)
Keymap Editor
And added oline keymap editor for FC660C controller. Default keymap is a bit complex to emulate original behaviour like Shift+Esc=~ and Fn+Q.
http://www.tmk-kbd.com/tmk_keyboard/editor/unimap/?fc660cShow Image(http://i.imgur.com/KcIdgMh.png)
Hi Hasu,
For Shift + Esc = ~
Can't you do on layer 2 code edit for esc key:
Action_mods_key Rshift Grave?
Awesome news, it looks great! What is the ETA on finalized PCBs for purchase?
How much will it cost? Count me in..
Will there be a way to control the led under the Insert key?
Congrats on finally getting the controller to the public! Is there any estimation now of when the bluetooth controller will be finished?
Congrats on finally getting the controller to the public! Is there any estimation now of when the bluetooth controller will be finished?
I have no clear plan on Bluetooth controller, I'm not working on it currently at least.
I found some dificulties on Bluetooth controller. One of them is that FC660C controller PCB is much smaller than HHKB and this requires new design and components. It will take longer than what I expected and I'm not sure when I can have enough time to do so.
I thought I read somewhere Hasu where you said it might be possible to change the actuation point of the switches. Is that something that's still being investigated? That would be an insanely cool feature if it's possible.
i don't have the keyboard and cant find enough pics of internals. it is difficult to say about 980c without closer inspection. I guess it is very similar, not so much hassle is required.
Hasu, I'll be opening my FC980C later this week to convert it to MX, let me know if you'd like any specific internal views!
Hasu, I'll be opening my FC980C later this week to convert it to MX, let me know if you'd like any specific internal views!
Thanks. But I don't want to break virginity of your board with repeated tweaks and tinkering :D
They recently just started selling FC980C in Japan, it is not bad in terms of availability now, apart from its price.
Hi, I am trying to get a numpad layer that can send alt codes to work. I tried P0-P9 but when I press the keys they don't do anything. Please help.I'm not sure but numlock state may be related?
...change the actuation point of the switches...
...EDIT:
I don't still feel calm offering this function to users and default firmware won't support this for a while at least...
So I can do it if I learn how to build from source, interesting. It will require overcoming fear of screwing it up!
Is there an equivalent controller for the Realforce TKL? It's a little larger than the 660c, but 55g weight and the Silent versions are desirable features not available with Leopold as far as I can see.
Hey Hasu, got your controller a while ago and it turned my FC660C back into my daily drive over the Whitefox, love it!
I have one question though. Just today, I disconnected my keyboard to use the USB for a controller, and then switched back to the keyboard. The insert LED lit up and the keyboard would not input. A restart solved this issue, but if I replug the keyboard, it does the same thing until I restart. I do not have a laptop to test this with, but is this a limitation of the controller or a unique case?
Turn off NKRO by one of methods below.
1) press both shifts and n before using BIOS
2) build firmware with disabling NKRO in Makefile and flash it.
EDIT: NKRO keyboard tends to work with some BIOS/EFI while not with others. 6KRO is likely to always work with most BIOS/EFI.
Hi hasu,
I am trying to build on mac, but I kind of stuck on the 'brew install avr-libc' it seems I can't get it working.
Hi hasu,
I am trying to build on mac, but I kind of stuck on the 'brew install avr-libc' it seems I can't get it working.
I have no mac to check this but,
Can you refer this and try brew again? And let me know your result I'll update instruction.
https://github.com/osx-cross/homebrew-avr#installing-homebrew-avr-formulae
It seems 'brew intall avr-gcc' works instead.
yeah, that makes sense, F key probably has hardware issue probably.
When you take apart switch unit and fix the F key maintain backspace key also. I suspect backspace has something wrong with its switch too if 6KRO doesn't cure its problem.
If those keys get lubed with oil or grease I'd reccomend to wipe it out to avoid contamination into domes and pcb.
So if I wanted to make one of these I would need one of these https://www.ebay.co.uk/itm/HRS-HIROSE-DF14-20S-1-25C-HOUSING-DF14-1-25MM-20WAY/171948274249?hash=item2808ea7249:g:jzEAAOxy3HJTIjFU and a pro micro?
So atmel FLIP can not longer be downloaded. Went to go change up my layout and now I can't since I don't have Flip anymore. Anyway around this?
avrdude -c flip1 -p m32u4 -U flash:w:../terminal_usb/terminal_lufa.hex
http://www.nongnu.org/avrdude/
I saw that some optical boards have the ability to trigger two different key presses and different actuation points. Do you think this is possible with topre boards?
For example, binding Home and Page Up to the same key, a full press sends Home, and a light press sends Page Up.
Any way to set it up so that any key press will briefly turn on one or both LEDs? Just a fun thought I had.
diff --git a/keyboard/fc660c/unimap.c b/keyboard/fc660c/unimap.c
index 77c3350..9dbd04c 100644
--- a/keyboard/fc660c/unimap.c
+++ b/keyboard/fc660c/unimap.c
@@ -17,3 +17,21 @@ const action_t actionmaps[][UNIMAP_ROWS][UNIMAP_COLS] PROGMEM = {
LCTL,LGUI,LALT, SPC, RALT,RCTL,GRV, LEFT,DOWN,RGHT
),
};
+
+
+#define LED_ON() PORTB &= ~(1<<5 | 1<<6)
+#define LED_OFF() PORTB |= (1<<5 | 1<<6)
+#define LED_DURATION 100
+static uint16_t last_ms = 0;
+void hook_matrix_change(keyevent_t event) {
+ if (event.pressed) {
+ LED_ON();
+ last_ms = timer_read();
+ }
+}
+
+void hook_keyboard_loop(void) {
+ if (TIMER_DIFF_16(last_ms, timer_read()) > LED_DURATION) {
+ LED_OFF();
+ }
+}
Any way to set it up so that any key press will briefly turn on one or both LEDs? Just a fun thought I had.
Try this patch, you can add it to your keymap file. It turns on Leds for 100ms when any key is pressed. Also compiled hex file are attached just for a try.Code: [Select]diff --git a/keyboard/fc660c/unimap.c b/keyboard/fc660c/unimap.c
index 77c3350..9dbd04c 100644
--- a/keyboard/fc660c/unimap.c
+++ b/keyboard/fc660c/unimap.c
@@ -17,3 +17,21 @@ const action_t actionmaps[][UNIMAP_ROWS][UNIMAP_COLS] PROGMEM = {
LCTL,LGUI,LALT, SPC, RALT,RCTL,GRV, LEFT,DOWN,RGHT
),
};
+
+
+#define LED_ON() PORTB &= ~(1<<5 | 1<<6)
+#define LED_OFF() PORTB |= (1<<5 | 1<<6)
+#define LED_DURATION 100
+static uint16_t last_ms = 0;
+void hook_matrix_change(keyevent_t event) {
+ if (event.pressed) {
+ LED_ON();
+ last_ms = timer_read();
+ }
+}
+
+void hook_keyboard_loop(void) {
+ if (TIMER_DIFF_16(last_ms, timer_read()) > LED_DURATION) {
+ LED_OFF();
+ }
+}
EDIT: Fixed message quote.
Hi folks,
Anyone already grabbed new FC660C and tried this controller yet?
I like to know whether the Alt Controller works with the new FC660C or not. Also pics of inside of the new keyboard would be helpful.
here's the black/black fc660c
https://www.reddit.com/r/MechanicalKeyboards/comments/8if8sa/all_black_fc660c_made_in_japan/?st=jh0zb7es&sh=d09eb378
here's the blue/grey fc660c
https://mechanicalkeyboards.com/shop/index.php?l=product_detail&p=4096
Thanks
Hi folks,
Anyone already grabbed new FC660C and tried this controller yet?
I like to know whether the Alt Controller works with the new FC660C or not. Also pics of inside of the new keyboard would be helpful.
here's the black/black fc660c
https://www.reddit.com/r/MechanicalKeyboards/comments/8if8sa/all_black_fc660c_made_in_japan/?st=jh0zb7es&sh=d09eb378
here's the blue/grey fc660c
https://mechanicalkeyboards.com/shop/index.php?l=product_detail&p=4096
Thanks
Some user on Reddit posted this pics of new "Made in Japan" model. The controller seems to me be exactly identical to one from 'Made in China' model. I'm 99.9% sure my Alt controller still work with the 'Made in Japan' model.
https://imgur.com/a/k2uvVU9
Has anyone thought of modding a USB-C port onto this controller? (Yes I know the default case doesn't fit, I'm not worried about that). Wondering how much work it'd be and if it's fairly straight forward or if there's any pins and stuff I'd have to re-do/modify.It may be possible to squeeze one in if you find a USB C connector small enough and are willing to cut the case a little bit. I just ordered parts to build one of these controllers with a Teensy 2.0 and I am going to wire it to a panel mount USB-C connector. Building the controller from a teensy takes up significantly less space so you have more room to fit a USB C connector. Only downside is that the teensy can't mount to the case like the normal PCB can. I plan on posting pictures of the process when I get the parts on Friday.
US FC660C with Alt Controller:
One of my hopes was that I could designate a modifier key to switch to a layer that produces German Umlauts, a u o with the dots on them. But I haven't found a way to get that working and all I find via google is murky at best.
I am strictly a Windows user, at least for the purpose of needing those characters. I realize I could use AHK, and I might do that if I have to. But doing it all via the keyboard controller would be so much cleaner.
Is this something that can't be done, should I stop looking? Any hints appreciated. Perhaps if there's some hacking in C code required, I might be able to do this as a work of passion but I would need just a hint as to where to look and generally what would need to be done..
Any way to set it up so that any key press will briefly turn on one or both LEDs? Just a fun thought I had.
Try this patch, you can add it to your keymap file. It turns on Leds for 100ms when any key is pressed. Also compiled hex file are attached just for a try.Code: [Select]diff --git a/keyboard/fc660c/unimap.c b/keyboard/fc660c/unimap.c
index 77c3350..9dbd04c 100644
--- a/keyboard/fc660c/unimap.c
+++ b/keyboard/fc660c/unimap.c
@@ -17,3 +17,21 @@ const action_t actionmaps[][UNIMAP_ROWS][UNIMAP_COLS] PROGMEM = {
LCTL,LGUI,LALT, SPC, RALT,RCTL,GRV, LEFT,DOWN,RGHT
),
};
+
+
+#define LED_ON() PORTB &= ~(1<<5 | 1<<6)
+#define LED_OFF() PORTB |= (1<<5 | 1<<6)
+#define LED_DURATION 100
+static uint16_t last_ms = 0;
+void hook_matrix_change(keyevent_t event) {
+ if (event.pressed) {
+ LED_ON();
+ last_ms = timer_read();
+ }
+}
+
+void hook_keyboard_loop(void) {
+ if (TIMER_DIFF_16(last_ms, timer_read()) > LED_DURATION) {
+ LED_OFF();
+ }
+}
EDIT: Fixed message quote.
* Pin configuration for ATMega32U4
*
* Row: PB6, PF7, PB5, PB7(~EN)
* Col: PF6, PB4, PF5, PD7(Z5 ~EN), PF4(Z4 ~EN)
* Key: PD4(pull-uped)
* Hys: PF0
*/
static inline void KEY_ENABLE(void) { (PORTB &= ~(1<<7)); }
static inline void KEY_UNABLE(void) { (PORTB |= (1<<7)); }
static inline bool KEY_STATE(void) { return (PIND & (1<<4)); }
static incline void KEY_HYS_ON(void) {PORTF |= (1<<0)); }
static inline void KEY_HYS_OFF(void) { (PORTF &= ~(1<<0)); }
static inline void KEY_INIT(void)
{
/* Col */
DDRB |= 0x10;
DDRD |= 0x80;
DDRF |= 0x70;
/* Key: input with pull-up */
DDRD &= ~(1<<4);
PORTD |= (1<<4);
/* Hys */
DDRF |= (1<<0);
/* Row */
DDRB |= 0xE0;
DDRF |= 0x80;
KEY_UNABLE();
KEY_HYS_OFF();
}
#ifndef FC660C_H
#define FC660C_H
#include <stdint.h>
#include <stdbool.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include "timer.h"
#include "unimap.h"
// Timer resolution check
#if (1000000/TIMER_RAW_FREQ > 20)
# error "Timer resolution(>20us) is not enough for HHKB matrix scan tweak on V-USB."
#endif
/*
* Pin configuration for ATMega32U4
*
* Row: PB5, PB6, PB7(~EN), PF7
* Col: PF4(Z4 ~EN), PF5, PF6, PD7(Z5 ~EN), PF5
* Key: PD4(pull-uped)
* Hys: PF0
*/
static inline void KEY_ENABLE(void) { (PORTD &= ~(1<<7)); }
static inline void KEY_UNABLE(void) { (PORTD |= (1<<7)); }
static inline bool KEY_STATE(void) { return (PINC & (1<<6)); }
static inline void KEY_HYS_ON(void) { (PORTC |= (1<<7)); }
static inline void KEY_HYS_OFF(void) { (PORTC &= ~(1<<7)); }
static inline void KEY_INIT(void)
{
/* Col */
DDRB |= 0x10;
DDRD |= 0x80;
DDRF |= 0x70;
/* Key: input with pull-up */
DDRD &= ~(1<<4);
PORTD |= (1<<4);
/* Hys */
DDRF |= (1<<0);
/* Row */
DDRB |= 0xE0;
DDRF |= 0x80;
KEY_UNABLE();
KEY_HYS_OFF();
}
static inline void SET_ROW(uint8_t ROW)
{
// set row with unabling key
PORTD = (PORTD & 0x0F) | (1<<7) | ((ROW & 0x07) << 4);
}
static inline void SET_COL(uint8_t COL)
{
// |PD7(Z5 ~EN)|PF4(Z4 ~EN)
// --------|-----------|-----------
// Col:0-7 |high |low
// Col:8-F |low |high
PORTB = (PORTB & 0xE0) | ((COL & 0x08) ? 1<<4 : 1<<3) | (COL & 0x07);
}