2015年5月18日月曜日

ICOM RAMユニット データの保存と復元 (2)

ハード部分は完成したので、

***PICにプログラムを書き込み

今回はPICライターに、秋月の”AKI-PICプログラマー Ver.4”を使用
(書き込みソフトは”PIC Programmerv4 ”)
ソース・ファイルがアセンブラで書かれているので、Microchip社のMPASMWINを使用してコンパイルします。
(PCにMicrochip社のMPLAB IDEをインストールすれば入っている、 私の環境ではv8.87)
私の使っている物は古いようで、最近はMPLABX IDEになっています。




書き込み用PIC(16F886)をセット

”PIC Programmerv4 ”を立ち上げた状態

アセンブラ・コンパイル設定



MPASMWINのインストール場所を指定



書き込むソース・ファイルを指定

”750RAM.ASM”を指定、訳あって別ファイルを指定(後述)

”生成 ReLoad(A)”をクリックしてコンパイルする、まだ書き込みはしない。


コンパイル処理情報


コンパイルが終わると、書き込むメモリー内容が表示される
また、PICのコンフィグ情報1と2も正しくセットされているか確認する

コンフィグ情報2

コンフィグ情報を確認したら、PICに書き込む”プログラム”をクリック

2度目からの書き込みでは、上書きで先に進む

下段のメッセージで、”プログラミング成功”を確認して書き込み完了。

PICは出来上がったので、PC側へ
”Serister Version 1.2.5” をインストール
古いソフトなので、COMポートは1~9しかサポートしていない

色々なUSB-シリアル変換を使って来ていると範囲外のポートが自動でセットされる
デバイス・マネージャーで確認して範囲外であれば、プロパティから強制的に1~9の使っていないと思われるポートへ変更する

”Serister”の設定
 ポート番号、ボーレート(2400)、RTS制御/DTR制御を常にON、テキストモード

”監視開始”をクリック

受信待機になる

PIC側のタクトスイッチを押して緑LEDのみ点灯にすると、
RAMから読みだしたデータが送られて来て表示される
緑LED点灯 -> 緑LED点滅 -> 赤/緑LED点滅になれば読み出し終了
右上”保存”をクリックして適当に名前を付けてデータを保存

データ書き込みは
PIC側のタクトスイッチを長押しして赤LEDのみ点灯にする
下段”送信”ボタンの上の欄に復元データを貼り付け(保存データからコピー)
”送信”をクリック
赤LED点灯 -> 緑LED点滅 -> 赤/緑LED点滅になれば書き込み終了


これで、RAMデータの保存と復元が出来るようになりました。
読み出しデータは改行が含まれていないので、編集時に改行を入れないように注意


昔作った方(N2CBU版)で保存したデータはコッチ
専用ソフトなのでプログラム画面で内容の編集が出来るため、
保存テキスト・データも見やすいようになっています。
このソフトの開発目的は、もう一つ・・・・周波数拡張も有ったようです!

この保存データを今回使うには、逆に編集で余分なものを削除しなければなりません


★ソース・ファイルの修正

今回、なぜかすんなりと動作しませんでした。
読み出しデータが、毎回異なります。
配線を何回も確認しましたが、間違いは無い・・・・
アセンブラのプログラム開発する能力は最初から無し・・・・!

途方に暮れてしばらく放置

フッと思った・・・・PIC側が速すぎるのでは

RAM読み出しのステップに”NOP"を追加してみたら大正解!!!
安定して読み出し出来るようになった。(何回読んでも同じ内容で一安心)

(RAMユニットの相性が有るのか? 今回確認しているのは1個だけなので不明)

読み出しOKになったので、早速書き込み。。。こっちは問題無し

確認にはファイル内容比較ソフトを使うと一瞬で判り便利
(DFとかその他色々なフリーソフトがある)

ソースのCONFIG設定が一部間違っていると思われるので修正した。

オリジナルの 750RAM.ASM の
35-36行目
修正後
__CONFIG  _CONFIG1, _CP_OFF & _DEBUG_OFF & _CPD_OFF & _LVP_OFF & _BOR_OFF & _MCLRE_OFF & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT & _IESO_OFF & _FCMEN_OFF
__CONFIG  _CONFIG2, _WRT_OFF & _BOR40V 

580-585行あたり(RAMRDサブルーチン内)
修正後
        BCF    RAMCS        ;CS=ON
                NOP            ;今回追加(必須)
        MOVF    PORTB,W        ;RAM READ
        ANDLW    B'00001111'    ;上位マスク
        MOVWF    RDDATA        ;READ DATA SET
        BSF    RAMCS        ;CS=OFF
                NOP            ;今回追加(こっちは追加しなくてもOKみたい)
        RETURN            ;

追記:2番目のNOPは、追加しなくても動作OKでした。
    どちらでも大勢に影響はないようです

すぐ忘れてしまう私への備忘録です。

0 件のコメント:

コメントを投稿