ツールの使い方

2023年1月26日 (木)

アンテナアナライザーAA-1500でのケーブルインピーダンス測定について

Facebook RigExpertグループに投稿した内容をこちらにまとめておく。

事の発端はローカル局のアンテナ調査。6m同軸ケーブルでSWR=1.9位になる件。同じアンテナで10mだとSWR=1.1。そこで、ケーブル・インピーダンスを計ろうと思ったことが事の始まり。

ケーブル端に50Ωのダミーロードを付けてケーブルSWRとR,Xを測定したが、SWR=1.45、R=72Ωと出た。ちょっと変なので、AA-1500に直接ダミーロードを付けて測定した。

Photo-1がダミーロードを取り付けているところ。Photo-4でDC抵抗が50Ωであることを確認。
Img03799_small Img03800_small

この状態でもSWR=1.44(Photo-2)、R=72.75Ω(Photo-3)。System Impedanceは50ohmとなっている(Photo-5)。何かがおかしい感じがするのでSelf testを実施したらLoad Testにて232エラーとなった。232エラーが何を意味するかわからないけれど、Self Testがエラーに終わったのはわかる。

Screens

この状況をRigExpertグループにて報告したら、ダミーロードが3GHzまで対応するアダプターなしのダミーロードでないのがいけないとのコメントをいただいた。いいかげんなダミーロード取り付けが原因でSelf Testがエラーになるという指摘は反論することができないが、この状態でR=72.75ohmというR,X Chartが出てくることは納得がいかない。50Ωのダミーロード直付けでR=72ってのはどう見ても変だ。

Self TestがちゃんとしたダミーロードならPassするのだろうか?これはちゃんとしたダミーロードを買って試してみるしかない。一方AA-1500にはCalibration機能がある。カジュアルな方法になるけれども手持ちのダミーロードでキャリブレーションしてみたくなった。そのうえでケーブルインピーダンスを計ろうと思う。

まず同軸ケーブルの等価回路から特性インピーダンスを求める計算式を設定する。測定はRG58/1.5mと5D2V/6mの2本で行った。Open、Short試験でのShortではM型メスコネクターにて芯線と外被線をショートさせた。

Cablezo1

それぞれのケーブルの特性インピーダンスはともに70Ω程度となった。50Ωのダミーロードを直結した状態とほぼ同じだ。なので、系としてはちゃんと動作している感じだが、インピーダンスが50Ωから随分と外れている。

Cablezo2

そこでCalibrationを実行。

Cablezo3

キャリブレーション後のケーブルインピーダンスはおよそ50Ωと算出された。こうならないとおかしい。

Cablezo4

実際のアンテナのSWRがCalibration適用有無でどう変化するかを確認した。

Cablezo5

SWRの変化の様相は周波数によって異なることがわかる。ただ、思いのほかCalibrationの影響が現れていない感じもする。周波数によってSWR値が変化する(10MHz)場合とSWR値はそれほど大きく変化しないが共振点が変化する(14MHz)場合があることがわかる。

よくよく考えてみるに、なぜCalibration機能があるのだろう?ここについてはもう少し考えてみたい。

2023年1月20日 (金)

XR2206 Function Generator ICでのFSKについて

XR2206を使ったFunction Generator kitを作った。このICはFSKをサポートするのでその動作について確認した。

Img03748_small
奥がKit、手前がFSK切替信号を発生させているPico。

このキットは中国製で、正弦波と三角波を生成するFunction Generator。少ない外付け部品で広範囲の周波数の信号を作ることができる。回路図は以下のとおり。キットの回路図にFSK実験用のR10とPICO接続端子、SINE出力のAC成分だけを取り出すようにC10を追加している。

Xr2206fsk

このXR2206はTC1・TC2間に接続されるコンデンサーCとTR1(P7)とTR2(P8)のそれぞれに接続される抵抗値R6,7,8とR10によってそれぞれ2つの周波数を生成する。この周波数のどちかを出力するかをFSKコントロール端子(P9)によって選択する。発生する周波数は以下のとおり。

F = 1/RC

Xr2206fsk2

キットの回路図にR10を接続し、FSK制御信号として、Picoから8msecインターバルの信号を入力した。その結果が以下のオシロスコープ出力結果になる。

Ds1z_quickprint1_20230120212301

周波数の切り替えはスムーズだ。全く同期がとれていない2つの発信波形を切り替えると、切替時点でレベルが大きく変化するが、XR2206は波形のレベルが引き継がれている。これってどうやって実現するんだろう??優れものだと思う。

2023年1月 5日 (木)

wsappxの停止、スタートメニュー表示なし、検索不可に関する対応方法メモ

Windows 10における以下問題の対応と方針

  • wappxのシステムリソース消費大
  • スタートメニュー表示なし
  • 検索欄に入力できない

作業記録

gpeditにてwappxを未構成に設定。ターゲットPCは既に有効に設定してあった。有効設定でもwappxは可也のCPUとメモリーの両リソースを消費していた。

