2015年9月15日火曜日

諏訪湖移動運用記(おもに136kHz運用について)

今年の夏は後半雨ばかりで、先日も台風18号に引きずられた雨雲による豪雨で各地で大きな被害を残しています。

ようやく長い雨のトンネルを抜け出し久しぶりに晴天が戻った先週末、こちらも久しぶりに移動運用を行いました。場所は諏訪市(JCC0906)の諏訪湖湖畔。

twitterやGoogle+つながりなCW界隈では東の軍曹として有名な(笑)JF1DIRさんにお誘いを受けて、ローカルクラブのほかの局長さんと一緒に移動しました。

もうすっかり秋の空です
湖岸の舗装路に車を寄せてアンテナとシステムの設営を行い1時間弱で設営完了しました。最初湖水にステンレスメッシュ板(以前海中に投下したものと同じ)を浸し、アースとしましたが入力抵抗が97Ωと期待はずれの値...
そこで急遽これまたいつものアース板を舗装路上に邪魔にならないように10枚置きアースを取り直しました。しかし同じように入力抵抗は100Ω弱といったところ。 両方を繋げてもほとんど変化せず共振周波数だけ下がります。
アンテナを建てる際一応垂直エレメント部分を立ち木から充分離しましたが、傘骨の斜めのエレメントの先端が立ち木の枝におよそ3メートルまで接近していたのを発見し、傘骨を別の場所に移動し枝より充分離したら入力抵抗は68Ωまでなんとか下がりました。
 時間もなかったためそれ以上は突き詰めず、インピーダンス変換トランスで50Ωに変換し早速運用開始しました。

最初湖水アースでしたが、接地抵抗が思いのほか高く急遽アース板10枚敷き
新ローディングコイルはリッツ線巻きのコイル抵抗12Ωもの
73Ω:50Ωインピーダンス変換トランス挿入時のアンテナ特性
最初は136.5kHzCWモードでCQを出していたところ、山梨市のJH1INM局にコールいただきレポート交換、交信成立しました(約60km)。その後CQ出し続けましたが呼ばれず、WSPR2モードに切り替え送信しました。

WSPRnetのDatabaseを覗いてみると、3局にspotされていました。(JH1INM, JH1GYE, JA5FP)
WSPR2で各局にspotされました
こちらもFT-817(JUMA-136内蔵受信コンバータ+20dBプリアンプ)で136.0kHzUSBモード設定とし、スピーカーで鳴らした受信した音声をPCのマイク入力で拾いwspr-xというソフトで監視したところ、JH1GYE局のWSPR2信号受信に成功しました(約90km)。
受信機のスピーカーからマイクで拾ってデコードしたJH1GYE局のWSPR2信号をWSPRnetにUpload

最後に137.773kHzでDFCW30送信し、JA5FP局(四街道市)とJA8SCD局(台東区)のグラバーに捕捉されてました。
JA5FP局のグラバーにDFCW30信号が捕捉されていました
 すでに日が暮れかかっていたため3時間余りの運用で撤収しました。

その晩はペンション風の宿で泊まり、温泉に浸かって飲めや歌えの大騒ぎ(笑)。

 翌日は天気がいまひとつで136kHz運用は断念して7MHzCWを少しだけ運用し帰宅となりました。

今回の移動でも、やはり立ち木の影響は大きいという印象でした。出来るだけ離したつもりでもエレメントの端から見て構造物などが接近していないかどうかは要チェックです。
また、水田のわき道での運用が良いといわれている理由が、周りに何もないということがひとつあるのだと思います。あとは接地抵抗についても標高が低く水路が張り巡らされているということも好条件のひとつかもしれません。あとは海に近い場所ですね。

次回は条件の良いところを探して移動したいと考えています。 

あ、今回の移動いろいろと楽しかったのでまた誘ってくださいませm(_ _)m

2015年9月9日水曜日

遅延キーイングのプログラム備忘録

先ほどKeyer Mini-V2のプログラムに遅延キーイング(PTTオンに少し遅れてキーイングが開始する仕組み)機能を追加しましたが、後々応用が利くと考えたのでここで備忘録的にプログラムの考え方を書き残しておきます。

