mirror of
				https://github.com/mfulz/qmk_firmware.git
				synced 2025-11-04 07:12:33 +01:00 
			
		
		
		
	Fix document on HHKB internal
This commit is contained in:
		
							parent
							
								
									6013483050
								
							
						
					
					
						commit
						92004d6786
					
				@ -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
 | 
				
			||||||
        0123456701234567    selected column
 | 
					    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)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
rowC    ____~~~~____~~~~    3.8/3.8ms(JP)   S2 of HC4051
 | 
					    2) Select column
 | 
				
			||||||
rowB    __~~__~~__~~__~~    1.9/1.9ms(JP)   S1 of HC4051
 | 
					    colC    ____~~~~____~~~~    550/410us(JP)      /   us(Pro)
 | 
				
			||||||
rowA    _~_~_~_~_~_~_~_~    1.0/1.0ms(JP)   S0 of HC4051
 | 
					    colB    __~~__~~__~~__~~    200/210us(JP)   450/460us(Pro)
 | 
				
			||||||
        0123456701234567    selected row(Pro/Pro2)
 | 
					    colA    _~_~_~_~_~_~_~_~    100/110us(JP)   220/230us(Pro)
 | 
				
			||||||
        0123456789ABCDEF    selected row(JP)
 | 
					            0123456701234567    selected column
 | 
				
			||||||
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.
 | 
					    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
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    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);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user