Regeditにてsvchostのwappxをclipsvc AppXSvcからNotFound AppXSvcに変更

以上でCPU使用率およびメモリー使用率はかなり低下した。

その他問題で実施したこと

スタートメニューが現れない件参照リンク

以下を試したが効果なし。

システムファイルの整合性等の確認

  • DISM.exe /Online /Cleanup-image /Restorehealth
  • sfc /scannow

システム必須アプリの再導入、PowerShellから以下を実行

  • Get-AppXPackage -AllUsers |Where-Object {$_.InstallLocation -like “*SystemApps*”} | Foreach {Add-AppxPackage -DisableDevelopmentMode -Register “$($_.InstallLocation)\AppXManifest.xml” -Verbose}
    この実行は10時間以上時間がかかる。Powershellは途中でエラー終了してしまった。

検索入力が出来ない件参照リンク

以下を試したが効果なし。

  • ctfmon
  • コマンドプロンプト管理者権限で以下を実行
    REG ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /v ctfmon /t REG_SZ /d CTFMON.EXE

復帰ポイント12月23日に戻す(Edgeのインストールがおこなわれていたようだ)-> 戻すことはできたが

スタートアップオプションからスタートアップ修復  -> スタートアップ修復するものがない

セーフモードからの回復、更新プログラム実施前に戻す -> 更新から10日以上経過していると戻せない

--------

上記いずれもNG。イベントビューアをみると以下のエラーが多発している。

障害が発生しているアプリケーション名 TextInputHost.exe
障害が発生しているモジュール名 KERNELBASE.DLL
TextInputHostに障害が発生すると日本語変換にも影響がでるらしい(参照リンク)。

このTextInputHostのエラーがスタートメニューや検索での問題を引き起こしている可能性が高いと判断。上記参照リンクではインプレースアップグレードによる修復でリカバリー成功している。

TextInputHostに関する修正がKB5019157にて昨年Windows11に適用されている。恐らくWindows10にも適用がされたのではないかと思うが記録なし。ターゲットPCでは12月15日更新プログラムが適用された記録があるので、この変更がエラーの引き金になっている可能性が高い。しかし、更新から10日以上経過していると更新前には戻せないようだ。

KERNELBASE.DLLが何でエラーを出し続けているかは不明。何かしら入力デバイス(タッチパッドなど)から異常な入力が頻発するとこうなるのだろうか?こうなるとインプレースアップグレードが視野に入ってくる。デバイスマネージャでタッチパッドをアンインストールしても状況は変わらず。次の再起動でドライバー再導入となったが状況変わらず。

KERNELBASE.DLLの修復に関する記述から、KERNELBASE.DLLの入れ替えが有効と思われる。しかし、この作業をマニュアルで行うことはリスクが高い。むしろインプレースアップグレードを行う方が安全・確実と判断できる。

Windows10のインプレースアップグレード

手順に従ってインプレースアップグレードを実行する。インプレースアップグレードとはシステム部分のみを上書き(アップグレード)するWindowsインストール手法。

この時点での結論

Windows10のインプレースアップグレードを実施する。一般的な修復作業では改善が見られず、手探りでWindows内部に手を入れようとするとWindowsのデスクトップが立ち上がらなくなるリスクを伴うので、インプレースアップグレードにより包括更新を行うのがベストな対応と判断される。

 

作業内容の詳細

Group Policy Editorによる修正

ストアの更新プログラムの自動ダウンロードおよび自動ダウンロードを未構成にする。

Wapp01 Wapp02 Wapp03

Registryの修正

Wapp04

Windows 10無印ではgpedit.mscが存在しないのでRegistryを直接編集する。
コンピューター\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Svchost
既に何かがインストールされているとxxx AppXSvcとエントリーされているはず。ここをNotFound AppXSvcとModifyする。
なお、Registry変更の場合は必ず事前にエクスポートして変更前データを保全しておくこと。

wappxの自動更新の未構成設定とRegeditによるwappxプロパティの変更の前後でのパフォーマンスモニター改善

作業前:wappxがCPUをかなり消費している。
Img03454_20230108143901

修正後。wappxによるCPU消費は改善された
Img03456_20230108144101

System File Checker (sfc) によるシステムファイル確認

破損ファイルが見つかったが正常に修復された。Img03458

DISMコマンドによるScanHealthtとRestoreHealthの実行

その後のsfcで正常性を確認。
Img03461

上記作業後もスタートメニュー、検索とも改善無し。

Windows アプリ更新作業の実施(背景画面)22時から翌日7時まで実行後、途中でPowerShellが停止してしまった(前面に出ているファイルリストはイベントビューでエラーがログられているtextinputhost.exeの保存先)。この後の再起動でWindowsが立ち上がらなくなり(Explorer起動エラーと思われる)、タスクマネージャから再起動をかけたところWindowsが復旧した。このことから、真の原因が不明なまま大きなアクションを実行することはリスクが伴う判断する。
Img03475

