2014年9月5日金曜日

mbedお試し

マイコンといえばPICばかり扱ってきましたが、他のも弄ってみようと少し前からARM系のマイコンボードを購入していました。そのなかでもmbed対応のマイコンボードで、STMicroelectronics社のSTM32マイコンボードNucleoは秋月やそのほかでも1500円前後で手軽に入手できます。今回はマルツで購入しました。

モノはST Nucleo F401REで、ARM Cortex-M4 84MHz Flash 512KB SRAM 96KBと上位モデルになります。

mbedはPC自体に開発環境を置かずに、ブラウザ上でコードを記述したりコンパイルして実行ファイルをダウンロードし、Drag&Dropでマイコンボードに転送して即実行できるという非常に便利な環境になっています。

しばらくボードはそのままになっていましたが、G+つながりでにわかに流行りだした(笑)ので自分も乗っかってみたという次第です。

スタートは比較的容易です。

mbedのサイトでユーザー登録してログインし、右上のCompilerをクリックすると開発画面が別タブで出てきます。mbedマイコンボードのUSB端子からPCにつなぐとドライバーがインストールされ(モノによっては(Nucleoの一部など)ファームウエア更新が必要。ですがサイトに手順が載っています)USB大容量記憶装置(ドライブ)として認識されます。PCで認識されたドライブを開いて中にあるmbed.htmをダブルクリックするとmbed開発環境がマイコンボードを認識してくれます。後々別のmbed対応ボードの追加も可能です。

開発に当たってライブラリやサンプルプログラム、公開されたほかの人のプログラムもインポート可能でチュートリアルも充実しており、開発効率は良いと考えます。

そこで早速、基本のLチカとDDS版Lチカ(笑)やってみました。


mbed.hという基本のインクルードファイルを導入し、PICで記述したDDSへのシリアル送信部分と周波数設定関数はほぼそのまま、出力ポートの設定のみであっさりとコンパイル通りました。(変数の型についてWarningでましたが)

コンパイルが通ると自動的に実行ファイル(*.binファイル)がダウンロードされるのでマイコンボードのドライブにファイルをDrag&Dropすれば、転送されて即実行されます。


 NucleoからBB上のAD9834のモジュールに通信ラインを接続して電源を入れ、設定周波数どおりのDDS信号が出ました。

言語がC++なので多少修正は必要かもしれませんが、今までのPICのプログラムソースが使えそうです。また逆にmbedで開発した資産もPICでも使えてソースが相互に利用できそうでなかなか良さそうに思えました。

Cortex-M4搭載なのでDSPも簡単に使えたらいいなぁ...←欲張りhi

2014年8月30日土曜日

WSPRコード生成手順を探る(訂正あり)

Weak Signal Propagation Reporter ; WSPRはK1JT Joe Taylor氏が開発した低電力ビーコン送受信プログラムで、数Hz帯域幅でSNR-28dBの信号までデコード可能な136kHz帯でもよく使われるデジタルモードのひとつです。

WSPRコードの生成はPCのソフトで行いますが、PCをつかわず送信機単体か外部コントローラーのPIC内で生成できないものか模索中です。

幸いなことにWSPRのソースコードは公開されておりユーザーマニュアルにWSPRコード生成の概要が記されていますが、ソースコードやマニュアルを見ても拘束長?畳み込み?などなど素人の自分には最初なんのこっちゃわかりませんでした。

ネットで手がかりを探った結果、G4JNT Andy Talbot氏のサイトにWSPRコーディングに関する具体的な手順の解説を見つけました。あと、前方誤り訂正(Forward Error Correction ; FEC)も少し勉強してようやくつかんできました。

備忘録としてソースコードを読んで解説を訳しながらまとめてみることにします。

1.送出キャラクタの圧縮
基本様式は、コールサイン(原則6文字)、グリッドローケータ(4文字)、送出電力(2文字)の計12文字(=12バイト=96ビット)ですが、これらをまとめて50ビットに圧縮します。

1)コールサイン部の数値化
 ①文字の種類と対応する番号
  数字、アルファベット、スペース記号を0から36の数値に割り当てます。
 i)数字(0~9)⇒ 0~9
 ii)アルファベット(A~Z) ⇒ 10~35
 iii)スペース記号 ⇒ 36

 ②注意点
  コールサインの1文字目はスペースを含め全キャラクタ使用可能
  コールサインの2文字目はスペース記号のみ使用不可
  コールサインの3文字目は数字以外使用不可
  サフィックス(4~6文字目)はいずれも数字は使用不可

 ③ユニーク数
  37 x 36 x 10 x 27 x 27 x 27 = 262177560 < 268435456 = 2^28 = 28ビット

 ④各数値化キャラクタをCh1~Ch6とすると、数値化コールサインNは、
  N = ((((Ch1 x 36 + Ch2) x 10 + Ch3) x 27 + (Ch4 - 10)) x 27 + (Ch5 - 10)) x 27 + (Ch6  - 10)

