2020年7月18日土曜日

ArduinoMega2560カードの紹介その後のその後

4月10日に紹介した「ArduinoMega2560カードの紹介その後(完結編)」で完結したつもりでしたが、その後行ったいくつかの試みを紹介します。
(1)部品配置を多少変更した新しい基板を製作しました。
(2)リフレッシュの方法を変更してみました。
(3)任意のファイルを指定してArduino2560からFM-7に送り込めるようにしました。

(1)ですが、USBケーブルを挿入しやすくするためにArduino2560カードの位置を少し左に移動し、カード上のリセットボタンが押しにくかったので基板上にリセットボタンを新設しました。
(2)ですが、リフレッシュ法を桜井さまが試された方法に変更してみました。
オリジナルのカードの考案者であるFS-Micro Corporationの桜井さまはDRAMのリフレッシュについて2つの方法を試みられました。
一つ目はMega2560の割り込みを用いる方法で、これはリフレッシュの仕様を完全には満たすことができない上にCPUがほとんどリフレッシュにかかりきりになってしまうので実用的ではないとのことです。二つ目はPICを増設しそれによってハード的にリフレッシュ信号を作るというもので、これは完全にリフレッシュの仕様を満たすことができ、CPUにも余裕があるので良い方法だそうです。

参考までに、桜井さまから頂いたPICを使用した基板を示します。


PIC使用の基板



しかし、FM-7上でArduino2560を動作させてメモリデータを読み出したり、データやプログラムを送り込んだりさせたいと考えていた思い付きハードでソフトに七転八倒のshujiakitaさんや私にとっては、殆どのCPU時間をリフレッシュに取られるにしても、残りのわずかな時間にデータ等の読み書きができて、その後6809に戻れれば良いので、ソフトのみでリフレッシュを行う手法もそれなりに有用だと考えました。

(3)ですが、任意のファイルをArduino2560が読み込んでFM-7のメモリに書き込めるようにスケッチを変更しました。

ということで、PICの追加なしでソフトのみでD-RAMのリフレッシュを行なうArduino2560カードを、WindowsとFM-7の間でプログラムやデータのやり取りを行うツールとして製作しました。


新基板
新基板


使い方ですが、Arduino2560へのスケッチの書き込みに使用したポートをそのまま使用しますので、TeraTermのポートをそのポートに指定し(もちろん、ArduinoIDEのポート指定はずらしておきます)、バイナリ指定をしてファイル送信を実行します。
送信するファイルの先頭には保存アドレス(2バイト)、ファイルサイズ(2バイト)を付けておきます。

動作中の様子


下のFM-7の画面で分かりますように、RUN直後にArduino2560に切り替わり、処理が終了した後、6809に戻り20行のLISTを実行しています。もちろん、複数回実行してもちゃんと6809に戻ってきます。


転送後に6809に戻っている


TeraTermの実行画面です。
データファイルの先頭4文字の保存アドレス、転送バイト数を読み取り、以降のデータを指定アドレスに書き込み、その後、そのデータを読み出しています。
続いてBOOT ROMの内容を読み出した後、6809に戻っています。


転送結果


以上、動作的には以前の割り込みを使用しないソフトでのリフレッシュ法の場合とそれほど違ってはいないように見えますが、不完全かもしれませんが正式のリフレッシュ法を用いているという安心感が得られました。

なお、割り込みによるリフレッシュ法の詳細とその適用結果については、FS-Micro Corporationの桜井さまがブログのArticle#256~265の10回に亘って詳細に解説されていますので、そちらをご参照ください。本稿に直接関係するのはArticle#261です。


0 件のコメント:

コメントを投稿