PTTと同時に符号開始(上の赤がPTT,下の黄色がKEY出力 ”V V"
遅延キーイングモード(約90msec)
すでに出来上がっている符号生成のルーチンを弄りたくなかったので、直接出力ポートを駆動するレジスタに符号出力をつないでいるところを一旦切り離し、符号出力を一般の変数に置き換えその変数の動きを遅延させて出力ポートを駆動させるという流れを考えました。

具体的には#define文をつかって、#define KEY_OUT LATAbits.LATA0 -> PORTA0レジスタ(LATA0)をKEY_OUTに呼び変えて直接代入する(Boolean値なので0か1)方法で出力操作をしていたのを一旦KEY_OUTを一般変数として宣言し、#define文のKEY_OUTをKEY_OUT1として切り離す、といったところがまず最初の一歩です。

mainループ内でKEY_OUT1 = KEY_OUTとすれば(正確には型変換を必要とするところですが)切り離す前と結果は変わりありません。で、このKEY_OUTをKEY_OUT1に繋げる前に何かしらの遅延ルーチンを通せばよいわけです。

しかし、この遅延ルーチンをどうやって作るかで少し試行錯誤しました。

まず、mainループ内でKEY_OUT変数を監視して立ち上がりから立下りまでの時間を記憶させ、遅延時間後にKEY_OUT1操作(立ち上げて、記憶した時間を経過したら立ち下げる)という方法でプログラムを書いてみましたが、割り込み処理の関係で時間が不正確になりまったくうまくいきません。

そこで、まず割り込み処理関数内にKEY_OUT変数を監視する命令を置いてリングバッファへ変数の状態をコピーしインデックスを1つ加算します。バッファは256個の1元配列としました。結果1インデックスが1ミリ秒に相当する時間のいわばKEY_OUT値のサンプリングになります。この処理のすぐ下に、今サンプリングして格納したバッファのインデックス値から遅延したい時間に相当する数を引いたインデックスのバッファの値を参照しKEY_OUT1につなげる 処理を置くという方法にしました。

  /////グローバル変数宣言/////

    unsigned char delay_buffer[256] = {0};                        <-バッファの変数宣言と初期化
    unsigned char delay_time = 50;  

  /////1ミリ秒割り込み処理関数内/////

    static unsigned char idx = 0, idx2 = 0;

    if(KEY_OUT) delay_buffer[idx] = 1;        <-KEY_OUT値をサンプリングしバッファへコピー
    else if(KEY_OUT == 0) delay_buffer[ind] = 0;
       
    if(idx < delay_time) idx2 = 255 - delay_time + idx;           <-参照インデックス計算
    else idx2 = idx - delay_time;
       
    if(delay_buffer[idx2]){            <-KEY_OUT1操作
        if(KEY_OUT1 == 0) KEY_OUT1 = 1;
        }
    else if(delay_buffer[idx2] == 0){
        if(KEY_OUT1) KEY_OUT1 = 0;
        }
       
    if(idx > 254) idx = 0;                                     <-インデックス値インクリメント
    else idx++;


たとえば上のような感じになります。バッファの要素は8bit変数なので格納される値が1bitだとなんとなく勿体ない感じもしますね^^;RAMを節約したいのならビットシフトやビットマスクを活用して8分の1にRAM消費を抑えることも出来そうです。

逆に要素のビット数を増やして(8bitから16bit, 32bit...)監視する変数をAD変換されたデータにすると...と妄想が拡がります(笑) 

2015年9月5日土曜日

Si5351AモジュールからVFOとBFOの信号を

Silicon Lab.のSi5351Aを使ったクロックモジュールで10MHz方形波発生することが出来ましたが、次はより実用に近づけるためVFOとBFO信号を発生させるテストを試みるべく、今回VFOは7MHz周辺を10Hzステップで可変、BFOは4MHz固定という設定でプログラムを考えてみました。

前の投稿のとおりSi5351シリーズでは、各PLLのVCO発振周波数設定とVCO信号の分周比設定により出力周波数を規定します。

1.VCO周波数設定(PLLA, PLLB)

 fvco = fXTAL x (a + b / c)
    a...15~90, b...0~1048575, c...1~1048575, fXTAL = 25MHz or 27MHz

2.VCO分周設定(MultiSynth0,1,2,...)

 fout = fvco / (d + e / f)
    d...4~900, e...0~1048575, f...1~1048575

1と2をあわせると、設定周波数は6つのパラメータで規定されます。

 fout = fXTAL x (a + b / c) / (d + e / f)

というように、非常に細かい設定が可能ですが、ある特定の周波数範囲のVFOを8ビットマイコンで制御するとして考えるならば、分母は整数とくに5ないし10の倍数にして分子のパラメーターを細かく変化させたほうが簡単です。

 で、上の条件で各パラメーターを決めてみると。

fvco = 700~800MHz, fXTAL = 25MHz
a = 28, b= 0~99999, c = 25000, d = 100, e = 0, f = 1

これで、7~8MHzの10HzステップVFOが出来上がります。

I2C LCDモジュールとロータリーエンコーダをつなげました
I2CバスにSi5351AモジュールとLCDモジュールをぶら下げることでPICの使用ポートも4つで済んでおり、8PIN PICでも実現可能です。

2つ同時出力 下は4MHz(固定)上は7MHz(可変)
あとは、適切なLPFを通すことで汎用VFOが出来上がります。