イベントビューワーのApplicationのイベントログには3分間隔でTextInputHost.exeの障害がログられている。障害を発生しているモジュールはKERNELBASE.dllなので、仮に障害対応を実施するとなるとKERNELBASE.dllに対して行うことになる。
Img03476

TextInputHost.exeとの関係で入力デバイスの問題を仮定し、TouchpadをDisableしてみたが効果はなかた。
Img03478_20230108145501

念のため、スタートアップオプションで修復作業を試みたがいずれも効果は無かった。
Img03493

Img03477
回復オプションで、explorerのシステムエラーがレポートされた。今回の障害との関連は不明だが、何かしらの異常な(大量な?)入力が行われている事を示唆しているようにも感じる。

加えてとても気になるのが頻繁(2,3秒おき)に回転リングが表示されることだ。これとKERNELBASE.dllとの関係を疑ってみる。
Img03495

定期的にシステムリソースを消費しそうなアプリで、かつ年末にインストールされたものとしてAvast Antivirusが目に留まった。
Img03497

これをアンインストールしてみる。結果は効果は認められなかった。
Img03496

以上

追記

インプレースアップグレードによって今回の問題は解消!!!

やっぱりマニュアルでチマチマ作業するよりは一括で更新がリスクも少なく安全と実感した。ただし、Windows 10が最新バージョンに更新されることで戸惑うアプリもあるようだ。実際、更新後にAcrobat Readerが互換性問題を検出し、継続使用するか否かのユーザー選択を求めてきた。

手順はシンプルでWindows 10ダウンロードリンクにアクセスし、ツールを今すぐダウンロードをクリックする。後は表示される手順に沿って作業を進めるだけ。ただ、その前にセキュリティツールをアンイストールすることがRecommendされている。これはセキュリティツールがWindows インストールを阻害する(システムファイルへのWriteアクセスをさせない)場合があるため。インストールプロセスが途中で停止してしまい、システムが不定状態になると厄介なので、ここは確実にアンインストールする。実際の作業ではNorton 360をアンインストールしたが、このアンインストールに先立って、後の再インストールの為にユーザーアカウント情報を保存するか聞かれるので、保存するを選択する。これによってWindows 10インプレースアップグレード完了後にNorton 360をインストールすれば、アンインストール前の状態に戻せるはずだ。

Win10

Windows 10ライセンスを含めた個人情報が引き継がれると思うので、Windows 10の再インストール後も自分用にカスタマイズされたWindows 10環境はそのまま維持されるはずだ。

Img03692_small

Windows 10インストール自体は結構時間がかかる。
Img03693_small

Windows10本体のインストール後は更新プログラムのインストールが続く。この過程で何度か(5回くらいだったか)リブートする。
Img03696_small

一連のインストール/更新作業が完了すると、ログオン画面が現れ、ログオンするとWindows 10インストール前のデスクトップが維持された状態でWindowsが立ち上がる。

事前情報通り、個人情報とアプリ環境はそのままでWindows 10本体が最新バージョンにリフレッシュされたようだ。このリフレッシュにより、イベントログ上もKERNELBASE.DLLエラーが引き起こしていた一連の問題がシステムログに記録されることは無くなり、障害は解消されたことがわかる。

以上

2022年12月19日 (月)

Google Driveへのパソコンフォルダーの同期方法

Google DriveにPC上の同期対象フォルダーの指定にちと手間取ったので備忘録。

スタートメニューにあるGoogle Driveを右クリックして、その他 -> 管理者として実行 を選択する。

Googledrive

するとGoogle Drive設定ダイヤログが表示されるので、そこでPC上の同期対象フォルダーを選べばよい。

 

2022年12月12日 (月)

PICO TNCの製作 その2

PICO TNC製作の続編その2。

プロトタイプが完成した。
Img03140_small

事前設定したインターバルで、ハンディ―トランシーバーのマイク端子経由にてMic-EフォーマットでGPSデータを送信することができるようになった。

PICO TNC コマンドの使い方

  • mycall JA0WBT または JA0WBT-7  :  SSID有無どちらでもよい。mycallを設定しないとBeaconは出ない。
  • unproto JA0WBT V WIDE1-1   :  Vの前はDestination Addressだが、ソフトウエア内部でMic-E形式のDestinationに上書きするようにした。なのでどんな文字列でも構わない。Vの後はデジパス1でNewパラダイムに従ってWIDE1-1を指定する。
  • digi ON  : デジパスを指定しているのでONを指定する。
  • gps $GNGGA   : プロトタイプに接続しているGPSモジュールのGGAフォーマットは$GNGGAと頭に付けてくるのでそれを指定する。これ以外のフォーマットタイプは今はサポートしていない。
  • btext HelloWorld  : BeaconのInformationに付加する自由テキスト。
  • beacon every n  : Beacon発生インターバル。n=1で1/6秒。最大360=60分。
  • PERM  : パラメータを設定したら実行。これにより設定したパラメータ値がFlashメモリーに保存され、パワーサイクルでも消えない。

