Browse Source

Fix document on HHKB internal

yuk86
tmk 9 years ago
parent
commit
92004d6786
1 changed files with 20 additions and 59 deletions
  1. 20
    59
      keyboard/hhkb/doc/HHKB.txt

+ 20
- 59
keyboard/hhkb/doc/HHKB.txt View File

@@ -162,7 +162,7 @@ Matrix diagram:

Signals charts
--------------
While pressing space bar, watched HHKB original controller signals by logic analyzer.
While pressing space bar, watched HHKB Pro original controller signals by logic analyzer.
Row and column is looping between 0-7 each for selecting a key.
A key is scaned every about 15ms, so scan rate is 66Hz.

@@ -171,71 +171,32 @@ Signals charts
Space bar locate at ROW:3 COL:7. A key is selected by HC4051(C,B,A) and LS145(C,B,A).
Key state can be read on TP1684(4/KEY) while asserting low on LS145(D).

Usage of TP1684(5) is not clear. Controller seemed to output previous key state on this line.
However key state can be read without using this signal.

(HHKB_chart2.jpg)

5us after setting colA-C
colA _~~~~~~~~~~~~~~~~~~
prev _~~~~_____ 20us if previous key state is low
colD ~~~__~~~~~ 10us column enabled
key ~~~____~~~ 22us hold state of the key

prev ____~~~~__________ 20us(JP)/17us(Pro2)
key ~~~~~~_____~~~~~~~ 22us
colD ~~~~~~__~~~~~~~~~~ 10us(LS175)

colC ____~~~~____~~~~ 550/410us(JP)
colB __~~__~~__~~__~~ 200/210us(JP)
colA _~_~_~_~_~_~_~_~ 100/110us(JP) 200/210us(Pro2)
0123456701234567 selected column

rowC ____~~~~____~~~~ 3.8/3.8ms(JP) S2 of HC4051
rowB __~~__~~__~~__~~ 1.9/1.9ms(JP) S1 of HC4051
rowA _~_~_~_~_~_~_~_~ 1.0/1.0ms(JP) S0 of HC4051
0123456701234567 selected row(Pro/Pro2)
0123456789ABCDEF selected row(JP)
rowEn0 ________~~~~~~~~ 7.7/7.7ms ~Enable of Z2 HC4051(JP only)
rowEn1 ~~~~~~~~________ 7.7/7.7ms ~Enable of Z3 HC4051(JP only)

NOTE: JP scans twice fast as Pro2 does. So Pro2 scan 8x8 matrix in 15.4ms while JP can 16x8 in that time.




Matrix scan pseudo code
-----------------------
for (row: 0-7) {
SELECT_ROW(row); // set HC4051(A,B,C)

for (col: 0-7) {
SELECT_COL(col); // set LS145(A,B,C)

_delay_us(40);

if (prev_key_state(row, col)) {
KEY_PREV_ON;
}

_delay_us(7);

ENALBLE_COL(); // set LS145(D) to low
Signal of JP:

_delay_us(10);
1) Select row
rowC ____~~~~____~~~~ 3.8/3.8ms(JP) 7.7/7.7ms(Pro) S2 of HC4051
rowB __~~__~~__~~__~~ 1.9/1.9ms(JP) 3.8/3.8ms(Pro) S1 of HC4051
rowA _~_~_~_~_~_~_~_~ 1.0/1.0ms(JP) 1.9/1.9ms(Pro) S0 of HC4051
0123456701234567 selected row(Pro)
0123456789ABCDEF selected row(JP)
rowEn0 ________~~~~~~~~ 7.7/7.7ms(JP only) ~Enable of Z2 HC4051(JP only)
rowEn1 ~~~~~~~~________ 7.7/7.7ms(JP only) ~Enable of Z3 HC4051(JP only)

if (KEY == 0) { // read TP1684(KEY)
// key pressed
} else {
// not pressed
}
2) Select column
colC ____~~~~____~~~~ 550/410us(JP) / us(Pro)
colB __~~__~~__~~__~~ 200/210us(JP) 450/460us(Pro)
colA _~_~_~_~_~_~_~_~ 100/110us(JP) 220/230us(Pro)
0123456701234567 selected column

KEY_PREV_OFF;
UNALBLE_COL(); // set LS145(D) to high
3) Wait 5us after column select, then set prev, strobe colD to spit out key status and read it.
prev _~~~~_____ 20us if previous key state is low
colD ~~~__~~~~~ 10us strobe
key ~~~____~~~ 22us indicates current state of the key

_delay_us(150);
}
}
NOTE: JP scans twice fast as Pro/Pro2 does. So Pro/Pro2 scans 8x8 matrix in 15.4ms while JP scans 16x8 in that time.