●作るって軽く言いますけどねぇ・・・
軽く言いますが、結構手間です。
コピーならそのまま作れば動くんですよ。
2000円クラスのプラモデルみたいなものです。
正直、何かやりたいことがあるのでなければ、あまり「自作する」という結論に達したくありません
今回、USB化する、USBに対して仕様差部分を最適化したいってのがあったのでやりますけどね。。。
●結局、どうなったか
こうなりました。
ええ、できましたよ。。。
写真はPC-9801中期のキーボード、怪しい物体がUSBへの変換器です。
●せっかく作ったんだから、説明概略
使用マイコンはmbed。
エンベッド、テンション高いときはエェェェンベッドって読むとのこと。
正確には、使用マイコンはCortex-M3 96MHzというARM系マイコンですね。
これの搭載された評価用Rapid開発ツールであるmbedをそのまま使っています。
売り文句が「箱を開けてから10分以内に Lチカ(または、Hello World)」。
この、青いボード部分がmbedです。青いので青mbedと呼ばれます。
くれぐれも青いものを買ってください。
以下、mbedと言ったらこれだと思ってください。
そして基盤部分には、☆board Orange という、きばん本舗さん(怪しい名前ですが、その手では結構有名どころなのですね。)でプロデュースしているベースボードをほぼそのまま使用。LCDユニット含むオレンジ色の基盤がそれ。
Amazon、きばん本舗、秋月、マルツなどで完成品が4011円程度で売られております。トラブルを起こしたくない方は完成品を買いましょう。
以下、ただベースボードといいます。
緑色の基盤は??
・・・それは、自分で作った部分。以下ドーターボードといいます。
●マイコンの選定理由
正直、このmbed LPC1768というマイコンは、コントローラとして考えた時、比較的高価な部類に入ります。
1個5800円~10000円くらいで売っている業者もいます。
しかし、これを選んだのには、れっきとした理由があります。
①開発環境(ROMライターなどのハードウエア、コンパイラなどのソフトウエア)が不要。
②USB使用のための外付け部品が不要。
よって、たった一回の作成のために、数万円のライターを買ったり、コンパイル環境や特殊なセットアップが不要であること、なにより、コンパイル済のプログラムを書き込むだけならば、USBコネクターをPCにつないで、USBメモリーのようにしてプログラムをコピーするだけで焼きこめること、これが魅力なのです。
量産するならば向いてないでしょう。
しかし、ここのWebを見て、複製する方は、
1)たった1個作りたい。
2)中身なんてどうでもよくて、なるべく簡単にまねして作りたい。
3)ハンダ付とかもめんどいので、部品数もなるべく少なくしてほしい。
4)必要な材料も、マルツの通販で手に入る程度の一般的なものであってほしい。
5)ケースの加工?面倒だからそんなものナシで!!
とお考えになるでしょう。
少なくても、この1個のためにPICライターのような専用機材を作る気なんてないでしょう。
開発者と使用者はまったく視点が違うのです。
まごの手さんのGKA98ATですら、使用者の立場としてみれば、おそらくPICの取り扱い的にも、回路作成上の部品点数的にも敷居が高いかと思っております。
それが故に、多少高くても、それさえ買えばあとは不要、というようなものを選びました。
(逆にカスタムを視点に入れている人は、安いコンピュータへの移植なんて簡単にできると思います)
●開発ベンチを含む環境の作成。
①LCDの3.3V駆動化
今回USBバスパワーで動かします。
ということは、5V、実際はPCの供給能力なんて当てにできませんので、手元に来るのはこれを下回る可能性もあります。
最初にベースボードについているのは5V駆動品です。マルツや秋月の通販で3.3V駆動キャラクターLCDという品がありますので、これを買ってそのまま差し替えます。TC1602Eという名前で検索すると出てくると思います。
コネクター用のDIPピンが付いていないことがあるので、2列14ピンのDIPピンも同時に買いましょう
②ベースボードへの変更
今回、ベースボードに付属のUSBをPCと接続して動くので、そこから電源を搾取できるようにします。
ちょうどmbed実装部分下の逆止ダイオードの足とセラコンの足をショートします。
③追加ドーターボードの作成
キーボードへのインターフェイスと電源供給のために、mbedの足とベースボードの足の間に基盤を一枚挟み込みます。
④ソフトウエア作成
mbedのweb開発環境ですべて行います。
事前準備はアカウント作成することくらい。ここのコードをそのまま使うなら、準備不要です。
●ハードウエア作成の部(開発環境含む)
よけいな話ですが、ワンチップを使ったこういうのって楽しいですよね。
かんたんな機構でやれることが多い、ということもある一方、地に足つけて物を作っている感があります。
実際私のものは試験用に多少回路を追加していますが、基本はこれだけでいいです。
①LCD3.3V化
まず、買ったままの状態のベースボードにMBEDをさします。
そしてmbed書き換え用のUSBから給電して簡単なプログラムを動かします。
しかし、電源電圧が足りなくてLCDが映りません。
これを、3.3V用のもの(写真は赤文字バックライトつき)に入れ替えます。
同時にmbedとLCDユニットの間にある3つのDIPショートピンの一番右を3.3V側に差し替えます。
バックライトが光るのがわかったら、青い可変抵抗を回して明るさ調整します。
映るようになりました。
(これは別ボードで撮影しており、実際は斜めからの視認性から青いLCDで作業を進めています)
②ベースボードへの細工
いったんmbedを外します。すると、その下の部分はこんな風になっています
さらに拡大、。この緑のところをジャンパー線などでショートさせます。
これで、LCDとmbedに対して、ベースボードのUSB Aタイプからの給電ができるようになります。
出来上がりは以下の通り。
(未加工品の写真は、別個体ですのであしからず)
とりあえず、ベースボードの加工はこれで終了
これで、最初の写真のようにmbed側のミニUSBに電源供給しなくてもこのボードが動くようになります。
③ドーターボードを作る
まず、イメージを伝えるために、完成品をお見せします。
多少、よけいな回路やショートピンが立っていますが実際は不要なものも多いです。詳細は回路図に従ってください。
最終的には上の写真のように、ベースボードとmbedに挟み込むような形で設置します
横から見ると、こんな感じです。
下の写真では、ユニバーサル基盤のスルーホール越しにmbedがベースボードに刺さっていますね。
なんでこんなことをするのか?ベースボードにスタックすれば早いじゃん。
いや、実はこっちのほうが早いんですね
そこで出てくるのが、以下の写真です。
mbedの差口ですが、上下ともに2列になっています。
内側はmbedの足が刺さる。外は・・・実は空いているんですね。
しかも、ここの2列、さらにその横の1列のスルーホールはすべて電気的につながっているんです。
つまり、こういう風につなげたい足の隣にピンを立てると自然に隣の信号がひっぱってこれる。
だから、配線が楽。ドーターを抜いてしまえば、ほら元通り。
こんな風にね
ちなみに、ピンは、パーツ屋さんでこんなのを売っているはずです。
と、これを頭においておいて、以下の通りになるように配線します。
ちなみに、今回、デバッグもする前提で作成していますが、LCDも不要で最小構成で動かした方は、たぶん、以下で動くかと思います。
思います・・・ってのは、やってないから。
面白いので、LCDつけたまま使っちゃってます。
●ソフトウエアの部(開発環境含む)
あとはソフトだけですね。
うん、9801のキーボードの通信仕様が簡単に見つかるなら、確かにそうですよね。
・・・で、も、ね、
ネット上で2000年以前のこの類の技術情報を見つけるのは至難です。
実際、9801の通信レベルの仕様の乗った情報は、インターネット上にほぼ皆無です。
結構調べました。
本体側キーボードインターフェイスに対しての命令なら乗っているんですよ。
でも、キーボード側マイコンに投げかけるシリアル通信規格はないです。
結果として、諸兄方が独自の解析結果、作ったソースコードが唯一の頼りかと思います。
・・・ぶっちゃけ言います。
今回、その辺はほとんど「まごの手本舗」さんのソースコードから情報をパクりました。
そしてUSB送信部分は、
1)mbedのオンライン開発環境から「USBDevice」を引っ張ってきて・・・
2)これをライブラリに追加(置き換え)して・・・
3)これと同じ処理をライブラリーに追加して
4)BOOT protocolに対応するように、キーコード送るたびにDeviceIDを変更しないように変更し、
5)なぜか、キーOFF処理をライブラリーでやっているのを削除し
・・・もう、ソースコード見たほうがいいかも。。。
だいたい、4番あたり、トホホですよ。。。ライブラリなのに。。。
で、4,5あたりは最初気が付かなくて、USBのプロトコル解析して気が付いた。
ところで、ここ重要です。
USBのプロトコル解析ソフトですが、ネット上でいくらか売っていますが、買う必要まったくないです。
というか、マイクロソフトがタダで公開してるのに、なんで売ってるのかよくわかんない。
WMA(Windows Message Analyser)というツールをマイクロソフトが公開していて、使い方はこちらに書いてあって、、、ってわけで、まったく金払って買う必要ないです。
http://blog.prtissimo.com/wma/
●こちらも結論
以下、motファイル。バージョン2.01
USBKeyboard_98toPC LPC1768(青MBED用)
通信失敗周りの処理やOS起動前の動作については未対応。
【参考】
エクスポートしたソース一式(JISコードで開いてくださいな)
※青MBED用です
グローバルでよっこらしょしているので、あまりそのへん突っ込まんでくれ。
●相変わらず結論の後にグダグダと。
バグについては、ちょこちょこと直して、たまに突然アップデートします。
使いながら動作確認していますので、適宜悪いところが見つかるたびに直しています。
今後の予定
・後期キーボード(特にミネベア製。)への対応。
現状、中期のもののいいキーボードに合わせてキリキリチューンしているのでそのままだと動かないと思う
後期でもNECのものはまだ動くかもしれないけど、、、ミネベア製は制御タイミング的にかなりダメかと。
….
やっぱ、ネックはLED制御中のキー入力で、このタイミングで打たれると必ず取りこぼしてしまう。
あと、黄mbedだと、C言語ゆえのアセンブラに比べるとの処理の遅さがちょっと気になる。
ただ、LED制御自体が、CAPSやNUM,スクロールロックがかかった瞬間しか働かないので、意図的にやらなければほぼ出ませんし(CAPSロックと同時に何かキーを入力する人、いますか?っていう意味で。普通、この類のキーは、高速タッチ真っ最中に押されることはないでしょ。)、自動復帰はするのですけどね。
・・・ほかの方の参考のために厳密にいうと・・・
98キーボード側の送信のクセというか、たぶん仕様なんですが、LED制御は、まず、USB側からステータスを取得し多後に、キーボード側に下り命令を行ってAckが帰ってきて、を2往復行います。この間に、キー入力されると、たぶん、特にUSBホスト経由でLEDステータスを持ってきている間にキー入力されると、そのデータがたぶんキーボード側のバッファー(たぶん8ビット)にぶち込まれて、下り命令が来たあとにAckを返すべきところで、このキー入力信号が帰ってくる。。。これが問題になっていると思う。
たぶん、同じ類の問題を、GKA98ATは、LED制御を遅らすことで対応している気がする。
単なる、現状での予測ね。
とりあえず、この問題で停止してしまわないようにはしているし、かなりスポットなタイミングなので、普通は問題にならないです。