レトロでハードな物語

レトロなゲーム機・マイコン・中古デバイスなどをArduinoやAVRで再活用する方法を模索しています。

大きな電卓を改造する その2

2020年05月02日 | 電子工作

前回「大きな電卓」(というネーミングで売っていたはず)から引き出したマトリックスの配線ですが、これまで扱ってきた電卓とはまったく異なっていました。

これまでの電卓は基板のベアチップ実装のICからキーパッドに11本配線されていて、その中の1本は「AC」(電源)ボタン専用でマトリックス回路には入っておらず、残りの10本が5×5のマトリックスになっていました。
この大きな電卓もICからキーパッドに11本配線されていて1本が「AC」ボタン専用だったのですが、それ以外の線が5×5のマトリックスになっていないのです。

引き出した線を電卓上面から見て左から番号をふった場合、ボタンを押した時に通電される線の組み合わせを表にするとこうなっていました。


※1番の線はACボタン専用だったので、たまたまどのボタンともつながっていなかった8番の線に通電するように配線を加工しています。

つまり今までのように、5本ずつ入力専用と出力専用に固定してスキャンできないのです。
基板が溶かした樹脂でケースに圧着されていて、ボタン側の配線パターンを見ることが出来ないのでどんな回路になっているのかよく分かりません。でも表を見てみると例えば1番の線を入力にして2番以降を出力にしてスキャン、2番の線を入力にして3番以降を出力にしてスキャン...といった具合に一度入力にした線は以後スキャンする必要が無くなります。もしかするとスキャンを簡略化するための工夫なのかもしれません。

とはいえ、このマトリックスだとArduinoやAVRでは入力と出力を切り替えながらスキャンする必要があるので、誤入力されないかどうか多少の不安はあります。またキーの同時押しが問題になることがあるかもしれません。

でもテスターで導通確認している段階ではキー入力を拾うことは出来そうなので、見切り発車で回路を組んでしまいます。ブレッドボードで組むのは線が多くて面倒そうなので、いきなりユニバーサル基板に部品を配置します。使用するのはATmega328Pです。LCDとキー入力を両方処理するので内部クロック8MHzではなく外部の16MHzのクリスタルで動作させようと思います。
配線は多くなってしまいますが、LCDとキーパッドの端子はATmega328Pに直結するだけですので回路的には難しくありません。LCDとの接続は以下のようにしました。

 LCD  ←→ ATmega328P

 1Vss ←→ GND
 2VCC ←→ VCC
 3V0  ←→ 10KΩの可変抵抗
 4RS  ←→ 12
 5R/W ←→ GND
 6E   ←→ 13
11DB4 ←→ 14
12DB5 ←→ 15
13DB6 ←→ 16
14DB7 ←→ 17

キーパッドとの接続は以下のようにしました。

電卓上面左から ←→ ATmega328P

 1 ←→ 0
 2 ←→ 1
 3 ←→ 2
 4 ←→ 3
 5 ←→ 4
 6 ←→ 5
 7 ←→ 6
 8 ←→ 7
 9 ←→ 8
10 ←→ 10
11 ←→ 9

唐突ですがこれらの配線とは別にATmega328Pの19ピン(SCL)と18ピン(SDA)にI2C接続の32KBのEEPROM(24LC256)をつなぎました。すぐに利用するわけではないのですが、いずれ使うつもりなので予め配線しておくことにしました。プルアップ抵抗はそれぞれのピンに1kΩつけています。24LC256はA0・A1・A2のピンでデバイスアドレスを設定できるので、すべてGNDにつなげてアドレスを0x50にしました。



6ピンのソケットはICSP書き込み用です。

作成したデバイスを大きな電卓につないでキー入力が問題なく行えるかどうか確認するテストプログラムを作ってみました。

BigCalcKeyin.ino


スケッチを書き込んで動かすと、押したキーをLCDに表示します。また、EEPROMのテストのためACキーを押した時に予め書き込んでおいたデータを読み出すようになっています。
LCD表示は自作の表示ルーチンから必要な部分だけを抜き出したものなので、不必要な部分や未使用の変数などがありますが気にしないで下さい。



実際に使用してみると、特に問題なくキー入力を行えました。変則的なキーマトリックスなので、キースキャン部分のスケッチを簡素にまとめることが出来ず助長なものになってしまいましたが、とりあえず利用できることが分かって一安心です。

ここまで出来たので、今度はこの「大きな電卓」を電卓として復活させたいと思います。せっかく16x2行のLCDを内蔵したので、普通の電卓ではなくRPN(逆ポーランド)電卓にします。
ところでATmega328Pで扱える実数はfloat(内部32ビットでdoubleでも同じ精度)が最大で、計算で有効な桁数は6〜7桁くらいだそうです。なので16桁まで表示できるLCDを活用することが出来ません。最大16桁まで利用できる電卓を作るには計算ルーチンまで自作する必要があります。たかが四則演算でも小数点表示やマイナス符号などを扱うことを考えると、ちゃんとした電卓を作るのはかなり大変そうです。

でも、せっかく「大きな電卓」をAVRから活用できるようになったので、なんとか作ってみたいと思います。。



最新の画像もっと見る

コメントを投稿