2020年4月30日木曜日

Key Ichigo 2

KeyIchigoが概ね動作していることがわかりましたのでハードウエアの紹介をしておきます。

KwyIchigo ハードウエア編

まずは写真をご覧ください。基板は経済寸法の10㎝x10㎝です。

簡単な説明

LCDソケット:モバイルモード用128x64ドットLCD用ソケット
バックライトSW:LCDのバックライトON/OFFスイッチです。
W-Fi モジュール:WROOM02をのせてMixJuice互換になります。
EEPROM:Basicプログラム保存用の拡張ROMです。
電源コンバータ:1.9~5Vを3.3Vに変換します。これで乾電池でLCD点灯が可能となります。
電源スイッチ:左がONで右がOFFですが、逆がよかったかも。
LCD,ブザー:IchigoJam標準装備です。
ブザースイッチ:ブザーの音をOFFできます。
USB電源入力:5Vで使うときの電源コネクタです。
Groveコネクタ:センサーなど拡張用のGrove互換コネクタを実装できます。2mmピッチのコネクタがつかえます。
IJ CPU:いうまでもない、LPC1114FDH28。
タクトスイッチ:IchigoJam標準装備品です。
LED:キーボードのLEDですが使うことがないので要らないかも。
UARTポート:ATMEGA328のシリアルポートが出してあります。ブートローダを書き込んでUSB-シリアルアダプタなどをつなげればArduinoIDEでプログラムできる(筈)。
キーボードデコーダ:ATMEGA328を1MHzで使っています。プログラムはソフトウエア編をご覧ください。(Linkを追加しました。)
USBポート:IcjigoJamにつながっている配線の端子を設けました。上下を切り分ければ下半分はPS2キーボードとして動作するように作ってあります。
プログラムポート:GTMega328に書き込むための6ピンコネクタです。
その他:左下の方にキースイッチの間にある小さな部品はマトリクス用のダイオードです。3個使っています。


RCAコネクタは裏につけられます。

LCD載せ

F1~F12は、Funcキーを押しながら最上段のキーを押します。
「-/=」を「=/-」とシルク印刷してしまいました。逆ですね。

電源

Wi-Fiを使うときは、乾電池3本または5V電源で使います。
Wi-Fi の電源は、中央にLDO用のパッドが用意されています。C6にはOSコンをのせて使います。

Wi-Fiを使わないときは、乾電池2~3本または5Vで使います。電圧範囲は1.9V~5Vです。

その他

Groveコネクタは合計6個です。3個はI2Cがつながっています。残りにはOUTがつながっていますので、I/Oとして使うことができます。
IchigoJamは素直に実装されています。
LCD右上のパッドは、I2C接続の温度センサーです。
「10 SWICH 1」を自動起動させると電源ONでLCDが使えますよ。

LINK他

IchigoJamはjig.jpの登録商標です。
詳しくはこちら




Key-Ichigo

IchigoBoyのフルキー版を考えてみました。

Key Ichigo キイチゴ キーボードソフト編

概要

コンセプトは「ポケットIchigoJam」です。
キーデコーダはATMEGA328Pを使う。
素直なキーマトリクスだとピン数が足りないので一工夫必要でした。
FirmwareはArduinoIDEでつくる。
キー配列はフルキー同等にする。(10キー無し)
LCDもつけてポケットPC化する。(Vidoeコネクタは残す)
ついでにMJとかROM、 センサー用コネクタとかも載せてIoTにも対応。
28ピンソケットは対応。5ピンソケットは位置がずれます。
10㎝角の基板に全部載せます。



最小構成

LINKなど。

猫にコ・ン・バ・ン・ワ のページを参考にさせて頂きました。
ps2dev を使うとマウスとキーボードをエミュレートできるらしいのですが、すでに作ったことがあるので、ライブラリは使わずにコーディングします。

自分でP/S2をプログラムしてみたいので仕様をこちらで拝見しました。
https://www.technoveins.co.jp/technical/keyboard/
https://www.avrfreaks.net/sites/default/files/PS2%20Keyboard.pdf