以下がdispコマンド実行結果。MYALIASは設定しなくてもよい。

disp

ECHO ON
TXDELAY 100
GPS $GNGGA
TRace OFF
MONitor ALL
DIGIpeater ON
BEACON On EVERY 6
UNPROTO SUTPW8 V WIDE1-1
MYCALL JA0WBT-7
MYALIAS JA0WBT
BTEXT HelloWorld

OK
cmd:

送信されるパケットデータ

PICOの出力(トランシーバーのマイク入力)を入力(トランシーバーのスピーカ出力)にループさせてPICO TNCにて自分の出力を自分でデコードさせた。さらに実際にトランシーバー(FT-70D)のマイク入力に接続し、電波送信してI-Gateにて受信した。その受信した結果が以下:

17:43:53R JA0WBT-7>SUTPW8,WIDE1-1 Port=1 <UI C Len=24>:
`AB'l l[/`"9L}HelloWorld
17:43:53R JA0WBT-7>SUTPW8,WIDE1-1 Port=2 <UI C Len=24>:
`AB'l l[/`"9L}HelloWorld
17:43:55R JA0WBT-7>SUTPW8,WIDE1-1* Port=1 <UI C Len=24>:
`AB'l l[/`"9L}HelloWorld
17:43:55R JA0WBT-7>SUTPW8,WIDE1-1* Port=2 <UI C Len=24>:
`AB'l l[/`"9L}HelloWorld

I-Gateは2ポート設定しているので(1ポートにする方法がわからん)、同じ電波信号をPort1とPort2で2回取り込んでいる。最初のペアがPICO TNCが生成したフレームで、次のペアがPICO TNC内でループバックして再送信した信号になる。ループバックした信号はデジピートしたことになるのでWIDE1-1の後ろに*が付加されている。

Digipeaterとしての機能

Digipeaterとしの機能を確認する。FT3Dからビーコンを送信し、それをFT-70Dで受信。FT-70DのSpeakerをPICO TNCの入力に接続し、MicをPICO TNCの出力に接続した。

Img03160_hdr_small

Beaconrepeat

結果は、FT3Dからのビーコン(上図①)はFT-70Dでビーコン再送(上図④)された。そのビーコンはFT3Dで受信することができた(以下写真)。一方、UI-VIEW32はFT3Dからのビーコン(上図①)は受信表示したが、FT-70Dからのビーコン再送(上図④)は受信表示されなかった。
Img03161_small

考察として、UI-VIEW32はオリジナル信号を受信した後に、そのデジピート信号を受信した場合、それは受信表示しないのではないかと思われる。もしそれを許したら、同じ信号をデジピートの分だけ何度もI-Gateしてしまうから。一方、FT3Dは自分が発信した信号のデジピートであっても自分以外の送信機からの信号なのでそのまま表示したのだと思う。

UI-VIEW32のTerminalで確認したところ、上記の通りと判断できる。以下がTerminalの表示内容。3つ目のWIDE1-1に*が付いているのでデジピートされた信号と判断される。デジピートしたのはPico TNCになるので、Pico TNCはちゃんとデジピートしているのだけれど、それをUI-VIEW32がInternetには送り出さなかったということだ。

19:34:21R JA0WBT-7>SUTPW7,WIDE1-1 Port=1 <UI R Len=17>:
`AB(l!m[/`"9l}_0
19:34:21R JA0WBT-7>SUTPW7,WIDE1-1 Port=2 <UI R Len=17>:
`AB(l!m[/`"9l}_0
19:34:22R JA0WBT-7>SUTPW7,WIDE1-1* Port=2 <UI R Len=17>:
`AB(l!m[/`"9l}_0

 

乾電池駆動について

この実験に際して、PICO TNCを単四乾電池2本で駆動した。5分インターバルで一晩ビーコンを出し、朝停波。その状態で実験を続けていたところ午後3時ころには電池がなくなった(Watchdog Timer Failure発生)。結構電力を消費している。

基板への実装とケースへの取り付け

ブレッドボードに作った回路を

Img03170_small

この回路をユニバーサル基板に配置する。

Img03163_hdr_small

実装が終わった状態。RS232CでPCでモニターする。
Img03175_small

乾電池(単三2本)での動作確認。
Img03171_small

ダイソーの3個100円のケースにいれる。RS232Cのボードもユニバーサル基板に実装した。
Img03228_small

完成した状態。
Img03187_small

この状態で持ち運んで軌跡確認を行った。
Img03210_small

実験結果はまずまず良好で、基本機能が動作することを確認できた。

2022年12月 5日 (月)

GPSトラックログデータをGoogle Mapに表示する

GPSトラックログファイル(GPXファイル)をGoogle Map上に表示する方法の備忘録。

