
Arduino UNOでモールス習得支援エレキーを作ったのだが、Arduinoは豊富なライブラリーと多くの情報がありスケッチの作成は割合容易だった。OLEDを使って表示させようとしたときフォントの収容に思いの外メモリーを使うことがわかった。UNOの2kBというSRAM容量の中にいかに収めるか模索しながらだったがどうにか収めることができた。SRAMの使用率が大きくなるとコンパイルをしたときアラートが出されることを初めて知った。機能を限定しデバイスの制約をギリギリのところでクリアした。元の計画ではスクロール表示モードも組み込む予定だったが無理だった。一文字表示だけに限定したのはこのメモリーの制約のためである。
フォントをLCDに内蔵されているものだけにして組み上げたスクロール表示の装置は必要なフラッシュメモリーは非常に少なく使用率は50%を切るほどだった。つまり16kBでも収められる大きさである。それならFlashメモリー16KB、SRAM 2kB のUIAPduinoに移植できるのではないかと安易に考えたのだ。
ところがUIAPduinoで動くようにスケッチを書いていくと思わぬ壁にぶつかった。UIAPduinoは32-bit RISC-V MCU CH32V003 というデバイスを使っている。RISC-VはARMなどとは全く別の仕組みなのだ。開発環境としてArduinoIDEを使うことは出来るのだがUNOなどで使っていたライブラリーは使うことができない。UNOで使っていたスケッチはそのままでは動かないのだ。単にピンなどの設定を変えれば移植できるのではという淡い期待はすぐに跳ね飛ばされてしまった。UAIPduinoで同じような動作を実現するための試行錯誤が続いた。
16kBという容量があれば大丈夫だろうと考えていたのだが機能を盛り込むとコンパイルをの過程でことごとく容量オーバーのエラーになってしまう。削れるところを探し、別のアルゴリズムを試しながらこの容量に収まるようにスケッチを書き替えていく。やっとコンパイルが通ったと喜んで動作確認をすると思い通りの動作ではない。
ArduinoIDEではなく別の開発環境を使って直接機械語で組めばよいのだろうが、私にはそこまでの技量はない。 新しいデバイスと親しくなるための過程であると割り切っていろいろ悩みながら取り組んでやっとUNOと同じような動作をするスケッチになった。
LCDの表示ができる。欧文、和文のモード切替ができる。パドルで入力するとそれをデコードしてLCDに表示する。入力がなくてもスクロールは止まらず入力時のスペースを確認することができる。欧文、和文、数字、記号をデコードし、文字テーブルに無い入力のときには”*”を表示する。ポットによって速度設定ができリアルタイムでLCDに表示する。ほぼ期待通りの機能を組み込むことができた。しかし、一部実現できなかったところがある。パドル入力のフィーリングである。パドル操作のタイミングをどう判断するかという部分で微妙なずれがあるのだ。ゆっくり一文字ずつ入力する時には問題がないが、文字と文字の間隔が短点3つ分より短くなった場合入力が無視されてしまう。これを解消するには音を出したりLCDに表示したりするとは別のルーティンでパドル入力を監視することが必要なのだがそれが出来ていない。タイミングを合わせてさまざまな動作をするというのは難しい。大きなシステムにすれば可能なのだろうがこのデバイスでは無理だった。対応策についてご教示いただければ幸いである。
移植と簡単に考えていたのだが実際には途轍もなく困難な作業だった。