2)グリッドローケータ部と送出電力部の数値化
 ①文字の種類と対応する番号
 i)数字(0~9)⇒ 0~9
 ii)アルファベット(A~R) ⇒ 0~17

 ②グリッドローケータ部の数値化
  ユニーク数は、
  AA00~RR99 ⇒ 18 x 18 x 10 x 10 = 32400通り < 32768 = 2^15 = 15ビット

 各数値化キャラクタをLoc1~Loc4とすると、数値化グリッドローケータM1は、
 M1 = (179 - (Loc1 x 10 + Loc3)) x 180 + Loc2 x 10 + Loc4
 (余談:素直にM1 = (((Loc1 x 18) + Loc2) x 18 + Loc3) x 10 +Loc4にしなかったのはなぜなのでしょう?^^;)

 ③送出電力部と数値化グリッドローケータ部の組み合わせ
 電力値Pwr(dBm) = 0~60 (ただし、一桁目が0,3,7のみソフトで認識されます)

 数値化グリッドローケータと電力部の組み合わせ値Mは、
 M = M1 x 128 + Pwr + 64
 で、最大値が4124287 < 4194304 = 2^22 = 22ビット となります。
 (余談:最後の「+ 64」は、拡張用の予備部分なのかもしれませんが未確認)

これで数値化コールサイン部と数値化グリッドローケータ・電力部で
 N28ビット + M22ビット = 50ビット
に圧縮されました。

2.1バイト値1元配列化
 後の前方誤り訂正処理(FEC)を行うため、圧縮した50ビットを1バイト値の1元配列として割り当てます。 FECに入力するデータの大きさは拘束長32、レート1/2から50 + 32 - 1 = 81ビットになります。したがって11バイト = 88ビットの器が必要になります。
 その器に上から数値化コールサインNと数値化グリッドローケータ・電力Mを隙間無く入れ、残りの器(7番目の3ビット目以降)はすべて0とします。

3.FECエンコード
 32ビット長のシフトレジスタを2つ用意して、データの最初のバイトのMSBから1ビットとりだして、各々のシフトレジスタを右に1シフトさせてからLSBに格納します。そして、一つ目のシフトレジスタと0xF2D05351とのANDをとり、ビット間のXORをとった結果を別のレジスタに格納。もうひとつのシフトレジスタと0xE4613C47とのANDをとって同様にビット間のXORをとった結果をレジスタに格納。この操作を81回繰り返すことによって162ビットのコードが生成されます。

4.インターリーブ
 無線による信号伝送においてランダムエラーとバーストエラーに対してFECはランダムエラーには強いが、バーストエラーにはあまり強くないのでインターリーブを施します。
ビットの並びをある法則によってシャッフルして隣同士のビットを離すことによりバーストエラーに対抗する手法です。
 WSPRの場合は、162ビットのコードに順番にビットに番号を振って、その番号を8ビットであらわしてビットの並びを逆さにして並び替えます。
まず符号なし8ビット整数0から255まで順番にビット並びを反転します。
たとえば、"1"なら、b00000001 ⇒ b10000000 = "128"
     "18"なら、b00010010 ⇒ b01001000 = "72"
並び替えられた番号順にビットを並び替えます。
ビット並びを反転した整数が162未満の場合、その整数の番号の位置にFEC処理したコードを順番に1対1で割り当てていきます。
これをコード数である162回繰り返します。
 これで162ビットのデータシンボルが生成完了です。

5.同期シンボルとの連結
 最後にあらかじめ求められた擬似ランダム同期シンボルとデータシンボルを連結して1シンボル2ビット(4階調)の最終送出データが完成します。
 
 【162ビット同期シンボル】

