2014年12月31日水曜日

2014年という年

早いもので2014年もあと12時間切ってしまいました。

というわけで、今年のまとめを。

仕事や他の趣味についてはブログの趣旨から外れるので置いておいて。

アマチュア無線的には、やはり136kHz帯運用が中心になったということでしょうか。他はALLJAとFDにお誘いを受けてコンテスト運用をしたり、たまにHFと2mのCWでQSO(DXはほとんどやってない^^;)やロールコールに参加するくらいでした。136kHz移動運用は月1回のペースに至りませんでしたが、いろいろな場所を訪れ運用しました。そのたびに改善点や設備的な限界も見えてきました。

4月には全日本長中波倶楽部主催のアクティブアンテナコンテストに出品、手持ち部品で作ったPA0RDT Mini-WhipでしたがLF帯はもちろんのことVLF帯の受信にも使えることがわかって驚きました。基板を一つ余計に作ってあるので今度はノイズキャンセラー用のノイズアンテナとして製作を考えています。

8月の終わりにはハムフェアで全日本長中波倶楽部のブースにTX136用のマルチモードビーコンコントローラーを展示させていただきました。その後、TX136本体のdsPICにQRSS,DFCW,WSPRビーコンプログラムを組み込んだ改造ファームウエアがJUMA FORUMに投稿されたのを見て自分も同機能を組み込もうとプログラム改造に着手しました。

10月中旬の千葉コンは先日結果発表がありましたが、残念ながらまた2位でした。2局差でしたが相手局の信号を良好に受信できてもこちらの信号が届かなかったので、受信は良いとしてもう少しアンテナの効率を上げる必要性を感じました。さらに11月のJD1父島運用局交信トライでもアンテナ入力抵抗が過去最低の33Ωとなりましたが、激しいノイズの中信号を受信できたにもかかわらずこちらの信号が届かず、なおさら送信能力をもっと引き上げねばと。まず目をつけたのはローディングコイルの改良ですが、年内に材料は揃ったので来年早速製作に取り掛かることにしてそれからアースの改善方法を検討していくことに。

あとPIC関連ですが、アセンブリ言語からC言語でのプログラミングに切り替えてある程度実用的なキーヤーを組んだこと、それに付随して基板の設計やキット頒布ができたこと。あとはDDSや簡単な液晶を扱えるようになったことでしょうか。またそのおかげで最初ぜんぜんわからなかったTX136のプログラムソースも多少読めるようになってきました。

そんなわけで、振り返ってみると自分なりに少しは進化したようなので(笑)来年もさらに進化できればいいなーと思う今日この頃です。




今回はこれで今年最後の投稿となります。皆様良いお年をお迎えください。

2014年12月27日土曜日

年末の変更申請

今年もあとわずかになってきました。

新ローディングコイルの材料も揃ったし、TX-136/500改造も進めないといけないんですが、年末に別方面で忙しくなってしまったためこれらプログラミングや自作はおあずけ状態です(笑)。

ただひとつ、TX-136の変更申請だけはやっておこうと保証認定をとって電子申請を済ませました。

もともとTX-136はA1A(通常CWとQRSS、OPERA)で免許されていたわけですが、(135kHz帯自体はすでに別の送信機でF1B, F1Dは免許されています)FSK改造に当たって最初届出だけで済むだろうと思って過去電子申請しました。ところがAFSKでなく直接DDSに命令を送って周波数シフトをかけるということで保証認定を通す必要があるとのことでした。

少々ややこしいなと思いましたが、過去の事例見ているとAFSKと直接FSKは結果は同じでも発生方法において直接FSKの場合発振回路の変更とみなされて届出では不可なのだろうという解釈になりました。

この件に関して、TX-2200Aという唯一メーカー製の135kHz帯送信機を販売しているサムウエイ社に過去メールで問い合わせしてみました。もともとこの送信機はA1Aのみですが、オプション付加でDFCW(0.25Hzステップ)モードが送信可能になるため、オプション後付の場合どうなんでしょうかと聞いてみましたがけんもほろろ、TSSや総通に聞いてくれとのことで(まぁユーザーじゃないから仕方ないですね^^;)TSSにもメールしましたが返答なしでした。

そんなわけで萎えてしまいしばらく放置してました。なので移動のときはCWかQRSSのみの運用でした。

そうこうしているとJARDが保証認定事業を立ち上げたので、今回こちらで保証認定申し込みをしてみました。

やり方はTSSとほぼ同じでネット上で申し込みが可能です。今回変更申請は1台のみなので3000円を振り込みあとは待つだけです。