名前はFB友につけて頂きました。ソフトのトラブルも解決ヒントをFBのIchigoJam-Fanでいただいています。そちらもよろしければご覧ください。

以下、整理します。というより丸写し。

PCとの通信ハンドシェーク

  • PCがCLK=0にしている:PCがBUSY
  • CLK=1、DATA=0:PCからの送信要求
  • データ送信は、CLK=1のとき、データを出してキーボードからCLKを操作する。
今回は1キーのみの対応なので次のようなフローになります。複数のキーが押されたとき最初のキーが離れた時点で次のキーを受け付けるようになります。シフトやコントロールキーはいつでも応答します。

1キー打鍵キーボードの処理
  1. DATA=1ならキースキャンを開始する。
  2. DATA=0ならPCからコマンドを受信して処理し1に戻る。
  3. 押下を検知したら、そのスキャンコードを送信する。
  4. キーのリリースを待つ。タイムアウトしたらオートリピートコード送信する。
  5. 当該キーのリリースを検知したらリリースコードを送信する。
  6. スキャンを続けるか、または1に戻る。
  7. Shift,ALT,CTRLは1と4のところで押下をチェックして別途コードを送信する。

PC->キーボードへの命令

  • 0xed + 0x00~0x07 : LED点灯制御(未確認)
  • 0xee : ECHO Responce要求 (対応)
  • 0xef~0xf2, 0xf7~0xfd: Nop (未対応)
  • 0xf3 + 1byte : Set Typematic Rate/Delay(未対応)
  • F4 : Enable キースキャン開始 (ACK返信)
  • 0xf5:Default Disable、初期化しスキャン停止(未対応)
  • 0xf6:Set Default、初期化(未対応)
  • 0xfe:Resend 再送要求(未対応)
  • 0xff:Reset。リセットしACKを返す。その後セルフテストを開始。(ACKを返す)

キーボードからPCへのコマンド

  • 0x00:バッファオーバーフロー(バッファサイズ16バイト)(未対応)
  • 0xaa:BAT Completed。Basic Assurance Testが正常終了した。(未対応)
  • 0xee:ECHO RESPONCE。ECHOコマンドへの応答(対応)
  • 0xf0:Break code prefix
  • 0xfa:Ack。ECHO, RESEND以外のコマンドの正常受信に対する応答コード
  • 0xfc: BAT Failure(未対応)
  • 0xfd:セルフチェックでエラー発生(未対応)
  • 0xfe:PCに対する再送要求(未対応)
PCからのコマンドはF4とFFにACKを返します。EDもプログラムはしましたが、2バイト目の受信は動作未確認です。IchigoJamが使わなければいらないし。

さて、いくつかのメモです。
クロック周波数は10~16.7KHz( 周期100~ 60uS)です。送信時は80uSに調整しました。受信時は適当です。
キーボードからホストに送信するときは、CLK=1を確認してからデータを書いてクロックをLOWにしてHIGHに戻すことを繰り返します。SPIをプログラムで送信するのと同じです。

ホストからキーボードに送るプロトコルはこうなっています。
  クロックを作るのはキーボードが行う。
  HOST->DEVICEのスタートビットはHOSTが作る。
  PCからキーボードへのデータの送り方。
    PCは100uS以上クロックを0にする。
    PCはDATAをLOWにする。(スタートビットに見える)
    次にクロックを1にするとデータ送信要求状態となる。
    キーボードは10mS以内にデータ読み出しを開始する。
    
これで条件がわかりました。あとはせっせとコーディングします。
PCからのコマンドは全てスルーしても一応動きますので、自作されるかたはまずそれから試せばよいと思います。

>>ハードウエア編につづく(予定)

ソフト編補足 2020年5月2日

IchigoJamのモニタ出力のDefaultはNTSCなのです。KeyIchigoは128x64のLCDが搭載されていますが、そのままでは切り替えないとLCDは点きません。
そこで、キーボードコントローラにIchigoJamからリセットコマンドが送られたら通常のACKにつづけて「F1+SWITCH1,5+Enter」を送信するようにしました。
これで、電源を入れるとLCDが表示を始めるようになりました。

LINK他

IchigoJamはjig.jpの登録商標です。
詳しくはこちら