diff options
| -rw-r--r-- | keyboard/hhkb/doc/HHKB.txt | 79 |
1 files changed, 20 insertions, 59 deletions
diff --git a/keyboard/hhkb/doc/HHKB.txt b/keyboard/hhkb/doc/HHKB.txt index 74b680d03..98397b847 100644 --- a/keyboard/hhkb/doc/HHKB.txt +++ b/keyboard/hhkb/doc/HHKB.txt | |||
| @@ -162,7 +162,7 @@ Matrix diagram: | |||
| 162 | 162 | ||
| 163 | Signals charts | 163 | Signals charts |
| 164 | -------------- | 164 | -------------- |
| 165 | While pressing space bar, watched HHKB original controller signals by logic analyzer. | 165 | While pressing space bar, watched HHKB Pro original controller signals by logic analyzer. |
| 166 | Row and column is looping between 0-7 each for selecting a key. | 166 | Row and column is looping between 0-7 each for selecting a key. |
| 167 | A key is scaned every about 15ms, so scan rate is 66Hz. | 167 | A key is scaned every about 15ms, so scan rate is 66Hz. |
| 168 | 168 | ||
| @@ -171,71 +171,32 @@ Signals charts | |||
| 171 | Space bar locate at ROW:3 COL:7. A key is selected by HC4051(C,B,A) and LS145(C,B,A). | 171 | Space bar locate at ROW:3 COL:7. A key is selected by HC4051(C,B,A) and LS145(C,B,A). |
| 172 | Key state can be read on TP1684(4/KEY) while asserting low on LS145(D). | 172 | Key state can be read on TP1684(4/KEY) while asserting low on LS145(D). |
| 173 | 173 | ||
| 174 | Usage of TP1684(5) is not clear. Controller seemed to output previous key state on this line. | ||
| 175 | However key state can be read without using this signal. | ||
| 176 | |||
| 177 | (HHKB_chart2.jpg) | 174 | (HHKB_chart2.jpg) |
| 178 | 175 | ||
| 179 | 5us after setting colA-C | ||
| 180 | colA _~~~~~~~~~~~~~~~~~~ | ||
| 181 | prev _~~~~_____ 20us if previous key state is low | ||
| 182 | colD ~~~__~~~~~ 10us column enabled | ||
| 183 | key ~~~____~~~ 22us hold state of the key | ||
| 184 | |||
| 185 | prev ____~~~~__________ 20us(JP)/17us(Pro2) | ||
| 186 | key ~~~~~~_____~~~~~~~ 22us | ||
| 187 | colD ~~~~~~__~~~~~~~~~~ 10us(LS175) | ||
| 188 | |||
| 189 | colC ____~~~~____~~~~ 550/410us(JP) | ||
| 190 | colB __~~__~~__~~__~~ 200/210us(JP) | ||
| 191 | colA _~_~_~_~_~_~_~_~ 100/110us(JP) 200/210us(Pro2) | ||
| 192 | 0123456701234567 selected column | ||
| 193 | |||
| 194 | rowC ____~~~~____~~~~ 3.8/3.8ms(JP) S2 of HC4051 | ||
| 195 | rowB __~~__~~__~~__~~ 1.9/1.9ms(JP) S1 of HC4051 | ||
| 196 | rowA _~_~_~_~_~_~_~_~ 1.0/1.0ms(JP) S0 of HC4051 | ||
| 197 | 0123456701234567 selected row(Pro/Pro2) | ||
| 198 | 0123456789ABCDEF selected row(JP) | ||
| 199 | rowEn0 ________~~~~~~~~ 7.7/7.7ms ~Enable of Z2 HC4051(JP only) | ||
| 200 | rowEn1 ~~~~~~~~________ 7.7/7.7ms ~Enable of Z3 HC4051(JP only) | ||
| 201 | |||
| 202 | NOTE: JP scans twice fast as Pro2 does. So Pro2 scan 8x8 matrix in 15.4ms while JP can 16x8 in that time. | ||
| 203 | |||
| 204 | |||
| 205 | |||
| 206 | |||
| 207 | Matrix scan pseudo code | ||
| 208 | ----------------------- | ||
| 209 | for (row: 0-7) { | ||
| 210 | SELECT_ROW(row); // set HC4051(A,B,C) | ||
| 211 | |||
| 212 | for (col: 0-7) { | ||
| 213 | SELECT_COL(col); // set LS145(A,B,C) | ||
| 214 | |||
| 215 | _delay_us(40); | ||
| 216 | |||
| 217 | if (prev_key_state(row, col)) { | ||
| 218 | KEY_PREV_ON; | ||
| 219 | } | ||
| 220 | |||
| 221 | _delay_us(7); | ||
| 222 | 176 | ||
| 223 | ENALBLE_COL(); // set LS145(D) to low | 177 | Signal of JP: |
| 224 | 178 | ||
| 225 | _delay_us(10); | 179 | 1) Select row |
| 180 | rowC ____~~~~____~~~~ 3.8/3.8ms(JP) 7.7/7.7ms(Pro) S2 of HC4051 | ||
| 181 | rowB __~~__~~__~~__~~ 1.9/1.9ms(JP) 3.8/3.8ms(Pro) S1 of HC4051 | ||
| 182 | rowA _~_~_~_~_~_~_~_~ 1.0/1.0ms(JP) 1.9/1.9ms(Pro) S0 of HC4051 | ||
| 183 | 0123456701234567 selected row(Pro) | ||
| 184 | 0123456789ABCDEF selected row(JP) | ||
| 185 | rowEn0 ________~~~~~~~~ 7.7/7.7ms(JP only) ~Enable of Z2 HC4051(JP only) | ||
| 186 | rowEn1 ~~~~~~~~________ 7.7/7.7ms(JP only) ~Enable of Z3 HC4051(JP only) | ||
| 226 | 187 | ||
| 227 | if (KEY == 0) { // read TP1684(KEY) | 188 | 2) Select column |
| 228 | // key pressed | 189 | colC ____~~~~____~~~~ 550/410us(JP) / us(Pro) |
| 229 | } else { | 190 | colB __~~__~~__~~__~~ 200/210us(JP) 450/460us(Pro) |
| 230 | // not pressed | 191 | colA _~_~_~_~_~_~_~_~ 100/110us(JP) 220/230us(Pro) |
| 231 | } | 192 | 0123456701234567 selected column |
| 232 | 193 | ||
| 233 | KEY_PREV_OFF; | 194 | 3) Wait 5us after column select, then set prev, strobe colD to spit out key status and read it. |
| 234 | UNALBLE_COL(); // set LS145(D) to high | 195 | prev _~~~~_____ 20us if previous key state is low |
| 196 | colD ~~~__~~~~~ 10us strobe | ||
| 197 | key ~~~____~~~ 22us indicates current state of the key | ||
| 235 | 198 | ||
| 236 | _delay_us(150); | 199 | 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. |
| 237 | } | ||
| 238 | } | ||
| 239 | 200 | ||
| 240 | 201 | ||
| 241 | 202 | ||
