ちょっとTea Time!? PS/2のキーボードを調べてみる! 2020.10.29

CPM68K用のVIDEO-RAMもできたので、独立で動かすために必要なハードとして残るのはキーボードだけです。
キーボードといっても、最近のはUSB接続のものばかりです。今、常用しているものは無線用ですがUSBでも使えるので、
これを使いたいので、とりあえずUSBからPS/2に変換できるアダプターを探してみました。

実は、昔にUSBのキーボードを買ったときに、変換アダプタターがついていたのですが、こんなものいらねーと思って捨ててしまいました。

で、改めてAMAZONで探してみると300円で見つかりました。でも「あわせ買い対象商品」になっています。
これを買うために、さらに要らないものまで買うのもなんだしな〜と思ってさらに探してみると、2個で500円ちょっとのものがありました。
でも、2個も必要ないしな〜・・・・・・・
 でも、一番気になるのが商品評価をみていると、星1つが結構多いようです。中身をみていると、「動かない」といった内容のようです。
これは、これで買うのも躊躇われます。

300円で買えるのですが、あわせ買い対象になっているのでその他も含めて2000円以上購入する必要があります。ちょっと保留。



こちらは、2個で549円ですが、1個でいいんですよね・・・・。それに動かないというレビューがかなり多い気もします。

PS/2キーボード大捜索!

DOS/Vを使うようになってからかなり時間もたつし、それまでに何台かキーボードを買っているはずなので、ひょっとしたら押入れのどこかに
眠っているかもしれません。ということで、夜だけど大捜索です。で、1台みつかりました。
持ち上げてみると軽いです。おそらく、一番安そうなものを買ったのでしょう。


PS/2のキーボードが1台みつかりました。


サンワサプライの製品です。

おそらくかなり昔にかったのかな〜と思いましたが、シリアルNOをみると2016から始まっているので、そんなに昔のものでもなさそうです。
まだAMAZONでも同じ型番のものが売られています。でも、2016年ごろだと、PS/2の入力端子すらなくなっているPCがでている頃だと
思うけど、なんでこんなもん買ったのだろう? 全然おもいだせません。PS/2のキーボードしかつかえないPCでもあったのかな〜???
ちなみに、今つかっているPCは数年前に買った中古ですが、それでもPS/2入力端子はついていないです。


まだ同じものが売られていました。

とりあえず調べてみましょう!

PS/2の信号をしたべたWEBはいくつもありますが、中には通信速度が9600bpsとか、間違った情報のものもあります。
ここは、自分の目で確かめておいたほうがいいでしょう。
ということで、秋月で買っておいたPS/2コネクタの変換基板をつかってブレッドボードで信号をとりだします。
PS/2の出力はオープンコレクターのようなので、4.7kΩのプルアップ抵抗をいれています。

PS/2用の変換基板をつかって信号を取り出します。

PS/2のデータ信号はクロックの立下りでサンプルされる11ビット(1スタートビット、8ビットデータ、1パリティビット、1ストップビット)で
構成されています。そこで、スペースキーを押しながら、送信されるデータを観測です。
 観測にはディジタルオシロをつかえば簡単でしたが、以前につくったADボードが最近遊んでいるので、それを使うことにしました。
ちょっと波形の立ち上がりが鈍ってしまっていますが、まあなんとかわかります。
 まずは出てくるデータを確認できました。あと、知りたかったのはキーを押し続けたときにどの程度の間隔でリピートされるかですが、
およそ90msのようです。この間隔ならば、1回のデータを処理したあとにキーの内容を判別する時間は十分に取れます。
ただし2バイト以上のコードとなる場合は、その間隔は10ms以下になるようです。


スペースを押したときのデータです。


キーをおしつづけると、約90ms毎にリピート出力がでてきます。


2バイトコードの時は、10ms程度の間隔で送られるのでちょっと注意が必要です。

プログラムを作りましょう!

仕様としては、PS/2のキーボードのデータをASCIIコードに変換してRS232で出すプログラムです。
このくらいなら18PinのPIC1個で十分でしょう。

オープンコレクターの出力の遅れは? 2020.11.3

プログラムを組む前に、すこし調べておくものがあります。
CPM68Kの入力はPS/2キーボードからできるようにするのですが、同時にPCからのUSB-RS232変換器からも
信号を受けるようにします。というのも、PCにつながるようにしておけば、外部でのテキストの編集等でなにかと
便利なためです。
 そのために、PS/2ならびにUSB-RS232の出力はオープンコレクター出力に変更してワイヤードORにします。
そこで、気になるのがトランジスタのスイッチングの遅れです。転送速度は最低でも11520bpsを確保したいにで、
そうなると転送レートは1ビットあたり8.7usです。調歩同期での通信なので、送受で互いの時計が正しいとしても、
時間遅れが8.7us/2未満でないといけません。普通に考えたらもっと小さい値です。8.7us/4とすると2us以下には
遅れを押さえたいものです。
 でも、普通のトランジスターをオープンコレクターでつかって、この速度ってでたかな?