1箇所訂正が入りましたが2週間弱で保証書がとどいたので早速電子申請しました。

台数が多いとやや高くつきますが、迅速に処理してもらえるのならJARDもありなのかもしれませんね。

そんなわけで来年は136kHz運用さらにパワーアップしますよ(笑)

2014年12月19日金曜日

12/17官報より

先日の12/17付けの官報でアマチュア帯の新バンドプランなどは発表されましたが、そのなかで注目したのは135kHz帯、1.9MHz帯での占有周波数帯域幅が100Hzから200Hzに拡大、475.5kHz帯の新設です。

136kHz掲示板によると早速関連部署に問い合わせをされたOMさんがいらっしゃったようで、そのOMさんの報告によると管轄部署のだいたいのスタンスが想像されました。あくまで伝聞なので詳細は直接掲示板をご覧いただくとして、これは475.5kHz帯免許は下ろせなくもなさそうだなという印象でした。

当局は今のところTX-500で免許を下ろそうと考えていますが(もちろんA1AのほかにF1D F1Bもです)、送信機の帯域外特に高調波スプリアスのレベルがぎりぎり(基準は50μW未満ー50W出力で-60dB未満アマチュア局では5Wを超える場合50mW以下かつ-50dB) 第3次高調波で-56dBなので50Wではちょっと足りないかもしれないぎりぎりか)なので別途LPFを付加したほうが無難です。年明けにでもつくろうかな。

また、ローディングコイルの性能からしてERPは50W出力でも1W行くかいかないかのレベルなので空中戦電力としては50Wで良さそうです。

一応ダミーロードとオシロスコープで電圧を測定して算出したTX-500の出力は13.8Vで54Wでしたが、50Wぎりぎりになるような電圧の調整とスペアナによる高調波レベルの変化を確認しておきましょう。

もうひとつ問題は運用場所です。要件に合いそうな運用場所をひとつだけではなくいくつか選定して望んだほうが良さそうです。移動できる場所での検査になるようで、運用場所の住所が免許に記されるらしいです。運用場所はそこだけになるのかどうかはわかりません。

2014年12月14日日曜日

JUMA ファームウエア改造記 その2

JUMA TX-136/500用ファームウエアを徐々に改造中ですが、備忘録的に。

前回1Hz桁表示とチューニング、CW速度1WPM以下設定改造をしました。juma-tx500.cファイルのFREQ+ FREQ-ボタンにそれぞれ押しっぱなしフラグをたてて、短押しで1Hzステップ、押しっぱなしで10Hzステップ調整としました。もともとチャタリング対策で100ミリ秒ほどディレイを置いているものの時々短押しのつもりが10Hz動いてしまうことがあるので別途カウンタを設けて0.2秒以上の長押しで10Hzステップになるように追記しました。