GPSトラックログファイルはヤマレコの山行記録からダウンロードした。対象とする山行記録を選んでマップ昨日からGPXファイルをダウンロードを選ぶ。
Photo_20221205121401

ダウンロードされるGPXファイルはこんな感じになっている。

<?xml version="1.0" encoding="UTF-8"?>
<gpx xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.topografix.com/GPX/1/0" xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd" creator="Yamareco Android 6.2.2 - www.yamareco.com">
<trk><name>track</name><number>1</number><trkseg>
<trkpt lat="35.5110116" lon="137.6645703"><ele>1040</ele><time>2022-11-17T23:46:07Z</time></trkpt>
<trkpt lat="35.5109365" lon="137.6644874"><ele>1041</ele><time>2022-11-17T23:46:17Z</time></trkpt>
<trkpt lat="35.5107415" lon="137.6643537"><ele>1045</ele><time>2022-11-17T23:46:30Z</time></trkpt>
<trkpt lat="35.5106972" lon="137.6642274"><ele>1048</ele><time>2022-11-17T23:47:24Z</time></trkpt>
<trkpt lat="35.5092595" lon="137.6552615"><ele>1284</ele><time>2022-11-18T00:28:01Z</time></trkpt>
<trkpt lat="35.509086" lon="137.6537141"><ele>1300</ele><time>2022-11-18T00:31:16Z</time></trkpt>

LatitudeとLongitudeがUTC付きで記録されている。

次にGoogle Mapを開き、自分のGoogleアカウントでログインする。その後メニューをだどって地図を作成を実行。
メニュー -> マイプレイス -> マイマップ -> 地図を作成

無題のレイヤのインポートを選択。
Gm1_20221205121401

ここにGPXファイルをドラッグ&ドロップする。
Gm2_20221205121401

すると、GPXファイルのエリアで軌跡が表示される。
Gm3

以上。

Yaesu FT3D APRSビーコン パケットデータの解析

FT3Dが送信しているAPRSパケットデータの解析をしたので、その記録。

以下がUI_VIEW32のTerminal出力に表示されたFT3DのAPRSビーコンデータ:

JA0WBT-7>SUTPW9,WIDE1-1 Port=1 <UI R Len=17>:`AB(l T[/`"9a}_0

FT3DはMic-E形式でAPRSパケットを送出している。FT3DのMic-EはDestination AddressとInformationにGPS座標情報(Latitude/Logitude)、高度情報(Altitude)、無線機形式(Radio Type code)で構成されている。

まずはDestination Address(以下の赤字部分)の分析から。ちなみにFT3DのGPS座標は北緯35度40.79分、東経137度38.12分。

JA0WBT-7>SUTPW9

Byte Latitude Msg A/B/C N/S Longitude offset E/W
S 3 A=1      
U 5 B=1      
T 4 C=1      
P 0   N    
W 7     +100  
9 9       E

SUTPW9は1バイト目からAPRSスペックの44ページに掲載される以下の表でデコードできる。1バイト目からこの表を見ながらその意味を解釈するとデータ並びのASCII Char順に以下となる。

  • S: Lat Digit Byte 1=3, Message A=1
  • U: Lat Digit Byte 2=5, Message B=1
  • T: Lat Digit Byte 3=4, Message C=1
  • P: Lat Digit Byte 4=0, N/S = North
  • W: Lat Digit Byte 5=7, Long Offset = +100
  • 9: Lat Digit Byte 6=9, W/E = East

Mice_destination_20221205081901

ちなみにMessage A/B/C = 111はスペックの45ページの表(以下)Off Duty(無線機の前に運用者は不在)という意味になる。

Msgtype
FT5DのマニュアルにあるMessageの解釈は以下の通り。

Micemessage

次にInformationに記載されたデータの解釈を行う。

`AB(l T[/`"9a}_0

結論を先に書くと、これは以下の3つのパート(青、赤、緑)で構成されている。

`AB(l T[/`"9a}_0