1 1 0 0 0 0 0 0 1 0 0 0 1 1 1 0 0 0 1 0 0 1 0 1 1 1 1 0 0 0
0 0 0 0 1 0 0 1 0 1 0 0 0 0 0 0 1 0 1 1 0 0 1 1 0 1 0 0 0 1
1 0 1 0 0 0 0 1 1 0 1 0 1 0 1 0 1 0 0 1 0 0 1 0 1 1 0 0 0 1
1 0 1 0 1 0 0 0 1 0 0 0 0 0 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1
0 1 0 0 0 1 1 1 0 0 0 0 0 1 0 1 0 0 1 1 0 0 0 0 0 0 0 1 1 0
1 0 1 1 0 0 0 1 1 0 0 0

 最終送出データシンボル(n) = 同期シンボル(n) + データシンボル(n) x 2

間違っているところがあるかもしれないので逐一修正しますが、この手順をCでコーディングしてみようと考えています。

2014年8月27日水曜日

ムーミン谷の国から

ハムフェアも終ってまだ1週間も経っていないのに、遠い過去のような感じがするのは気のせいでしょうか。

みなさんいかがお過ごしでしょうか。

TX-136でおなじみのフィンランドにあるJUMAでは長らくすべてのキットがSold Outになっていましたが、今年7月過ぎからキットのサプライヤーを新しくして少しずつキットの販売を再開しています。

以前から475.5kHz帯開放を見据えてTX-136の兄弟機TX-500を購入しようとしばらくアンテナを張っていたところ、ハムフェア直前にTX-500キットの在庫5セットを確認したのでこのタイミングで1セット購入に踏み切りました。ここのところの円安でTX-136を購入した頃に比べて10,000円以上高くついてしまいましたがこの送信機シリーズの完成度の高さには疑いもないのでまだまだコストパフォーマンスは高いと思っています。

今回もPayPalを使いましたが、適度な自制心(笑)があれば海外通販にはとても便利ですよね。

そんなわけで、本日到着しました。注文してからほぼ1週間。早いです。

消費税はしっかり取られますhi
ずっしりと重さを感じるパッケージ TX-500の書き文字が
中身ちょっとだけ 電源ケーブルも同梱されてます
 TX-136のときはパーツの欠品何点かと基板のパターンが一部切れたりとあまりよろしくなかったのですが、今回は果たして...

 製作過程は逐一ブログで報告します。

あとKeyer Mini-V2ブログに書きましたが、試験的に基板の発注先をかえて基板を発注することにしました。プログラム済みPICとのセットを再販しますのでよろしくお願いします。

2014年8月25日月曜日

夏が終わりました

先日の23,24日はハムフェア2014に参加していました。


 展示機材をリュックに詰め込んで家を出て1時間ほどで会場に到着しました。秋の気配がするとはいえまだまだ蒸し暑く汗だくになりました。出展入場時間前に全日本長中波倶楽部の7L1RLL若鳥さんとお会いして入場。設営開始しました。

ブースはこんな感じでした
 一般入場開始後から早速twitterやGoogle+でお世話になっておる方々が多数訪ねていただいてありがとうございましたm(_ _)m
やはり、向かって左端の大きなローディングコイルやリッツ線できれいに巻かれた135kHz,475.5kHz帯短縮コイル&マッチングトランス整合システムに注目が集まっていました。自分もFSK改造TX-136、外部コントローラー実機とプログラム、そしてMini-Whipを展示させていただきましたが、マニアックすぎたのかほとんど質問されませんでした^^;;;

 まぁでもhamlife.jpの記事でも入場者数が昨年より増えたそうで、たくさんの方がこちらのブースにも足を運んでいただいたようです。記帳もおそらく80名くらいはいったのではないでしょうか。

 ブースで訪問された方を相手にするのは今回初めてなので、いろいろと勉強になりました。多くの方は、「このコイルはなんですか?」という切り出し。あとは「135kHzやってみたいんですけどね~」などなど。バンドが解放されて5年経過していますが総じて自分たちが当たり前と思っていることもまだまだぜんぜん認知されていないなという印象でした。一方LF帯が盛んなEUではイギリスのGSGBからLF TodayというLF帯のバイブルの3rd editionが発刊されたそうです。購入して勉強するつもりですが、今までの自分や135kHzで活躍されている皆さんの運用経験を踏まえて何か日本でも手引きになるような書がもうそろそろあってもいいんじゃないのかなぁとひしひしと感じています。

 やはり、もう少し導入しやすいように標準の設備の準備方法とか運用の実際とか自分もこれならできそうだという気持ちにさせるようなものがないと今後も局数は伸びないでしょう。来年は475.5kHz帯も開放される予定なのでなおさらそのように思います。

 ハードウエア面でもメジャーなメーカーがわざわざこの周波数帯の機器を開発するとは到底期待できないので、JUMAまでとはいかないまでもまじかるくらぶさんのように135kHz関連のキットも何かどこかで出してみたいなぁと思います。

 話が思いっきりそれてしまいました^^;

 お昼で中座したときに、すこしだけ会場を回ってみました。うわさになっていたこれ


 ばっちり見てきました。コンパクトで良いですね。モービルでFT-857を使っていますが、後継機期待できそうです^^写真にはありませんでしたが、CQ出版から発売予定のTRX305でしたっけ、こちらの実機も触ってきました。フルディジタル機ということでしたがメーカー機と比べても受信音の雰囲気など引けをとらない印象です。こちらは200k円弱になりそうで、ちょっと高めですが弄るのにはよさそうだなーと思いました。

 あと、期間中の唯一の戦利品はこれ。


