(仮)釣りと電子工作 自作USBキーボード 忍者ブログ
趣味の電子工作と釣りについて。電子工作は、おもに変換器作成。釣りはおもにトラウトの管釣り。
[1] [2] [3] [4] [5]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

1.キーボード一体型PCとは?

キーボードとPC本体が同一筺体で構成されているPC。
広義ではノートPCも該当するといえなくもないが、ここではディスプレイを持たない狭義のキーボード一体型PCを指すものとする。


2.キーボード一体型PCの代表的な製品

あまりに多いため、代表的なものを挙げてみる。

日電:PC-6001/mkII/mkIISR,PC-6601,PC-8001/mkII/mkIISR
富士通:FM-8,FM-7/New7/FM-X
シャープ:X1C,MZ-2200,MZ-700,MZ-1500
日立:BASIC MASTER LEVEL3 MARK5
三菱:MULTI8
東芝:PASOPIA7
トミー:ぴゅう太
ソード:M5
ソニー:SMC-777
バンダイ:RX-78
松下:FS-4600F
コモドール:MAX MACHINE,AMIGA 500
アップル:APPLE II/IIe/IIc


3.キーボードマトリックスについて

キーボードはスイッチの塊である。通常、16本程度の縦線と8本程度の横線の交差したところにスイッチが設けられている。縦16横8だと最高128キーまで対応できるので、ほとんどのキーボードはこれに収まる。

ただし、BREAKキーやPOWERキーなど特定用途のキーは、マトリックスとは別に独立して結線されていることがある。これらのキーは、マトリックス読み取りとは別に読み取り処理をしなければならない。

では、このキーマトリックスのスキャニングの仕組みは、というと。。。。

①縦線のうち順番に1本だけを5Vや0Vに変化させる。
②横線の値を読み取る。

とまあ、これだけ。ここで注意しなければいけないのは、縦線で0Vと5Vの出力を同時に行ってはいけない、ということだ。

たとえば15本は5V出力にして、1本は0V出力にすると、大変なことになる。それは、複数のキーを同時に押したときに起きる。おそらくキースキャン用マイコンが壊れる。

これは、電流が複数のスイッチを経て回り込んで、0Vと5Vがショートするからである。

じゃあどうすればいいのか、というと、縦線のうち1本だけ0V、残りはハイインピーダンス(絶縁状態)にすればいいのだ。

横線は、弱プルアップ(大きな抵抗をかませて5Vと接続)の入力モードにしておく。キーが押されているところのみ入力が0Vになり、他はプルアップの影響で5Vになる。


4.キーボードLEDについて

一部のキーボードには、LEDが数個付いている場合がある。このLEDを点灯させるときの注意点は。。。

①適切な値の抵抗をかませること。かませないと、まばゆいくらいに明るく点灯したあと、LEDまたはマイコンまたは両方が破壊される。
②吸い込みで点けるタイプと、吐き出しで点けるタイプの2種類がある。

上記①について、300Ω~4.7KΩかと思うが、暗くて落ち着いた感じが好みなら4.7KΩでいいかも。
上記②について、LEDの+側が5Vに繋がれているキーボード(吸い込みで点ける)と、LEDの-側が0Vに繋がれているキーボード(吐き出しで点ける)がある。
吸い込みで点ける場合は0Vを出力したときに点灯し、吐き出しで点ける場合は5Vを出力したときに点灯する。

4.余談:thinkpadのキーボードマトリックスについて

縦16横8に収まっていない。Fnキーや、POWERキーを含めると、縦18横10になることがある。FnキーとPOWERキーを除くと収まるのでFnキーとPOWERキーは無視すべし。
無視したくないのなら、特別に読み込むロジックを別途埋め込む必要がある。

トラックポイントは、少々の外部回路を組み込めばPS/2マウスとして使用できる(Thinkpad600など古いマシンを除く。21世紀の機種なら大丈夫かな?)。
これをキーボードの信号と混ぜてUSBの1本の線で送ることも可能ではあるが、単純ではない。複数の機能を持つこの種のデバイスは複号デバイス(composite device)と呼ばれている。


PR
マウスが要らない場合は、こっちの方が使いやすいと思う。

ほぼ、MCHPUSBのKeyboard Demoそのままだけど、キーボードマトリックス読み取りやファントムキー対策を埋め込んである。

ちなみにPIDもKeyboard Demo(0x0055)そのまま。

この前のHID Composite device Keyboard + Mouseは、PIDを"USB Device - Composite - HID + MSDデモ"のPID(0x0054)に変えた。バッティングするの気持ち悪いし、HID+MSDやる人なんてほとんど居ないと思うし。

http://blog.cnobi.jp/v1/blog/user/0f56daaba6df0301724d7ee2124f5219/1251637343


MB-6892のキーボード用です。MB-6890とそっくりのキーボードだが、LEDの数が違うので、配線が違うのかもしれない。

PS/2の入力があるけど、MB-6892だと要らないかな?

ROWは少なめの6本
COLUMNはきっちり16本
BREAKキーは、マトリックス外の配線
LEDは、KANA,HIRA,CAPSの3種類


usbbmsch.png







usbbmbrd.png








備忘メモ。。。。