`AB(l T[/ : Logitude + Speed/Course + Symbol Code

Information Fieldのフォーマットはスペックの46ページに掲載されている。
Informationfield

この表に従ってデータを解釈する。

  • `  : Current GPS Data
  • A  : Ascii code=65, d+28 = 65 -> 137 (以下のMic-E Longitude Degree Encodingのd+28=65から値を引くが、先に解釈したDestination AddressのByte5でLong Offset=+100となっているので表の+100の欄の値を引く)。
  • B  : Ascii code=66, m+28 = 66 -> 38 (以下のMic-E Longitude Minutes Encodineのm+28=66から値を引く)
  • (  : Ascii code=40, h+28 =40  単純に40から28を引いた値がh。h=40-28=12
    以上よりLongitude=137度38.40分
  • l (small L) : Ascii code=108, SP+28=108 -> Speed Knot 0-9 (100の桁0、10の桁0、1の桁0~9
  • space  : Ascii code=32 , DC+28=32 -> Speed Knot 0 (1の桁0)、Couse 0-99 degree (100の桁0)
  • T  : Ascii code=84, SE+28=84 -> Couse 56 degree (10と1の桁)
    以上より、速度=0ノット、進路56度
  • [  : Symbol Lookup Table参照
  • /  : Symbol Lookup Table参照
    [/でRUNNERシンボル

LonitudedegreeLongitudeminutes

Speed and Course
Speedandcourse

SpeedencodingSpeedcourseencodingCourseencoding

 

`"9a} : Altitude

  • `  : Current GPS data
  • "  : Ascii code=34  34-33= 1       1*91*91=8,281
  • 9  : Ascii code=57  57-33=24          24*91=2,184
  • a  : Ascii code=97  97-33=64                   = 64        合計10,529   -> 海抜529m
  • }  : 終端記号

Altitudeは最も深い海の底(10,000メートル)からの標高で表現する。なので海抜に10,000メートルを加算する。この標高を基数91で表現する。例えば標高61メートルだと、10,061メートルとなるので、
   10,061 / (91*91) = 1  あまり1,780
          1,780 / 91 = 19, あまり51
つまり基数91表現で119あまり51となる。これに33を加算し3バイトで表現すると、Byte1=1+33=34、Byte2=19+33=42、Byte3=51+33=84となる。受信したビーコンはこの逆の方法で計算する。

_0 : Radio Type code

  • _0

Mic-E Type Codeによると_0はYaesu FT3Dのモデルコード。

 

Beacon Textについて

FT3DのBeacon ステータステキストにHello WorldをセットしてBeaconを送信してみた。以下、ピンクの所に挿入された。つまり。モデルコードの前。モデルコードがビーコン情報の最後に位置するようだ。言い換えるとAPRSスペック1.01に記載されているフォーマットに付加される形でモデルコードが追加されたことがわかる。

06:07:04R JA0WBT-7>SUTPW9,WIDE1-1 Port=1 <UI R Len=28>:`AB(l-=[/`"9N}Hello World_0

 

結果

以上より、FT3Dから発信されているビーコン情報は以下のとおりとなる。
北緯 35度40.79分
東経 137度38.12分
速度 0ノット
進路 56度
シンボル RUNNER
海抜 529m
無線機コード  Yaesu FT3D

以上

2022年11月29日 (火)

PICO TNCの製作

PICO TNC製作の記録。徐々に追記していく予定。>> このスレッドが長くなったので続きはPICO TNCの製作その2へ。

Img03051_hdr_small

PICO TNCの情報は以下GitHubから入手。
https://github.com/amedes/pico_tnc

当初はうまく動作しなかった。

反省点1:USB-Serialケーブル不良。RxDが動作しなかった。これがわかるのに半日消費。動作実績のないUSB-Serialケーブルは使わず、すCOMポートからのストレートケーブルが安心。

反省点2:Picoがイネーブルにしている入力端子はオープン状態にしないこと。ADC0(31ピン)をオープンのままにしていたらBeacon送信しなかった。これはADC0が入力有と判断して、入力処理を頻繁に繰り返していたためと思われる(要確認)。入力端子をプルアップ/プルダウンしたら問題は解消した。

動作確認中のブレッドボード。右がシリアルケーブル。デスクトップPCのCOMポートに接続(USB-Serialではない)。奥にある四角いケースがGPSセンサー。D-subコネクタ左側にあるチップユニットはRS232Cレベルコンバーター。Picoは3.3Vなので3.3V - RS232Cレベルに変換している。

Img03052_burst01_small

BeaconのPWM出力。PWM出力は波形テーブル(特定の出力周期でのPWM出力パターンテーブル)に従ってPWMレジスターにDMAで送られる。
Pwm

PWM出力幅が徐々に変化していく様子がわかる。
Pwm_20221129090601

このPWM出力をローパスフィルターで整形すると以下の波形になる(時間軸は異なる)。
Ds1z_quickprint1

ソフトウエア構造:

  • 送信フレームをsend_queue上に作り、その内容をsend()がPWMにDMAで送り込む。
  •  

main(){

   tty_write_str()  // opening msgをuart_queueにセット

   white(1){

      receive()   //Rig(SP)から受信したアナログ信号をADCにてデジタル化しDMAにて取り込み復調。
                //digipeatの場合はアドレス情報を生成
                      //受信データをuart_queueにセット(シリアルターミナル上に表示)

      send()      //送出フレームデータをRig(MIC)へPWMにてFSK信号を送信。
                     //send_start()がPTT ONしDMAトリガーオン、queue上のデータをPWMレジスターに転送開始
                     //DMAハンドラーがqueueデータを全部送出したらPTT OFF

      serial_input()    //uartとgpsからのシリアル・データ入力、unprotoでqueue上にフレームデータ作成

      serial_output()  //uart_queueの中身をuartへ出力

      beacon()  //send_unproto()でqueue上に送出フレームデータを生成

  }  

動作確認方法:

FSK変調済み送出データ(リグMIC入力)を受信データ(リグSP出力)にループバック接続して送出パケットを受信するとともにターミナル画面表示する。

GPSデータ:

GPSの出力データ:以下データを1秒ごとに出力している。GPS出力(RX)をターミナルのRxDに接続してターミナル画面上に出力した。

$GNGLL,3540.78870,N,13738.11970,E,065545.00,A,A*72
$GNRMC,065546.00,A,3540.78872,N,13738.11967,E,0.068,,291122,,,A*69
$GNVTG,,T,,M,0.068,N,0.126,K,A*36
$GNGGA,065546.00,3540.78872,N,13738.11967,E,1,12,0.82,511.8,M,36.5,M,,*44
$GNGSA,A,3,31,22,26,25,32,29,16,196,195,194,,,1.50,0.82,1.25*27
$GNGSA,A,3,73,70,71,82,83,,,,,,,,1.50,0.82,1.25*10
$GPGSV,4,1,13,02,04,103,,03,12,304,,12,01,051,10,16,14,237,25*79
$GPGSV,4,2,13,22,78,256,20,25,31,048,18,26,44,253,31,29,48,092,31*7D
$GPGSV,4,3,13,31,62,336,38,32,56,170,26,194,86,198,33,195,17,167,22*7E
$GPGSV,4,4,13,196,34,198,20*70
$GLGSV,2,1,08,70,42,205,15,71,53,289,24,72,16,331,,73,52,316,28*67
$GLGSV,2,2,08,74,19,273,,81,09,028,,82,24,074,25,83,17,120,20*6E

 

GPSデータが送出パケットのInformationフィールドに反映されない問題:

ソフトウエア構造を見る限り、送出フレームバッファはsend_unproto()が生成するフレームが唯一だと思う。

serial_input()でGPS_ENABLEの場合、gps_input()が呼ばれる。gps_input()は入力文字がLFの場合、GPSデータを送出フレームのInformationにセットするようsend_unproto()をコールする。これにより送出フレームができる。

しかし、この後にmain()でCallされるbeacon()によって送出フレームが上書きされる。

whileループが頭に戻り、send()がコールされるとパケットフレームがPWMで送出されるが、この時のパケットフレームはbeacon()にて生成されたもの。このフレームではInformationは事前設定されたbtextになる。

^^^この解釈は間違い^^^

gps_send()のsend_unproto()コールの後に必ずbeacon()のsend_unproto()がコールされるわけではない。これらの動作はそれぞれが設定されたインターバルで実行される。つまり、gps_send()は3分間隔、beacon()は1分間隔で独立して送出される。

beacon()はユーザー設定のインターバルでsend_unproto()がコールされる。

void beacon(void)
{
    if (!param.beacon) return;

    if (tnc_time() - beacon_time < param.beacon * 60 * 100) return; // convert minutes to 10 ms

    send_unproto(&tnc[BEACON_PORT], param.btext, strlen(param.btext));
    beacon_time = tnc_time();
}

gps_send()はコード内に設定されたGPS_INTERVAL (3 x 60 x 100 = 3min)でsend_unproto()がコールされる。

static void gps_send(uint8_t *buf, int len)
{
    static uint32_t gps_timer = 0;

    if (tnc_time() - gps_timer < GPS_INTERVAL) return;

    if ((param.gps == GPGGA && !strncmp("$GPGAA", buf, 6))
    || (param.gps == GPGLL && !strncmp("$GPGLL", buf, 6))
    || (param.gps == GPRMC && !strncmp("$GPRMC", buf, 6))) {

       send_unproto(&tnc[GPS_PORT], buf, len);
       gps_timer = tnc_time();
    }
}

問題は上記赤字部分。今回接続しているGPSはこのヘッダー文字列のデータ出力がないのが原因。。。。。

$GNGGA, $GNGLL, $GNRMCを追加した。結果、GPSデータが送出されるようになった。

JA0WBT>JA0WBT-1:<03><f0>make my day
JA0WBT>JA0WBT-1:<03><f0>$GNGGA,141400.00,3540.78609,N,13738.11321,E,1,12,0.90,522.8,M,36.5,M,,*49<0d><0a>
JA0WBT>JA0WBT-1:<03><f0>make my day
JA0WBT>JA0WBT-1:<03><f0>make my day
JA0WBT>JA0WBT-1:<03><f0>make my day
JA0WBT>JA0WBT-1:<03><f0>$GNGGA,141700.00,3540.78648,N,13738.11733,E,1,12,0.84,528.2,M,36.5,M,,*4D<0d><0a>
JA0WBT>JA0WBT-1:<03><f0>make my day
JA0WBT>JA0WBT-1:<03><f0>make my day

 

cmakeが出来ない件:

pico_sdk_import.cmakeに要修正箇所あり。以下赤字部分を削除。

LINE6 if ( DEFINED ENV{PICO_SDK_PATH} AND (NOT PICO_SDK_PATH))

この赤字部分が何処で定義されてるべきか不明。とりあえず、ここの部分を外さないとSDKのパスが設定できない。

なお環境変数は以下で設定している
 PICO_SDK_PATH=../../pico-sdk  

 

バグ情報:

バグを発見(赤字部分)。

void serial_init(void)
{
    queue_init(&uart_queue, sizeof(uint8_t), UART_QUEUE_LEN);
    assert(uart_queue != NULL);

    uint baud = uart_init(uart0, UART_BAUDRATE);

    //printf("UART0 baud rate = %u\n", baud);

    uart_set_fifo_enabled(uart0, true);

    gpio_set_function(0, GPIO_FUNC_UART);
    gpio_set_function(1, GPIO_FUNC_UART);

#ifdef GPS_ENABLE
    // GPS
baud = uart_init(uart1, GPS_BAUDRATE);

//printf("UART1 baud rate = %u\n", baud);

    uart_set_fifo_enabled(uart0, true);
    gpio_set_function(4, GPIO_FUNC_UART);
    gpio_set_function(5, GPIO_FUNC_UART);
#endif
}

しかしSDK Documentを見る限り、DefaultはEnableなので、バグは動作に影響しないようにも思える。
Uart_set_fifo_enabled

 

Buildエラーについて:

flash.cにて参照エラーが出てbuildができなかったがsdkを再インストールしてbuildが出来るようになった。

ただし、以下を修正した。

flash.c

修正前 Line8  //#inlcude "hardware/sync.h"   

修正後 Line8  #inlude "hardware/sync.h"

なぜこのinclude行がコメントアウトされていたかは不明。これがコメントアウトされると save_and_disable_interruptsとrestore_interruptsが外部参照エラーになる。

pico_tnc.uf2は/home/pi/pico/pico_tnc/build/pico_tncに作られていた。

 

GGAフォーマットについて:GT-902P

Ggaformat

2022年11月23日 (水)

ThonnyでPicoのVersion upで SSL: CERTIFICATE_VERIFY_FAILED, certificate has expired にハマった件

ThonnyでRaspberry Pi Picoのversionを最新(1.19.1)にバージョンアップしようとしたら、SSL: CERTIFICATE_VERIFY_FAILED, certificate has expired と言われてエラーになった。この対策の備忘録。

現象から。Certification has expiredと言われる。
Thonnycertificationfailed

どこに有効期限が切れたCertificationがあるんだか分からないので、とりあえずThonnyを最新に更新してみた。更新前。
Thonnycurrentversion

ThonnyはここからWindows版をダウンロード。更新後。
Thonnynewversion

しかし現象は変わらず。
Thonnycertificationfailedonnewversion

この症状についてネット検索した結果、この問題のDiscussion Threadにたどり着いた。で、次の書き込みに注目!
I finally got it solved by installing https://letsencrypt.org/certs/lets-encrypt-r3.der 

この中の対応策にならって、このセキュリティ証明書をインポートした。以下、そのステップ記録。

「開く」をクリック。
Encryptr31

「証明書のインストール」をクリック。
Encryptr32

Thonnyを「すべてのユーザー」でインストールしたので、証明書もローカルコンピューターにインポート。
Encryptr33

「自動的に証明書ストアを選択する」を選択。
Encryptr34

「完了」をクリック。
Encryptr35

Encryptr36

これで証明書のインポートは完了。

さてさて、これでうまくいくのだろうかと。。。
Thonnypicoupdatesuccess

うまくいった。Certificationが更新されたということなんだろうけれど、インポートした証明書が一体なんだったのかはよく分からない。

でも、動くようになったので、めでたし、めでたし。

 

2022年11月22日 (火)

UI-VIEW32が表示するシンボルを更新する

UI-VIEW32のインストーラーに入っているSymbolsは古いようなので、これを新しいSymbolsに更新した。

Update ARPS Symbol SetsからAPRSシンボルをダウンロードする。

ダウンロードするシンボルZIPは以下:

Download --> UIview-MySymbols-RevH.zip  <-- Download

このZIPを展開すると以下のファイルが含まれている。

  • mysymb.bmp
  • mysymb2.BMP
  • mysymb.txt

既存のUI-VIEW32のシンボルファイルはUI-View32ディレクトリーの直下にある。

  • symbols.bmp
  • symbols2.BMP
  • symbols.txt

これらのファイルはリネームするか別フォルダーに退避しておく。

ZIPで展開したファイルを上記にリネームして、既存ファイルを置き換えるわけだ。

UI-VIEW32を再起動すれば新しいシンボルが表示されるようになる。

ちなみに古いシンボル表示はこれ:
Map2

新しいシンボル表示はこれ:
Newsymbol
青いシンボルが黒くなった。

より以前の記事一覧

フォト
無料ブログはココログ
2023年1月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31