すこし、心配になって調べてみました。
 

オープンコレクターのトランジスタはON時は早く応答しますが、OFF時は約2usの遅れが生じます。

調べた結果が、上の写真になります。オープンコレクターのトランジスタはON時の動作は速いですが、
OFF時はのんびりです。約2usの遅れが発生しています。まあ、許容範囲ではありますが、通信速度を
さらに早くするとアウトだなあ〜。
 こりゃ、オープンコレクタータイプのロジックICを使うか、3ステートのゲートをつかってオープンコレクター
の出力を得る必要がありそうです。

PICのIOでオープンコレクター出力に
そういえば、PICのIO出力をオープンコレクタ(正確にはオープンドレイン)みたいな使い方ができました。
出力をLOWにするときは、そのままLOW出力にすればよく、HIGHにするときは、出力を入力設定(開放)
にしてやれば、自動的にオープンコレクタのような振る舞いになります。
 こすれば、外付け部品なしにPICだけで高速なオープンコレクター出力が得られそうです。


変換基板をつくりましょう! 2020.11.5

小さい基板にPS2コネクタの変換基板とPICを搭載します。最初はPICを1個だけで済まそうかと思いましたが、
出力をオープンコレクターとして使うためには、IO端子を出力モードあるいは入力(フロート)に頻繁に切り替える
必要があります。そうなるとPIC内蔵のUARTが使えないので、サブルーチンを組む必要があります。このサブルーチン
では所定のボーレイトになるように時間管理が重要になるので、すこし面倒です。ということで、内蔵UARTをつかって
既定のサブルーチンがつかえるように、3ステートのバッファを搭載することにしました。これ1個搭載するだけで、
ソフトウエアの負荷がずっと軽くなります。


秋月のPS/2コネクタの変換基板を使いました。3ステートバッファーは74AHC125をつかいました。

テーブルつくりが面倒です

ハードの作成は比較的楽しいのですが、ソフト作成はすこし面倒です。なにが面倒かといえば、スキャンコードをASCIIコードに
変換できるテーブルをつくらなければなりません。スキャンコード表自体はネットを調べると色々とでてきます。
これを一旦、エクセルにコピーして、スキャンコードでソーティングをかけて配列データをつくります。
すなわち、スキャンコードからダイレクトにASCIIコードに変換できるようにするわけです。
 ソフト自体は単純にPS/2のコードを受け取ったら、それを変換テーブルでASCIIコードに変換して、RS232出力するだけです。
極めて簡単です。まあ、スキャンコードには2バイト以上のコードもあるので、すこし手をいれることになりますが、
基本部分である変換テーブルができてしまえば、あとの手間は大したものではありません。


PS/2キーボードのスキャンコード表です。
出展:http://www.ne.jp/asahi/shared/o-family/ElecRoom/AVRMCOM/PS2_RS232C/KeyCordList.pdf



スキャンコードの表から、変換テーブル(配列データ)を作成します。これが面倒です。

動作確認はPCで
 簡単なおソフトでも、一発で動くことはまれです。デバッグのために、正しく変換できているかを確認するために、
RS232-USBの変換基板を接続して、PC上の変換されたコードを確認しながら進めます。

動作確認にはUSB-RS232の変換基板をつかってPC上で
正しく変換がされているかを確認します。

完成!
 PS2キーボードの出力をASCIIコードでRS232C出力できる変換基板が出来上がりました。
さっそく、CPM68Kにとりつけて動かしてみます。

CPM68Kに取り付けです。ワイヤードORで取り付けましたが、ちょっと問題発生・・・・。

PC上で変換基板の動作は確認しているので、あとはすんなり動きました。
これで、いちいちPCを動かさなくてもCPM68Kがつかえるようになりました。
電源投入2秒後にコマンドプロンプトがでてくるので、結構快適です。
といっても、できることは限られていますが・・・・・。
あと、本当にPC離れができるようにするためには、スクリーンエディターは必須です。
簡単なものでもいいので、つくらないとだめです。


PC不要で使えるようになりました。ただし、スクリーンエディタがないので、作らないと!

課題もある・・・・

キーボードの出力(RS232信号)はPC(USB)からとPS2キーボードからのどちらでも使えるように
ワイヤードORにしています。どちらのキーボードを押しても反応する点は便利なのですが、
どうやらPC(USB)につながるRS232の変換チップは電源が入っていないときに、色々な擬似信号がでるようです。
そのため、途中でCPM68KからUSBケーブルを引っこ抜くと、画面に余分な文字が表示されて動かなくなります。
USBケーブルを差し込んだときだけ、RS232C信号をアクティブにする回路が必要な感じなのですが、
あまり基板上にロジックICを入れる隙間もないので、すこしかっこ悪いですがスイッチを挿入することにしました。
 デフォルトのキーボードはPS2で、PCのキーボードも使う場合はスイッチを入れて使います。
まあ、今後の改善課題です。

さて、次はスクリーンエディターだな〜。

さて、そろそろこのTeaTimeも、このままだと長くなりそうなのでお開きです。

(おしまい)