趣味の電子工作と釣りについて。電子工作は、おもに変換器作成。釣りはおもにトラウトの管釣り。
1.キーマトリックスの縦線、横線の確認
キーボードを解体してプリント基板のパターンを追いかけて、縦線と横線がどこに出ているか見つけます。
本数の多いのが縦線、少ないのが横線です。
あわせて、LEDの結線も確認します。LEDには極性がありますが、よく見ればどっちが+か判定できます(ここでは説明しません)。
解体できるキーボードが無い場合は、テスターを使って縦線、横線を見つける必要があります。
キーマトリックスを解析するのではなく、縦線、横線がどれか、だけを見つけ出します。
それでも最低2時間はかかるので、根気強く続けてください。
2.キーマトリックスの配線
以下、縦線をColumn、横線をRowと呼ぶことにします。
サンプル回路を見ながら作業しましょう。
ColumnをPICのC0~C15と結線してください。
RowをPICのR0~R7と結線してください。
BREAK等特殊キーは、必要に応じてOPT(オプション)と結線してください。
LEDは、必ず抵抗をかませてNumLk/CapsLk/ScrLKと接続してください。
LEDの-側をGNDと接続します。
LEDが吸い込みドライブの場合は、LEDの+側を5Vと接続するなど、回路の変更が必要です。
サンプル回路(既出)
3.キーマトリックスの解析
キーマトリックス解析用のファームをPICに書き込みます。
keyboard.cのKMX_MONITORを1に変更してビルドして、PICに書き込んでください。
#define KMX_MONITOR 0 // 0...Operation 1...Matrix Monitor
メモ帳を開いてください。
キーボードを繋いで、キーを押してください。メモ帳にスキャンコードが表示されますので、これをメモしてください。
ここで注意点があります。ゾロ目のスキャンコードは、1文字で表示されることがあります。(例:33→3、77→7)
スキャンコード3や7は、03や07と表示されますので、識別できます。
4.変換テーブルの書き換え
keyboard.cのKMX_MONITORを0に戻します。
#define KMX_MONITOR 0 // 0...Operation 1...Matrix Monitor
※動作が不安定な場合は、下記の遅延の値を大きくするなどして調整する
// Delay100TCYx(1); // 0.05us x 4 x 100 = 20us = 0.02ms
Delay1KTCYx(1); // 0.05us x 4 x 1000 = 200us = 0.2ms
調べたスキャンコードをもとに、keyboard.cの下記(キーボードスキャンコード→USBスキャンコード)を書き換えます。
USBのスキャンコードは、"usb scancode"でググって調べましょう。
// EEPROM Map:KEY MATRIX to USB SCANCODE
#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
あと、Fnキー、GHOSTキーの設定項目がありますが、ややこしいのでここでは無効にしておきます。
#define FN_KEY 0xFF // HHK like Fn key: 0x68=Caps Lock
#define GHOST_KEY_REDUCTION 0 // 0...Disabled 1...Enabled
同様に、特殊キーもここでは放置します。
変更が終わったら、ビルドして書き込みます。
5.動作確認
ジャンパピン短絡が外れているのを確認して、基板を接続してください。
メモ帳を開いて、キーを押してください。
キーボードを解体してプリント基板のパターンを追いかけて、縦線と横線がどこに出ているか見つけます。
本数の多いのが縦線、少ないのが横線です。
あわせて、LEDの結線も確認します。LEDには極性がありますが、よく見ればどっちが+か判定できます(ここでは説明しません)。
解体できるキーボードが無い場合は、テスターを使って縦線、横線を見つける必要があります。
キーマトリックスを解析するのではなく、縦線、横線がどれか、だけを見つけ出します。
それでも最低2時間はかかるので、根気強く続けてください。
2.キーマトリックスの配線
以下、縦線をColumn、横線をRowと呼ぶことにします。
サンプル回路を見ながら作業しましょう。
ColumnをPICのC0~C15と結線してください。
RowをPICのR0~R7と結線してください。
BREAK等特殊キーは、必要に応じてOPT(オプション)と結線してください。
LEDは、必ず抵抗をかませてNumLk/CapsLk/ScrLKと接続してください。
LEDの-側をGNDと接続します。
LEDが吸い込みドライブの場合は、LEDの+側を5Vと接続するなど、回路の変更が必要です。
サンプル回路(既出)
3.キーマトリックスの解析
キーマトリックス解析用のファームをPICに書き込みます。
keyboard.cのKMX_MONITORを1に変更してビルドして、PICに書き込んでください。
#define KMX_MONITOR 0 // 0...Operation 1...Matrix Monitor
メモ帳を開いてください。
キーボードを繋いで、キーを押してください。メモ帳にスキャンコードが表示されますので、これをメモしてください。
ここで注意点があります。ゾロ目のスキャンコードは、1文字で表示されることがあります。(例:33→3、77→7)
スキャンコード3や7は、03や07と表示されますので、識別できます。
4.変換テーブルの書き換え
keyboard.cのKMX_MONITORを0に戻します。
#define KMX_MONITOR 0 // 0...Operation 1...Matrix Monitor
※動作が不安定な場合は、下記の遅延の値を大きくするなどして調整する
// Delay100TCYx(1); // 0.05us x 4 x 100 = 20us = 0.02ms
Delay1KTCYx(1); // 0.05us x 4 x 1000 = 200us = 0.2ms
調べたスキャンコードをもとに、keyboard.cの下記(キーボードスキャンコード→USBスキャンコード)を書き換えます。
USBのスキャンコードは、"usb scancode"でググって調べましょう。
// EEPROM Map:KEY MATRIX to USB SCANCODE
#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
あと、Fnキー、GHOSTキーの設定項目がありますが、ややこしいのでここでは無効にしておきます。
#define FN_KEY 0xFF // HHK like Fn key: 0x68=Caps Lock
#define GHOST_KEY_REDUCTION 0 // 0...Disabled 1...Enabled
同様に、特殊キーもここでは放置します。
変更が終わったら、ビルドして書き込みます。
5.動作確認
ジャンパピン短絡が外れているのを確認して、基板を接続してください。
メモ帳を開いて、キーを押してください。
PR
1.部品配置の決定
配線ができるだけ短いほうがいいのですが、高周波ではないのでそれほど気を使わなくても大丈夫。
組み立てやすさを最重要視して配置しましょう。
2.基本パーツの確認
18F4550の動作確認wするために最低限必要なパーツの組み立てをします。
下記パーツがあることを確認します。
程よい大きさのユニバーサル基板
ジャンパピン(1X2ピンヘッダ)
PIC18F4550(DIP)※HID bootloader(改)書込済
40ピンICソケット
20MHzセラロック
2X2ピンヘッダ(L型)
積セラ104(0.1μF)
抵抗4.7KΩ~10KΩ:2本(プルアップ用)
ハンダ:少々
線材:それなり
3.基本パーツの組み立て
サンプル回路(回路図、ボード図)や組み立て例をを参考に、キーボードマトリックス接続以外を組み立ててください。
ケース内USBケーブルを2X2ピンヘッダに接続してください。5V(VCC),GND(VSS),D+,D-を間違えないように。
ジャンパピンを短絡してください。
組み終わったら、テスターなどで5V、GND間の抵抗を測定して、ショートしていないか確認してください。
確認は必須ではありませんが、ショートしていればPCに接続した瞬間にPCが落ちます(体験済み)。運が悪ければ二度と起動しません。
↓組み立て例
4.基本動作確認
HIDBootLoader.exeを起動してください。これは"C:\Microchip Solutions\USB Device - Bootloaders\HID - Bootloader"に置いてあります。
起動すると、"Device not detected. Verify device is in bootloader mode."と表示されるはずです。
この状態で、組み立てた基板を接続してください。ピポッと音がして、"Device attached."と表示が変われば正常に動作しています。
5.keyboard2.zipのコンパイル
"C:\Microchip Solutions\USB Device - HID - Keyboard2\Firmware"にある"USB Device - HID - Keyboard- C18 - PICDEM FSUSB.mcp"を起動します。
Project -> Build All でビルドしてください。USB Device - HID - Keyboard- C18 - PICDEM FSUSB.hex ができていればO.K.です。
6.ファームウェア書き込み
HID Bootloaderで、Open Hex Fileをクリックします。もちろん、"Device attached"の状態でないといけません。
"C:\Microchip Solutions\USB Device - HID - Keyboard2\Firmware"にある"USB Device - HID - Keyboard- C18 - PICDEM FSUSB.hex"を選んでください。
Erase/Program/Verify Completed Successfullyと表示されればO.K.です。
途中で止まった場合はプロセスが異常動作していますので、タスクマネージャから強制停止するかPCを再起動してください。
7.キーボードとしての動作確認
デバイスマネージャを起動してください。キーボードのところを確認しておいてください。
ジャンパピン短絡を外してください。
基板を接続してください。キーボードに"HID キーボードデバイス"が追加されていればO.K.です。
配線ができるだけ短いほうがいいのですが、高周波ではないのでそれほど気を使わなくても大丈夫。
組み立てやすさを最重要視して配置しましょう。
2.基本パーツの確認
18F4550の動作確認wするために最低限必要なパーツの組み立てをします。
下記パーツがあることを確認します。
程よい大きさのユニバーサル基板
ジャンパピン(1X2ピンヘッダ)
PIC18F4550(DIP)※HID bootloader(改)書込済
40ピンICソケット
20MHzセラロック
2X2ピンヘッダ(L型)
積セラ104(0.1μF)
抵抗4.7KΩ~10KΩ:2本(プルアップ用)
ハンダ:少々
線材:それなり
3.基本パーツの組み立て
サンプル回路(回路図、ボード図)や組み立て例をを参考に、キーボードマトリックス接続以外を組み立ててください。
ケース内USBケーブルを2X2ピンヘッダに接続してください。5V(VCC),GND(VSS),D+,D-を間違えないように。
ジャンパピンを短絡してください。
組み終わったら、テスターなどで5V、GND間の抵抗を測定して、ショートしていないか確認してください。
確認は必須ではありませんが、ショートしていればPCに接続した瞬間にPCが落ちます(体験済み)。運が悪ければ二度と起動しません。
↓組み立て例
4.基本動作確認
HIDBootLoader.exeを起動してください。これは"C:\Microchip Solutions\USB Device - Bootloaders\HID - Bootloader"に置いてあります。
起動すると、"Device not detected. Verify device is in bootloader mode."と表示されるはずです。
この状態で、組み立てた基板を接続してください。ピポッと音がして、"Device attached."と表示が変われば正常に動作しています。
5.keyboard2.zipのコンパイル
"C:\Microchip Solutions\USB Device - HID - Keyboard2\Firmware"にある"USB Device - HID - Keyboard- C18 - PICDEM FSUSB.mcp"を起動します。
Project -> Build All でビルドしてください。USB Device - HID - Keyboard- C18 - PICDEM FSUSB.hex ができていればO.K.です。
6.ファームウェア書き込み
HID Bootloaderで、Open Hex Fileをクリックします。もちろん、"Device attached"の状態でないといけません。
"C:\Microchip Solutions\USB Device - HID - Keyboard2\Firmware"にある"USB Device - HID - Keyboard- C18 - PICDEM FSUSB.hex"を選んでください。
Erase/Program/Verify Completed Successfullyと表示されればO.K.です。
途中で止まった場合はプロセスが異常動作していますので、タスクマネージャから強制停止するかPCを再起動してください。
7.キーボードとしての動作確認
デバイスマネージャを起動してください。キーボードのところを確認しておいてください。
ジャンパピン短絡を外してください。
基板を接続してください。キーボードに"HID キーボードデバイス"が追加されていればO.K.です。
1.必要なもの
①C18コンパイラ
②MCHPFSUSB Framework2.5a(他のバージョンではダメ)
③keyboard.zip
④部品一式
2.C18コンパイラのインストールについての注意
入手方法やインストール方法は、あちこちに書いてあるのでここでは述べません。
注意点はただ1点。デフォルトインストールすること。
フォルダーなどをデフォルトから少しでも変更すると、フレームワークは使えません。
3.フレームワークのインストールについての注意
入手方法やインストール方法は、あちこちに書いてあるのでここでは述べません。
注意点はただ1点。デフォルトインストールすること。
フォルダーなどをデフォルトから少しでも変更すると、フレームワークは使えません。
フレームワークをインストールしたあと、keyboardデモがビルドできるか確認してください。
C:\Microchip Solutions\USB Device - HID - Keyboardにあります。
ビルドできないことはないと思うのですが、できない場合はできるようになるまでがんばってください。
4.keyboard.zipのインストールについての注意
すでにこの情報を見ている人なら、入手方法はすぐにわかるはずです。どこかに置いてありますので、探してください。
インストールする方法については、
①解凍する
②USB Device - HID - Keyboard2フォルダーをC:\Microchip Solutionsにコピーする
おわり。
5.部品一式
程よい大きさのユニバーサル基板
ジャンパピン(1X2ピンヘッダ)
ジャンパピン短絡コネクタ
PIC18F4550(DIP)※HID bootloader(改)書込済
40ピンICソケット
20MHzセラロック
2X2ピンヘッダ(L型)
積セラ104(0.1μF)
抵抗4.7KΩ~10KΩ:2本(プルアップ用。推奨は4.7KΩにしておくが10KΩのほうがエコ的にいいかも)
抵抗300Ω~4.7KΩ:3本(LED電流制限用。暗くていいのなら4.7KΩ。赤以外は暗くなりがちなので1KΩのほうがいいかも。)
キーボード接続用ピンヘッダ:適量
ケース内USBケーブル(カモンAM-MBみたいなもの。よく見て買わないと間違えます。)
USB延長ケーブル(上記のケーブルが短すぎるとお嘆きの方へ)
ハンダ:少々
線材:それなり
※もちろんHID bootloader(改)書き込み済みPICは、市販されていません。
ひょっとしたら誰かがオークションで流してくれるかもしれません。
自分で書き込む場合は、PICKit2等が必要です。
※ジャンパピンは、高さを取らないL型が理想ですが、無ければ自分で折り曲げてもいいかも。
※プロならパスコンを何個か電源周りに付けるのだろうが、ノイズ対策できないアマチュアは付けない。
①C18コンパイラ
②MCHPFSUSB Framework2.5a(他のバージョンではダメ)
③keyboard.zip
④部品一式
2.C18コンパイラのインストールについての注意
入手方法やインストール方法は、あちこちに書いてあるのでここでは述べません。
注意点はただ1点。デフォルトインストールすること。
フォルダーなどをデフォルトから少しでも変更すると、フレームワークは使えません。
3.フレームワークのインストールについての注意
入手方法やインストール方法は、あちこちに書いてあるのでここでは述べません。
注意点はただ1点。デフォルトインストールすること。
フォルダーなどをデフォルトから少しでも変更すると、フレームワークは使えません。
フレームワークをインストールしたあと、keyboardデモがビルドできるか確認してください。
C:\Microchip Solutions\USB Device - HID - Keyboardにあります。
ビルドできないことはないと思うのですが、できない場合はできるようになるまでがんばってください。
4.keyboard.zipのインストールについての注意
すでにこの情報を見ている人なら、入手方法はすぐにわかるはずです。どこかに置いてありますので、探してください。
インストールする方法については、
①解凍する
②USB Device - HID - Keyboard2フォルダーをC:\Microchip Solutionsにコピーする
おわり。
5.部品一式
程よい大きさのユニバーサル基板
ジャンパピン(1X2ピンヘッダ)
ジャンパピン短絡コネクタ
PIC18F4550(DIP)※HID bootloader(改)書込済
40ピンICソケット
20MHzセラロック
2X2ピンヘッダ(L型)
積セラ104(0.1μF)
抵抗4.7KΩ~10KΩ:2本(プルアップ用。推奨は4.7KΩにしておくが10KΩのほうがエコ的にいいかも)
抵抗300Ω~4.7KΩ:3本(LED電流制限用。暗くていいのなら4.7KΩ。赤以外は暗くなりがちなので1KΩのほうがいいかも。)
キーボード接続用ピンヘッダ:適量
ケース内USBケーブル(カモンAM-MBみたいなもの。よく見て買わないと間違えます。)
USB延長ケーブル(上記のケーブルが短すぎるとお嘆きの方へ)
ハンダ:少々
線材:それなり
※もちろんHID bootloader(改)書き込み済みPICは、市販されていません。
ひょっとしたら誰かがオークションで流してくれるかもしれません。
自分で書き込む場合は、PICKit2等が必要です。
※ジャンパピンは、高さを取らないL型が理想ですが、無ければ自分で折り曲げてもいいかも。
※プロならパスコンを何個か電源周りに付けるのだろうが、ノイズ対策できないアマチュアは付けない。
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)と呼ばれている。
キーボードと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)と呼ばれている。
マウスが要らない場合は、こっちの方が使いやすいと思う。
ほぼ、MCHPUSBのKeyboard Demoそのままだけど、キーボードマトリックス読み取りやファントムキー対策を埋め込んである。
ちなみにPIDもKeyboard Demo(0x0055)そのまま。
この前のHID Composite device Keyboard + Mouseは、PIDを"USB Device - Composite - HID + MSDデモ"のPID(0x0054)に変えた。バッティングするの気持ち悪いし、HID+MSDやる人なんてほとんど居ないと思うし。
https://blog.cnobi.jp/v1/blog/user/0f56daaba6df0301724d7ee2124f5219/1251637343
ほぼ、MCHPUSBのKeyboard Demoそのままだけど、キーボードマトリックス読み取りやファントムキー対策を埋め込んである。
ちなみにPIDもKeyboard Demo(0x0055)そのまま。
この前のHID Composite device Keyboard + Mouseは、PIDを"USB Device - Composite - HID + MSDデモ"のPID(0x0054)に変えた。バッティングするの気持ち悪いし、HID+MSDやる人なんてほとんど居ないと思うし。
https://blog.cnobi.jp/v1/blog/user/0f56daaba6df0301724d7ee2124f5219/1251637343