最近、クラウドファンディングのM5StackベースのMSX0が送付されているようで、これでMSX界隈がにぎやかになってくるといいですね。でも個人的にはMSX0じゃなくてMSX3が楽しみなのですが、いったい何時になるのやら。
ところでMSX0ですが、わざわざM5StackにMSXのせてGroveデバイスを繋がなくても素のM5Stackで十分楽しめるんですけどね。MSXはエミュレータとのことですが、そうじゃなくてハードウェア(FPGAも有り)で復刻してもらいたいです。X68000 Zも。
さて、そのMSX0にはFaceキーボードといった小型のキーボードが付属するようです。それを知ったときに、手持ちのCore2(for AWS)にもキーボートをつなげてみたいという欲求がわいてきました。
どうせなら小型でタイピングしやすいものがいいと思い、ジャンク品として保存してあったキーボードを使うことにしました。
かなり昔にAmazonで格安販売していたWindowsCEベースのMeopad端末に付属していたキーボードです。本体は内蔵Flashを書き換えて遊んでいるうちに文鎮化してしまい捨てましたが、キーボードはとっておいたのです。
大きさは21cm×8cmほどで、とても打ちやすい良いキーボードです。キーボード下部にマトリックスの配線が引き出されていて手を置くときにちょっと邪魔なのが残念です。
さて、このキーボードのマトリックス配線ですが全部で23本ありました。内部の配線を見れないのでテスターで地道に調べたところ15x8のマトリックスになっていました。
これだけの線を扱うにはピン数の多いAVRかPICが必要です。そこで購入したのがこのPICです。
PIC18F4520-I/Pです。DIP40でピン数は十分にあります。でも実はこのPIC、間違えて購入したもので本当に欲しかったのはこれではなくPIC18F45K20-I/Pだったんです。
キーボードはCardKBと使い方に互換性のあるものにしようと思ってI2CのGrove端子につなぐことにしましたが、Groveは電源が5Vで信号線が3.3Vというイレギュラーなものになっています。そこでGroveの5Vを3.3Vに降圧して3.3Vで動作可能なPIC18F45K20を使いたかったのです。ところが型番の似ているPIC18F4520を買ってしまいました。しかもこのPICの動作電圧は最低でも4.2Vとなっていました。
このPICを使うには5V動作でI2Cを3.3Vに降圧するしかないのですが、I2Cはオープンコレクタなので抵抗による分圧は単純ではなさそうですし、レベルコンバータを使うには3.3Vの電源を作らなければならないので余計な回路が必要になってしまいます。
悩んだのですが、ありがたいことにこんなサイトを見つけることが出来ました。このサイトの考察によると、GroveのI2Cを5VでプルアップしてもM5Stackは動作するようです。そこでCore2を壊さないかちょっと心配でしたが、実際にブレッドボードに回路を組んで確認してみたところ5Vのままで動作しました。これならPIC18F4520でも大丈夫です。
ただ若干の不安はあったので、動作電圧をちょっとだけ下げるためにGove電源とPICの間にダイオードを挟んで電圧降下(0.7V~0.8V)させて動かしてみました。これでもPIC18F4520は動作しましたので、この回路を基板で組むことにしました。
I2Cは10KΩの抵抗でプルアップしました。キーボードが入手困難なのであまり利用価値はないと思いますが、PICのプログラムをアップしておきます。MPLAB X IDE v6.15とXC8 v2.45でコンパイルしています。ちなみにPIC18F4520はMCCがサポートされていませんでした。
M5Stack Core2のスケッチはこちらです。ここにあるCardKBのサンプルスケッチとほぼ変わりません。
CardKBにはSymとFnという特殊キーがあるようなのですが、Symは普通のキーボードのシフトキーと変わりませんのでPICのプログラムではシフトキーのみ実装しました。Fnキーは独自なのか、よくわからないコードを出力するので実装していません。今後必要になったら組み込むかもしれませんが。
文字の入力はもたつくこともなくスムーズに行えます。M5StackでCardKBを利用するアプリがあれば試してみたいと思います。
今回のキーボードはI2C接続なのでM5Stackだけでなく様々なデバイスに簡単につなげますね。キーボードを自作すると用途ごとに自由にカスタマイズできるので便利です。マイコンの開発サポートにも活用できそうです。
※コメント投稿者のブログIDはブログ作成者のみに通知されます