経緯
アリエクで自分で組み立てる6桁の小数点付電卓のDIYKITを購入した。
組み立てて動作確認後、プログラムを書きなおそうとしたが。
参考とするべき元となるべきプログラムは公開されて居なかった。
しかし、回路図がKITについて来た
◆◆◆ じゃあ、一から自分で作ろう ◆◆◆
と思ったが意外と大変。途中で挫折しました。
開発方法
開発方法は「前回」に記載された方法と同一。
SDCCコンパイラとUSBシリアルと書き込みソフトが有れば開発可能。※ソフトは無料
電卓ハード
図面を見れば判るとは思うが。
※Header4には親切にも信号(VCC,GND,TX,RX)の表記が有る。
※この図は販売ページからのコピーだが、拡販に繋がるから問題無いだろう。
◇表示器
6桁の7SEGのLED表示器をダイナミック点灯させる。
デジットラインを切り替えながら、個々のセグメント点灯を行う。
※人の目でフリッカしてないように見せるには、50Hz以上の周期が必要。
※全デジットの同時スタティク点灯は不可。※最大端子電流に抵触すると思われる。
◇キーボード
16個のキーが4x4に整列。ONキーは別扱い。
キーのキャンを行いながら、押された情報を読み取る。
※キーのデバウンズへの対応が必要となる。
◇ブザー
信号を加えても、其れだけでは連続音は出ない。
人に聞こえる周波数の交流信号を加える必要が有る。
◇注意事項
ボタン電池はUSB電源と回路が並列に繋がっており、※保護回路なし
同時に使うと、USBの電圧がドロップするか、電池が爆発する可能性もある。
電卓ソフト
Githubの「ここ」に参考プログラムを格納。
ソフトは割り込み処理とキー入力処理で構成している。
◇割り込み処理
タイマーT0により、5ms(200Hz)毎に起動し下記を行う。
・7SEG表示
7SSEGを1デジットだけ指定のパターンで表示。
※10進数字(+16進表示も可)、小数点、マイナス符号、ブランクを表示。
・キースキャン
キーを一行分読み込む。
押されていた場合は、キーヒット(kbhit)とする。
◇キー入力処理
6桁の整数演算を行っている。
キーヒットが有った場合、押されたキーに従い演算処理を行う。
処理結果は割り込み処理により、表示される。
※此処で元の処理と同等に出来れば万々歳だが、之は結構手間が掛りそう。
浮動小数点で処理出来れば演算式で処理できるが、表示形式が違うだろう。
固定小数点にした場合、桁数合わせが面倒くさそう。
◇シリアル入出力
115200bpsでのシリアル通信が可能になっている。
※デバッグ用、電卓処理では使って無い。
書き込み器について
STCシリーズの書き込みは、電源投入直後にのみ可能となる。※すべてがそうかは知らないが。
従って、書き込み時には毎回電源の再投入が必要となる。※之は微妙に面倒。
市販されている書込み器(USBシリアル)には、電源を再投入してくれる優れモノが有る。
※上記写真でSTCのロゴの付いたもの。
書き込みソフトのAIapp-ISPには、hexが更新されると書き込みが始まるモードが有る。
之を有効にしておくと、コンパイルが終わると自動的に書き込みが始まる。
※書き込みが正常終了する保証は無いので、目視確認が必要だが。
正常時と異常時にブザー音を変えて欲しいと思う。
書込み開始時に、RTSとDTRを同時に下げる事により、0.5秒程度電源が落ちている。
その後速度を変えながら信号(多分FF)を送り、応答の有った時点で通信速度を決めているのだろう。
※下記信号は上から、USB-VCC,RTS,DTR,USB-TX,USB-RX
感想
軽く考えていたが、電卓を作るのも結構難しく、真っ当な仕上がりには程遠い。
とは言え、6桁の電卓が真っ当な作業に使えるとも思えないと言っておこう。
中途半端なソフトだが、8051の割り込み処理の事例としてでも見て下さい。
なお、上記記載内容は全て無保証であり、各自の責任においてご利用願います。