1.2GHzの中古IC-120を先日の関ハムでゲットしたのでV/Uで使えるアンテナを探してこちらを購入しました^^ゆっくり設置して楽しみたいと思います。長波だけでなくほかのバンドも出ますよ~

 あと、1日目のアフターでは突発的に数名の有志で新橋の鳥料理居酒屋で飲み始め、2次会以降はコンテスターが集まる某飲み会に無謀にも乱入して夜中2時近くまで飲み歩いてしまいました^^;;

何とか鳥(名前忘れた(汗)を炭火で。美味。
 そんなわけで、非常に充実した2日間でした。アイボールいただきました各局どうもありがとうございました。またお空で会いましょう(^-^)/

なぜか物寂しい...

 追伸:Keyer mini-V2基板セット無事すべて完売いたしました。ありがとうございました。

2014年8月19日火曜日

TX-136再進化計画とハムフェアの準備

JUMA製135kHz帯CW送信機キットTX-136のFSK対応ファームウエア改造を見直し整理して第一弾が完成しました。

 一口にFSKといってもさまざまなモードがあるため、汎用性を持たせるように外部からのコントロールはDDSのレジスタから引き算する値をシリアル通信経由でダイレクトに入力する形に変更しました。コントロールはPCから操作する場合を想定した場合でも、PCのソフト側でTX-136用の通信コマンドフォーマットに対応させれば、WSPRだろうがJT9だろうがWSQだろうが(笑)

 最小周波数偏移は、20MHz駆動AD9833出力を2分周して目的周波数を得ているので、

 20,000,000 / 2^28 / 2 = 0.037252902984619140625Hz ≒ 0.0373Hz

 と、TCXOの精度1ppm(0.136Hz)よりも小さい値になり十分以上でしょう。これでサムウエイのTX-2200Aオプション2と比肩する(それ以上?)機能が備わったことになります。

 外部コントローラー側も、各モードのプロトコールに見合うシフト量を送信するようにプログラムを修正しました。

 ところで今週末23日(土)、24日(日)に東京ビッグサイトで行われるハムフェア2014の全日本長中波倶楽部ブースに実機展示させていただけることになりましたので、具体的な手法についてをそちらで公開します。他にも475.5kHz帯やアクティブアンテナなどの展示もあるそうなのでご興味ありましたらぜひブースまで足を運んでいただけると幸いです。自分もブースでお手伝いさせていただく予定です。

 閑話休題。

 タイトルにTX-136再進化計画とありますが、次の第二弾ファームウエア改造計画を備忘録兼ねて。

 次の目標はTX-136スタンドアロンでQRSS, DFCW, WSPRモード対応です。TX-136のファームウエアをビルドしたときの消費プログラムメモリはおよそ33%とまだまだ余裕があります。QRSSとDFCW対応はとりあえずいけそうです。WSPRはコード変換プロトコールやソースは公開されていますがライセンス上公開されたソースの引用改変ができず、自分で変換プログラムを作って本体のPICに入れ込みたいので前の2モードが完成してから手をつけます。最終的には、GPSユニットからシリアル通信経由で自動送信とグリッドローケータ自動取得できると良いなと妄想しています(笑)

 そんなわけで、今年のハムフェアの資料作りやたまったカード発行準備をこれから^^;

追伸:先月関ハムで頒布したKeyer Mini-V2の基板プログラム済みPICセットのお取りおき分と残り分を持参します。残りは2セットありますがご希望の方いらっしゃいましたらメールでご連絡ください。先着締め切りで、ハムフェア前日までご連絡なかった場合でも一応持っていきますので当日直接お声をかけてください。