Fix document on HHKB internal

master
tmk 2014-07-09 16:26:10 +09:00
parent 6013483050
commit 92004d6786
1 changed files with 20 additions and 59 deletions

View File

@ -162,7 +162,7 @@ Matrix diagram:
Signals charts 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. 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. 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). 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). 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) (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) Signal of JP:
key ~~~~~~_____~~~~~~~ 22us
colD ~~~~~~__~~~~~~~~~~ 10us(LS175)
colC ____~~~~____~~~~ 550/410us(JP) 1) Select row
colB __~~__~~__~~__~~ 200/210us(JP) rowC ____~~~~____~~~~ 3.8/3.8ms(JP) 7.7/7.7ms(Pro) S2 of HC4051
colA _~_~_~_~_~_~_~_~ 100/110us(JP) 200/210us(Pro2) 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)
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 0123456701234567 selected column
rowC ____~~~~____~~~~ 3.8/3.8ms(JP) S2 of HC4051 3) Wait 5us after column select, then set prev, strobe colD to spit out key status and read it.
rowB __~~__~~__~~__~~ 1.9/1.9ms(JP) S1 of HC4051 prev _~~~~_____ 20us if previous key state is low
rowA _~_~_~_~_~_~_~_~ 1.0/1.0ms(JP) S0 of HC4051 colD ~~~__~~~~~ 10us strobe
0123456701234567 selected row(Pro/Pro2) key ~~~____~~~ 22us indicates current state of the key
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. 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.
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
_delay_us(10);
if (KEY == 0) { // read TP1684(KEY)
// key pressed
} else {
// not pressed
}
KEY_PREV_OFF;
UNALBLE_COL(); // set LS145(D) to high
_delay_us(150);
}
}