キーマトリックス→USBスキャンコード
#pragma romdata eedata1_scn=0xf00000
ROM unsigned char eedata1_values[0x80] =
{
0x29,0x26,0x12,0x0f,0x37,0xff,0xff,0xff ,0x60,0x5f,0x63,0x5d,0x5a,0xff,0xff,0xff,
0x61,0x2a,0x53,0x5e,0x5b,0xff,0xff,0xff ,0x55,0x89,0x28,0x56,0x57,0xff,0xff,0xff,
0x2c,0x24,0x18,0x0d,0x10,0x3a,0xff,0xff ,0x52,0x21,0x15,0x09,0x19,0x3b,0xff,0xff,
0x35,0x23,0x1c,0x0b,0x11,0x3c,0xff,0xff ,0x50,0x25,0x0c,0x0e,0x36,0x3d,0xff,0xff,
0x51,0x27,0x13,0x33,0x38,0x3e,0xff,0xff ,0x4f,0x2e,0x30,0x32,0x54,0xff,0xff,0xff,
0xe0,0x2d,0x2f,0x34,0x87,0xff,0xff,0xff ,0xe1,0x20,0x62,0x5c,0x59,0xff,0xff,0xff,
0xff,0xff,0x14,0x04,0x1d,0xff,0xff,0xff ,0x39,0x22,0x17,0x0a,0x05,0xff,0xff,0xff,
0x2b,0x1e,0x1a,0x16,0x1b,0xff,0xff,0xff ,0xe2,0x1f,0x08,0x07,0x06,0xff,0xff,0xff
};
#pragma romdata

BREAKキーなどの特殊なキー→USBスキャンコード
// EEPROM Map:Scancode for Option key
#pragma romdata eedata2_scn=0xf00080
ROM unsigned char eedata2_values[0x10] =
{
0x35,0xff,0xff,0xff,0xff,0xff,0xff,0xff ,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
};
#pragma romdata

Fnキーの定義
Fn押さないときのUSBスキャンコード、押したときのUSBスキャンコードを32通り登録まで登録する。
// EEPROM Map:HHK like Fn key
#pragma romdata eedata3_scn=0xf00090
ROM unsigned char eedata3_values[0x40] =
{
0x2f,0x52,0x34,0x4f,0x33,0x50,0x38,0x51,0x0F,0x49,0x37,0x4e,0x0e,0x4a,0x36,0x4d,
0x0c,0x46,0x12,0x47,0x13,0x48,0x2a,0x4c,0x2b,0x39,0x30,0x49,0x1e,0x3a,0x1f,0x3b,
0x20,0x3c,0x21,0x3d,0x22,0x3e,0x23,0x3f,0x24,0x40,0x25,0x41,0x26,0x42,0x27,0x43,
0x2d,0x44,0x2e,0x45,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
};
#pragma romdata

ゴーストキー対策
キーマトリックス上、キーが定義してあるところのビットを立てる。
あと、MSB---LSBをLSB---MSBてな感じに、左右逆転させる。
(ビットの並びは、7 6 5 4 3 2 1 0 といった感じで、左が上位になっているから)
ちょっと難しいかな?
// EEPROM Map:GHOST(Phantom) Key reduction
#pragma romdata eedata4_scn=0xf000D0
ROM unsigned char eedata4_values[0x10] =
{
0b00011111,0b00011111,
0b00011111,0b00011111,
0b00111111,0b00111111,
0b00111111,0b00111111,
0b00111111,0b00011111,
0b00011111,0b00011111,
0b00011111,0b00011111,
0b00011111,0b00011111
};
#pragma romdata

Fnキーを定義。これはキーマトリックスの読み取り値をセットする。
#define FN_KEY         0x68    // HHK like Fn key: 0x68=Caps Lock

これを1にすると、キーマトリックス読み取り値をそのままUSBへ出力する(開発用)
#define KMX_MONITOR    0       // 0...Operation  1...Matrix Monitor

FM-7のように、Nキーロールオーバーなキーボートのときは0をセットする。
#define GHOST_KEY_REDUCTION 1  // 0...Disabled   1...Enabled

    // Unusable Port:A6,A7,C3,C4,C5,E3
    // Column 00-05: A0-A5
    // Column 06-07: C6-C7
    // Column 08-09: E0-E1
    // Column 10-15: B2-B7
    // NumLk  LED  :C0
    // CapsLk LED  :C1
    // ScrLk  LED  :C2
    // Option      :E2
    // PS/2 CLK    :B0
    // PS/2 DATA   :B1


これがそのファイル(プロジェクト)
file.typematic.blog.shinobi.jp/composite.zip

別途MCHPFSUSB Framework2.5aが必要。これよりあたらしいと、うまくいかないかも。
Microchipは、フレームワークがバージョンアップすると古いフレームワークをダウンロード不可にしてしまうので、要注意。しかも、各フレームワークのバージョン間で互換性は無い。古いフレームワークで開発していたソースは、新しいフレームワークではまったく動かない。どうにかしてくれ~。



夏休みで暇だったので、USB Keyboard + Mouseを作ってみた。 AE-18F2550では足が足りないので、18F4550を使用した。

これでいいのかわからないけど、とりあえず動いている。

この前入手したBasic Master Level3 Mark5のキーボードとPS/2マウスを読み取って、USB HIDキーボード+マウスとしてPCに送るようになっている。

MCHPFSUSB Framework2.5aをベースに、フォーラム:RE: HID boot-keyboard & mouse on same device? (http://www.microchip.com/forums/tm.aspx?m=346640&mpage=2)を見ながら作成。そのとおりにやってもだめだったが、2日くらいがんばって、ようやく動いた。

見てわかると思うけど、HID bootloader上でのみ動作する。。



詳しいことは、また後日。

カレンダー
02 2024/03 04
S M T W T F S
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
リンク
最新TB
バーコード
ブログ内検索
カウンター
Powered by ニンジャブログ  Designed by 穂高
Copyright © (仮)釣りと電子工作 All Rights Reserved
忍者ブログ / [PR]