int temp_time;                    // for save delay time  変数宣言追加)

 【juma-tx500.c メインループ始まり部分】

 // Main forever loop _____________________________________________________________________________________________________________

    for(;;)
        {
        MAIN_TEST = !MAIN_TEST;              // timing test
        static unsigned char sw_flag = 0;    

      // status flags bit0:UP button, bit1:DOWN button, bit2:setting change

FREQ+ボタン処理部分(FREQ-も同様の処理)

// Freq +/- (PA100 Band buttons)
//        static unsigned char sw_flag = 0;
        static unsigned char cnt = 0;
        if(FREQ_UP == 0)                    // Band + button
            {
            sw_flag &= 0xFB;                // clear frequency change end flag

            if(RFPWR == 0)
                eeprom.defval.txfreq[board_type] = eeprom.defval.txfreq[board_type] + 100;     // speed tune
            else if(sw_flag & 0x01)
                eeprom.defval.txfreq[board_type] = eeprom.defval.txfreq[board_type] + 10;     // normal tune
            else
                eeprom.defval.txfreq[board_type] = eeprom.defval.txfreq[board_type] + 1;      // fine tune


            if(eeprom.defval.txfreq[board_type] > hi_tx_freq[board_type])
                {
                eeprom.defval.txfreq[board_type] = hi_tx_freq[board_type];
//                beep(HZ587_31, cal.calval.beep_len);      // D tone over beep
                beep(TONE_A, cal.calval.beep_len);          // A tone over beep
                }
            else
//                beep(HZ466_85, cal.calval.beep_len);      // Bp tone ok beep
                beep(TONE_D, cal.calval.beep_len);          // D tone ok beep

            calc_tword();                    // just calculate new DDS set value

            ms_delay(BUTTON_DEBOUNCE);
            if(FREQ_UP)

                {
                sw_flag &= 0xFE;                // clear UP button pressing flag
                sw_flag |= 0x04;                // frequency change end flag
                temp_time = seconds;
                cnt = 0;
                }
            else if(cnt) sw_flag |= 0x01;
            else cnt++;


            }


また、475.5kHzの免許申請が厳しいため必要以上の電力が選択されないように、CONFIGメニューにMAX(60W...といっても実測54Wくらいなのですが^^;)を選択できなくするようなリミッタON・OFFメニューを追加して、電源ONの時にはMAXが選択できなくなる(メニューで解除できる)ようにしました。

【main関数内 select sub modeセクションに追加】 

int limit = 1;    // power limit(0:OFF for TX136, 1:ON for TX500) 変数宣言追加)

// MAX Power limitation for Mobile
                    case 11:
                    set_cur_lcd(LINE1);
                    lcd_putst("Mobile POW limit");

                    set_cur_lcd(LINE2);
                    limit = limit + encoder_get();   // power limit on /off

                    if(limit < 0)                    // keep within limits
                        limit = 0;
                    if(limit > 1)
                        limit = 1;

                    lcd_putst("Select = ");

                    if(limit == 0)
                        lcd_putst("OFF    ");
                    if(limit == 1)
                        lcd_putst("ON     ");
                    break;


【main関数内 RF powerセクションに追加】

// RF power
        if(RFPWR == 0 && FREQ_UP == 1 && FREQ_DN == 1)                // RF PWR - button alone
            {
            eeprom.defval.rfpwr++;
#if 0
            if(eeprom.defval.rfpwr > MAX_RFPWR)
                {
                eeprom.defval.rfpwr = 0;
                beep(HZ587_31, cal.calval.beep_len);            // D tone beep whe roll over
                }
            else
                beep(HZ466_85, cal.calval.beep_len);            // Bp tone beep
#endif
            if(limit)
                {
                if((eeprom.defval.rfpwr + 1)> MAX_RFPWR) eeprom.defval.rfpwr = 0;
                }
            else
if(eeprom.defval.rfpwr > MAX_RFPWR)                    // check roll over
                eeprom.defval.rfpwr = 0;

            switch(eeprom.defval.rfpwr)                            // sound different tone for each power level
                {
                case 0:
                    beep(TONE_A, cal.calval.beep_len);            // A tone beep
                break;

                case 1:
                    beep(TONE_B, cal.calval.beep_len);            // B tone beep
                break;

                case 2:
                    beep(TONE_C, cal.calval.beep_len);            // C tone beep
                break;

                case 3:
                    beep(TONE_D, cal.calval.beep_len);            // D tone beep
                break;
                }

            ms_delay(BUTTON_DEBOUNCE);
            while(RFPWR == 0)
                {
                }
            }


あと、オリジナルでは設定変更や周波数の変更が電源OFFのときにのみEEPROMに書き込むようになっており、不意の停電で設定変更が反映されないという事象に対して、CONFIGメニューの離脱5秒後、または周波数変更完了の5秒後にEEPROMに書き込むようなコードを追加しました。

【DISPLAY/CONFIGボタン長押し処理部分】

            if(long_push == 0)                 // major mode change
                {
                lcd_mode++;
                sw_flag &= 0xFB;
                if(lcd_mode > MAX_LCD_MODE)
                    {
                    sw_flag |= 0x04;           // setting change end flag
                    temp_time = seconds;

                    lcd_mode = 0;
                    }


【メインループ内に追加 5秒後に記憶する】

        if(sw_flag & 0x04)
            {
            if((seconds - temp_time) == 5)
                {
                save_defaults();

//             beep(TONE_C, cal.calval.beep_len);           // for debug
                sw_flag &= 0xFB;
                }
            }


改造中にコードを読むことでだいたいの処理の流れがおぼろげながら見えてきたところです。今後は必要な処理を考える上で、オリジナルプログラムでのEEPROM書き込み読み込み、タイマー処理(内部にフリーの秒カウンタがあるので活用するなど)の仕方を読み取っていこうと思います。

メッセージメモリ読み書き部分はKeyer Mini-V2のコード流用が出来そうです。


MAX制限のメニュー

2014年12月10日水曜日

JUMA TX-136/500ファームウエア改造第2弾発動

かねてから課題だったTX-136/500送信機単体のマルチモード化を少し始めることにしました。

今までは送信機のMCU(dsPIC)に微小シフト命令を追加しRS-232C(EIA-232-E)経由でコマンドを送信するコントローラを使ってQRSS, DFCW, WSPR, OPERAの多モード送信を実現してきました。PICによるWSPRシンボル生成が完成しコントローラーのプログラムを書き直そうと考えていましたが、JUMAフォーラムにフランスのアマチュア局が送信機単体でマルチモードを実現したプログラムを紹介したのに触発され、コントローラープログラムより前に送信機単体での送信対応をやってみようと考えました。

まず手始めに送信周波数調整と表示を10Hzから1Hz単位にする、CW速度調整をPC経由でなくても0.1WPMまで下げられるようにする、という改造です。

ソースファイルを眺めると、もともと1Hz表示は可能だけれどもLCD表示範囲の関係で1Hz桁だけはみ出して表示しきれないようだったので周波数表示の前のモード表示の文字数を6文字分から5文字分に1文字減らすように書き換えただけできちんと1Hz桁まで表示ができるようになりました。

また、周波数調整もUp、Downともにもともと1Hzずつ調整は可能ですがスイッチによって10ステップ(= 10Hz)ずつ変化させているのでこちらも1ステップずつ変化するように書き換えればOKです。しかし、1Hzずつの変化だけでは不便なので暫定的に長押しのときのみ10Hzずつ変化するようにして、PWRボタン押しながらで100Hzずつ変化するアクションも残しておきました。

組み立て当時(2年前?)
ファームウエア改造後 下のTX-500も同じものに書き換えました
 あっさり1Hz表示と調整が可能になりました。(もちろん周波数制限を加えてあります)ここら辺の融通が利くということはもともとのプログラムが優れているからなのだろうと感じました。

次のステップはQRSS/DFCW部分の作りこみですが、既存のビーコンシステムのプログラムを改変するよりもまったく別個に作ったほうが良さそうです。また通常のCW運用では1Hzまでの細かい調整が必要なさそうなので従来の10Hz単位の表示&調整に戻してQRSS/DFCWなどの狭帯域デジタル通信モードに入ったときに1Hz単位の表示&調整に変えるようにすることと、モードごとに運用周波数とメッセージをメモリできるようにする、といったところを中心にプログラムしていこうと考えています。

改造例1:周波数UPボタン処理(短く押すと1Hzずつ、長く押し続けると10Hzずつ連続可変)

(juma-tx500.c 1198行~ 赤文字部分を追加)

 // Freq +/- (PA100 Band buttons)
        static unsigned char sw_flag = 0;
        if(FREQ_UP == 0)                                         // Band + button
            {
            if(RFPWR == 0)
                eeprom.defval.txfreq[board_type] = eeprom.defval.txfreq[board_type] + 100;    // speed tune
            else if(sw_flag & 0x01)
                eeprom.defval.txfreq[board_type] = eeprom.defval.txfreq[board_type] + 10;    // normal tune

            else
                eeprom.defval.txfreq[board_type] = eeprom.defval.txfreq[board_type] + 1;    // fine tune
 
            if(eeprom.defval.txfreq[board_type] > hi_tx_freq[board_type])
                {
                eeprom.defval.txfreq[board_type] = hi_tx_freq[board_type];
//                beep(HZ587_31, cal.calval.beep_len);                // D tone over beep
                beep(TONE_A, cal.calval.beep_len);                    // A tone over beep
                }
            else
//                beep(HZ466_85, cal.calval.beep_len);                // Bp tone ok beep
                beep(TONE_D, cal.calval.beep_len);                    // D tone ok beep

            calc_tword();                                            // just calculate new DDS set value

            ms_delay(BUTTON_DEBOUNCE);

            if(FREQ_UP) sw_flag &= 0xFE;
            else sw_flag |= 0x01;

            }


改造例2:1Hz桁周波数表示処理

 (juma-tx500.c 1430行~ 赤文字部分" "内の6キャラクタを5キャラクタに削る)

// second line
                set_cur_lcd(LINE2);                                // second display line

                if(alarms !=0)                                    // alarm display
                    {
                    display_cw_speed();                            // display formatter for CW speed

                    display_alarms();

                    lcdoutch(' ');
                    disp_tx500_freq(eeprom.defval.txfreq[board_type]);
                    }

                else                                            // normal display
                    {
                    if(    key == 1)
                        {
                        display_cw_speed();
                        sprintf(lcdpbuff, "  TX  ");
                        lcd_putst(lcdpbuff);
                        disp_tx500_freq(eeprom.defval.txfreq[board_type]);    // display frequency
                        }
                    else
                        {
                        switch(eeprom.defval.pa_state)
                            {
                            case 0:
                                display_cw_speed();
                                sprintf(lcdpbuff, " STBY ",eeprom.defval.cwspeed);
                            break;

                            case 1:
                                display_cw_speed();
                                sprintf(lcdpbuff, " OPER ",eeprom.defval.cwspeed);
                            break;

                            case 2:
                                display_cw_speed();
                                sprintf(lcdpbuff, " TUNE ",eeprom.defval.cwspeed);
                            break;
                            }

                        lcd_putst(lcdpbuff);
                        disp_tx500_freq(eeprom.defval.txfreq[board_type]);    // display frequency
                        }
                    }


という具合に最小限の追加修正で実現できます。

このソースファイル群はC30コンパイラ用に記述されているのでC30でコンパイルするのが望ましいです。新しいXC16でも可能ですが、割り込み処理の記述が異なっておりこの辺の互換性が取られているのかは不明です。実際XC16でもそのままコンパイルできましたが、当局の環境では一部動かない部分が最近見つかったので現在C30でコンパイルしたものに入れ替えています。

年末は他の事でいっぱいいっぱいなので続きは落ち着いてからでどうかひとつ。

2014年12月3日水曜日

とうとうアレ(?)に手を出してしまった。

JD1チャレンジから1週間経ち、ふつふつと沸いてきた思いをついに実行に。

というと大げさですが、136kHz運用開始前からずっと付き合ってくれたローディングコイルをそろそろリニューアルしようと考えていました。今年の目標にも掲げていたことですがアンテナシステムの改良の一環として新ローディングコイルの製作をようやく実行に移すことにしました。

現用のローディングコイルと先日製作した475.5kHz帯用のローディングコイルを踏まえて以下のように仕様を考えました。

・コイルボビン径は現用と同じ25cm径
・コイル線剤をリッツ線として無負荷Q≧500を目指す
・メインコイル単独で6~7mHのインダクタンスを確保する
・バリオメーター内蔵として、インダクタンス可変域5~8mHとする
・バリオメーター機構は金属フリーの素材を用いる
・バリオメーター操作に減速機構をつけて微調整しやすくする
・高周波電流計と絶縁型インピーダンストランスを組み込む(できれば)

要はやはりこちら。


...リッツ線であります。

リッツ線は表皮効果を抑えることによって高周波抵抗を下げコイルなどに使う場合Qを高く保てる利点がありますが、ひと口にリッツ線といってもさまざまで一体どれを選べばよいのか見当もつきません。

JH1GVY森岡OMが、おそらくオヤイデで売られているのと同じものと思われる素線0.08mm径UEW30本のリッツ線を10本撚ったものを130m余り使用して作成したローディングコイルを紹介されています。資料によると0.08mm/30リッツ線の直流抵抗は125.9Ω/kmで、10本束ねた場合単純計算で12.6Ωとなり130mだと1.6Ωになります。このときの高周波抵抗が136kHzで3.8Ωという結果がでており、直流抵抗の約3倍弱に相当すると思われます。また、素線がなるべく細いことで抵抗が下がる傾向だそうです。

そこで0.08mm/300の長いリッツ線を探してみましたが、なかなか目的に合うものがなく結局マイクロ・パワー研究所のリッツ線在庫リストの中にある0.08mm/250のリッツ線が一番近そうだったので160mほど購入しました。D-STARデュアルバンドハンディ機が1台買えるほどの値段でしたが...

6mH台のインダクタンスを得るのにはリッツ線は150mほど(単層巻きの場合)必要になり、0.08/250リッツ線の直流抵抗は 2.26Ωで予測交流抵抗は5~6Ωといったところになります。Qは600~700いけると良いかなぁと。

他に必要な材料はほぼそろいましたが製作は年越してからになりそうです。

閑話休題。

先ほどJD1に移動されていたJA1BVA齊藤OMが帰宅され136kHz掲示板に運用記を上げられていました。

内容を見てみると早朝夜間よりもどちらかというと0800JSTから0900JST台が一番つながるチャンスがあったように思いました。そういえば2月のとき0900前後で本土と交信していましたね。一方24日早朝の当局の信号はどうも捉えられているような感じではなかったようでちょっと残念...

またアンテナ設備の展開が今後移動場所で厳しくなってしまうらしく今回でJD1での136kHz運用終了とのアナウンスがあり、これまた残念です。当局にとってみれば不完全燃焼といった感じですが、まぁ仕方ないですね。

これからは、もう少し移動範囲を拡げて(といっても国内ですが^^;)CW交信距離を伸ばしていきたいです。

とりあえず来年の関ハムシンポ前日の関西移動から(鬼が笑う(笑)