SWRグラフをSDカードへセーブ
PICマイコンでSDカードにテキストファイルを保存する事が出来るようになりましたので、この機能を使い、周波数対SWRのデータをCSV形式でSDカードに記録し、これをPCでエクセルファイルに取り込んだ後、自由にグラフデータをPC上に表示する事ができるようになります。
SDカードとPICの通信はSPI1モジュールで行いますので、今までSPI1を使用していた、コントロールマイコンとの通信ラインをSPI2に引っ越しさせ、FAT32用モジュルールやドライバーなどを従来のアナライザー用ソースファイルと合成し、なんとかコンパイラーがエラーを出さなくなりました。 この状態で、128KあるROMエリアの約84%のが占有されました。 RAMは58%くらいの使用です。
とりあえずコンパイル成功したプログラムは、アナライザーの機能とSDカードの機能は正常に動作しますが、両者の間でのやりとりはやっていません。 やっとSDカードの検出結果をLCDに表示する事だけ出来るようになりました。 ちなみにSDカードをソケットに差し込むとすぐにMEDIA READYになりますが、ライトプロテクトがONになっている場合、カードをロックするまで押し込んだ時点でNO MEDIAになります。 ちゃんとライトプロテクトは動作しますが、読み込みも出来ないという事ですから、ライトプロテクト機能は無効と考えるべきです。
カード有り無しの判定が出来るようになったので、アナライザーから引数を渡す方法でSDカードソフトと連結してみました。
しかし、そう簡単にはいきません。 コンパイルエラー続出で始まり、無限ループにはまったりで、何度も後退しながら、やっとアナライザーのキー操作で仮のテキストをセーブできるところまで出来ました。 下記の通りファイル名が連番でセーブされています。タイムスタンプは、リアルタイムではなく、PICKIT3でプログラムを書き込んだ時のPC側の時刻のようです。
テキストファイルが連番でセーブ出来るようになりましたので、次は、いよいよ周波数対SWRデータのセーブにトライです。 しかし、これも私の非力の性で、コンパイルエラーの連続でした。 ここで、複数のソースファイルとヘッダーファイルの場合のコンパイラ動作をにわか勉強して、かろうじて、データのセーブが出来るようになりました。
セーブしたデータをエクセル上に展開し、これからグラフを作るのは手作業です。
まずは、7MHzの垂直ダイポールの例
左上がアナライザーのLCD上に表示されたSWRカーブ、右上はこのデータをSDカードに転送セーブし、PC上でそのデータをエクセルデータとして開き、そのデータから作成したSWRカーブです。 周波数は100Hzの位まで取得された値、SWRは実際値を100倍した値となっています。 Y軸(縦方向)の目盛間隔がLCDより拡大されていますので、急激に変化しているようですが、数値を見比べると同じである事がわかります。
次は、14MHzのCWバンドに合わせたスカイドアの特性です。
LCDのY軸目盛は良く見慣れたSWR計の目盛と同様にSWRが高くなると、目盛間隔が詰まっていきますが、エクセルのグラフは等間隔ですので、カーブの様子が異なります。 縦軸を対数目盛にすればLCD表示に近づくでしょう。 このへんはエクセル表現のワザの話になります。 SWR目盛も100で割った小数点値にし、周波数も10で割った小数点値にすれば見栄えも良くなるでしょうが、そこはPC上で処理する事に、このアナライザーはこのままです。
このアナライザーのSWRカーブの最大取り込み数は7本として作ってあります。従い、エクセルデータもSWR0からSWR6までの7本分のデータがセーブ出来るようにしました。
左の画像は、14MHzバンドでCWバンドにチューニングした青色のデータとSSBバンドにチューニングしたときの赤色のデータを重ねて表示したものですが、この状態でもエクセルデータとして取り込めるようにしてあります。
このデータを実際にエクセルで取り込み、グラフ加工したエクセルデータを添付しておきます。
ここまでの対応でLCDマイコンのROM使用量は88%、RAM使用量は81%になりました。 まだ、デバッグや操作性の改善も残っていますので、多少は増えると思われます。 XC16の無償版コンパイラはオプチマイズ機能が無いと聞いていますので、最悪有償版かROM容量を256Kまでアップする覚悟をしていましたが、その必要はなさそうです。
SWRカーブをPCに取り込むという目標は達成できました。 試に私のマルチバンドアンテナのSWRデータを取り、エクセルデータにしてセーブし、グラフをPC上に表示してみましたが、 苦労してプログラム開発したのに、私の場合、その利用価値は有りませんでした。 アンテナの解析などを行いたい場合、取り込んだデータが役立つかもしれませんが、アンテナを調整して、最適使用状態に設定するのが目的なら、このような機能は不要みたいです。 ただし、一度セーブした過去のデータを呼び出して、アナライザーのLCD上に再表示させる事ができれば、それはそれで、役立つかも知れません。 機会がありましたらその機能追加にトライしたいと思います。
ところで、時々マイコンが暴走します。 以前の検討でPICKIT3に接続するMCLR端子に、パスコンが必要となっていましたので、0.01μFを追加しました。 その後、異常が発生しなくなりました。
過去のデータを再表示 へ続く