31-Jul-2020
[今更ですが]

スイッチサイエンスで売られていた、日本語フォントROM GT20L16J1Y Breakoutをwemos TTGO XIっぽい物で読み出してみます。フォントROMの伝票の日付が2014年2月4日と書かれていたので、購入してから6年間放っておいたことになりますが…なにしろ3.3VのI/Oを喋る機材の持ち合わせが無かったというのが理由です(そういう意味ではwemos TTGO XIっぽいものは助かる)。

吸い出しのためのスケッチは日本語フォントROM GT20L16J1Y の使い方を参考に、こんな感じ。イマドキのArduinoはSPI.beginTransaction()で色々設定するはずなのですがこれだとうまく動かなかったのでSPI.begin()を使っています。CPUクロックはとりあえず32MHz、CS線のレベル変更後にNOPを入れていますがこれもとりあえずです(データシートではLowにした後は5ns、Highにした後は100ns待つと書かれていたのでこれだと本当はダメなんですけどね)。ROMのサイズは分からないのでとりあえず4MByte分…終わるまでに2時間程度はかかるので覚悟してください。とりあえずを連発していますがとりあえず読み出せればおっけーということで。

結線はこんな感じ。ブレッドボードのおかげで本当に楽ですね。

timg_20200731_052906_9.jpg

写真だと全然分からないのですが、GT20L16JYの、pin1(SCLK)→D13(SCK), pin2(GND)→GND, pin3(CS#)→D10, pin4(VCC)→3V3, pin5(SO)→D12(DI/MISO), pin6(SI)→D11(DO/MOSI)を繋いでいます。

スケッチを書き込んだ後、TeraTermでログを取ってざっと見た感じでは512kByteのサイズがあるようです。バイナリ化とグリフの確認は、後日。54.95kg(06:45)

25-Jul-2020
[DM-1801を分解]

特殊ドライバーで4箇所のネジを外し、アンテナ及びボリュームを留めているリングを何か適当な工具で外し、他は普通の+ドライバーでイケるのですがトリマーか半固定抵抗かがすごく紛らわしい箇所にあるのでうっかり回さないよう注意が必要です。メイン基板の取り外しは簡単で、MD-380やRT80のように、メイン基板にはんだごてを当ててアンテナ端子を外さないと基板を取り外せないといった罠はありません。

基板の裏側(?)はMK22FN512(Kinetis M22, Cortex-M4)とLM2904B, TDA2622Mが載っています。

tp7254143.jpg tp7254144.jpg tp7254145.jpg

でも気になるのはこっち側ですよね。

tp7254148.jpg

HR_C6000, AT1846Sはお約束として、25Q16CT(16Mbit SPI flash)が載っていて、あとはH3…ん?

tp7254149.jpg tp7254150.jpg tp7254151.jpg tp7254152.jpg

見づらいのでこの部分は拡大。

tp7254154.jpg tp7254155.jpg

Radioddity GD-77とBaofeng DM-1801は似ているという話が動画でもあり、Radioddity GD-77 modifications / modsと同じAT1846S→2SC3356→2SK3078→AFT05MS004N(UHF)/RQA0009SXAQS(VHF)という構成かなーと踏んでいたのですがここは違いますね。AT1846S→2SC3356(R25)→HE3078(H3)→HTL7G06S006P(H0606E)です。VHF/UHFそれぞれに系統が分かれていても、同じ石が使われています。

受信部分もGD-77はBFP181を使っているようですが、DM-1801は4151と書かれた別の何か(現時点では不明)に変わっています。

写真を撮り忘れましたが電池(DM-8)の規格は7.4V 2200mAhでした。重量はアンテナを外した状態でRT80(203g)よりちょっと重い、240gありますが…MD-380より軽いので問題無しです。

Twitterでも色々と呟いていたりはしますが、どうするとGD-77と同じようなものを安く作れるかというのをBaofengはかなり研究している気がします。回路構成は似ているけどRenesas/NXPではなく自国製(中国製)の似たような性能を持つ部品に置き換えていますし、ケースのバリは多くアルミダイキャストのネジ穴の加工精度はちょっと低い気がします(基板を組み付けると分かります)が確かにGD-77よりも安いです。そういえばGD-77で保証認定が通った事例はあったはずですが、DM-1801で同様に通るかどうかは…スプリアス測定の結果次第ということになるでしょうか(通ってほしいですけどね)。

それにしても、これだけの機械が安価に出されてしまうと、果たして日本のアマチュア無線機業界は大丈夫なのかと心配になってきます。性能が良いものをそれに見合う高価なお値段で、は分かるのですが…そこばかり追いすぎてしまい、裾野を見てこなかったツケがここになってやってきたりしていませんかね。これについては色々思うことがあるのですが、後日気が向いたときに書くかも。

あとはAilunce HD1が残っています。元々HD1が使いたい→JARD測定器室で測定が必要だ→それなら他にも色々持っていこうという理由で色々揃えてしまいましたが、本命の品だけ未だに届かないという。どうしろと。55.70kg(17:45)

22-Jul-2020
[Arduinoと収録されるavr-gccのバージョン]

調べる必要があったのでLinux 32bit版で調べてみた。


arduino-1.0.1/hardware/tools/avr/bin/avr-gcc-4.3.2
arduino-1.0.2/hardware/tools/avr/bin/avr-gcc-4.3.2
arduino-1.0.3/hardware/tools/avr/bin/avr-gcc-4.3.2
arduino-1.0.4/hardware/tools/avr/bin/avr-gcc-4.3.2
arduino-1.0.5/hardware/tools/avr/bin/avr-gcc-4.3.2
arduino-1.0.6/hardware/tools/avr/bin/avr-gcc-4.3.2

arduino-1.5/hardware/tools/avr/bin/avr-gcc-4.3.2
arduino-1.5.1/hardware/tools/avr/bin/avr-gcc-4.3.2
arduino-1.5.2/hardware/tools/avr/bin/avr-gcc-4.3.2
arduino-1.5.3/hardware/tools/avr/bin/avr-gcc-4.3.2
arduino-1.5.4/hardware/tools/avr/bin/avr-gcc-4.3.2
arduino-1.5.5/hardware/tools/avr/bin/avr-gcc-4.3.2
arduino-1.5.6/hardware/tools/avr/bin/avr-gcc-4.3.2
arduino-1.5.7/hardware/tools/avr/bin/avr-gcc-4.8.1
arduino-1.5.8/hardware/tools/avr/bin/avr-gcc-4.8.1

arduino-1.6.0/hardware/tools/avr/bin/avr-gcc-4.8.1
arduino-1.6.1/hardware/tools/avr/bin/avr-gcc-4.8.1
arduino-1.6.3/hardware/tools/avr/bin/avr-gcc-4.8.1
arduino-1.6.4/hardware/tools/avr/bin/avr-gcc-4.8.1
arduino-1.6.5/hardware/tools/avr/bin/avr-gcc-4.8.1
arduino-1.6.6/hardware/tools/avr/bin/avr-gcc-4.8.1
arduino-1.6.7/hardware/tools/avr/bin/avr-gcc-4.8.1
arduino-1.6.8/hardware/tools/avr/bin/avr-gcc-4.8.1
arduino-1.6.9/hardware/tools/avr/bin/avr-gcc-4.8.1
arduino-1.6.10/hardware/tools/avr/bin/avr-gcc-4.9.2
arduino-1.6.11/hardware/tools/avr/bin/avr-gcc-4.9.2
arduino-1.6.12/hardware/tools/avr/bin/avr-gcc-4.9.2
arduino-1.6.13/hardware/tools/avr/bin/avr-gcc-4.9.2

arduino-1.8.0/hardware/tools/avr/bin/avr-gcc-4.9.2
arduino-1.8.1/hardware/tools/avr/bin/avr-gcc-4.9.2
arduino-1.8.2/hardware/tools/avr/bin/avr-gcc-4.9.2
arduino-1.8.3/hardware/tools/avr/bin/avr-gcc-4.9.2
arduino-1.8.4/hardware/tools/avr/bin/avr-gcc-4.9.2
arduino-1.8.5/hardware/tools/avr/bin/avr-gcc-4.9.2
arduino-1.8.6/hardware/tools/avr/bin/avr-gcc-5.4.0
arduino-1.8.7/hardware/tools/avr/bin/avr-gcc-5.4.0
arduino-1.8.8/hardware/tools/avr/bin/avr-gcc-5.4.0
arduino-1.8.9/hardware/tools/avr/bin/avr-gcc-5.4.0
arduino-1.8.10/hardware/tools/avr/bin/avr-gcc-7.3.0
arduino-1.8.11/hardware/tools/avr/bin/avr-gcc-7.3.0
arduino-1.8.12/hardware/tools/avr/bin/avr-gcc-7.3.0
arduino-1.8.13/hardware/tools/avr/bin/avr-gcc-7.3.0

arduino-1.0, arduino-1.6.2にはavr-gccが同梱されていません。Release Notesがアテになればこんなの作る必要無いんだけどね…55.85kg(20:55)

19-Jul-2020
[できた]

ソフトウェアがある程度動くようになってきたので、こんな風にブレッドボードでwemos TTGO XIっぽい物とPM1280をつないでみました。

tp7194139.jpg tp7194140.jpg

この写真では正しく動く状態で撮っているのですが、最初組んだ際はSCK〜GNDの6本をずらして接続してしまい、VCC/GNDの逆接続でPM1280を壊していもおかしくない状態でした。この状態ではダミーロードを接続できないため、RadioLibのサンプルにあるSX127x_Receiveを動作させ、問題ないことを確認してからこんな風に仕上げました。

tp7194141.jpg tp7194142.jpg

ヤフオクで売っていた10cm×10cmのユニバーサル基板に組んでみましたが、もう少し小さい物でも大丈夫かもしれません。ちなみにハンダ付けの腕はあまり上手ではない部類なので、錫メッキ線を引き回す工作は苦手です。これを組むのにも結構な時間がかかっており、この場を借りて娘と息子にはお礼を申し上げておきます。

動作もばっちり。

t20200719.png

なお、Dragino LoRa Shield+RadioLibの構成と同様に使えるよう、DIO1→D6の結線を行っています。DIO2, DIO5に付いては未接続なので、これは必要が生じたらその時に考えることにします(思いっきり忘れてた、どうしよう…)。55.75kg(21:00)

18-Jul-2020
[LGT8F328Pを載せたArduino Nanoもどきを動かしてみる(2)]

Arduino IDE追加するLGT8F328P対応パッケージに、https://github.com/dbuezas/lgt8fxにある物の方が良さそうなのでこちらへ移ります(この記事ではlgt8fxと記述します)。その前に、15-Jul-2020にインストールしたパッケージを削除します。Arduino IDEがarduino-1.8.13/にインストールしてある場合の手順はこんな感じですかね。

Arduino IDEにLGT8F328P以外の対応ライブラリをインストールしている場合は、削除するファイルに注意してください。

lgt8fxのインストールはGitHubに書いてあるとおりになるのですが、環境設定→追加のボードマネージャのURLにhttps://raw.githubusercontent.com/dbuezas/lgt8fx/master/package_lgt8fx_index.jsonを設定し、ボードマネージャからlgt8fxを検索してインストール。

ボードの選択方法は、まずボード→Logic Green Arduino AVR Compatible Boards→LGT8F328を選択し、その後Clock Source(基板に水晶らしき部品が付いていなければInternalのままで良い)、Clock(必要に応じて変更)、Variant(今回は328P-LQFP32 wemos-TTGO-XI)を設定します。

クロックの違いは実感しづらいのですが、Clockを切り替えてArduino_prime_number_benchmarkを実行すると分かりやすいと思います。用途に応じ、たとえばBlinkのような単純な処理なら1MHzまで落とせるのが良いですね。56.30kg(20:35)

15-Jul-2020
[LGT8F328Pを載せたArduino Nanoもどきを動かしてみる]

PM1280が3.3V I/Oを必要とするため、Blue PillをArduino化するのは06-Jul-2020で行ったことですが、こんな感じのLGT8F328Pを載せたArduino Nanoっぽいやつ(やたらと安い)が届いたのでこれにスケッチが書き込めるかどうか試してみます。基板を見るに、これも3.3V I/Oに対応できるようです。

tp7154137.jpg tp7154138.jpg

本家Arduino Nanoに載っているATmega328Pと互換性があるらしいのですが、専用のパッケージをArduino IDEにインストールする必要があります。詳細はなにこれどう怪しいの? LGT8F328PはATMEGA328のクローンではなかったhttps://github.com/Edragon/LGThttps://github.com/RalphBacon/LGT8F328P-Arduino-Clone-Chip-ATMega328P等を参照しそこに書かれた手順通りにやれば何とかなるはずだと思う多分ということで、やってみましょう。

  1. https://github.com/Edragon/LGT/tree/master/1-LGT8F328/SDK/Arduino/HSPにある、インストール手順(これを書いている時点ではInstall-Larduino_HSP_v3.6c (1).txtとなっている)を熟読する
  2. バイナリパッケージ(これを書いている時点ではLarduino_HSP_v3.6c.rarとなっている)をダウンロードし、適当なディレクトリに展開する
  3. 展開したディレクトリをLarduino_HSP_v3.6c/、Arduino IDE本体の置かれたディレクトリをarduino-1.8.13/とすると、cp -ri Larduino_HSP_v3.6c/{hardware,libraries,sketches} arduino-1.8.13/でコピー、ただしhardware/package_index_bundled.json以外を上書き(これはLarduino_HSP_v3.6cよりもarduino-1.8.13付属の方が新しいため)
  4. Arduino IDEを起動し、ツール→ボード→Arduino AVR Boards(二つあるうちのどちらか)→とりあえずLGT8F328P-LQFP32 MiniEVBを選択

ボードの選択ですが、Larduino w/ LGT8F88D-SSOP20を選ぶと書き込みができません。それ以外は何を選んでもよさそうですが、何を選んでもBlinkでLEDが点滅することはありません。これは#undef LED_BUILTINした後に#define LED_BUILTIN 12とでもしておけば解決します。

なお、RadioLibのサンプルスケッチであるSX127x_Receive, SX127x_Transmit共に、Blue Pill/Larduinoともにビルドが通りません。Blue Pill向けだとsection `.text' will not fit in region `rom'なるエラーが出ていますし、Larduino向けだとerror: 'class SoftwareSerial' has no member named 'stopListening'; did you mean 'isListening'?なるエラーになります。Blue Pill向けの方がより深刻そうなのですが、どうなのでしょうかね。

ここで止まっていても先へ進めませんので、他のライブラリ…arduino-LoRaでビルドできるか試してみます。Arduino IDEのライブラリマネージャでLoRaを検索すると大量のライブラリがヒットしますが、LoRa by Sandeep Mistryがこれに対応します。

これならサンプルのLoRaReceiver, LoRaSender共にBlue Pill/Larduino向けにビルドできるので、RadioLibでどうにもならなかった時の移行先として考えておきます。56.20kg(21:35)

18-Jul-2020補足:追記あり、詳細は18-Jul-2020参照。

12-Jul-2020
[Dragino Lora Shield(のコピー?)を動かしてみる]

PM1280に続きArduinoに載せられるLoRa Shieldが届いたので、早速Arduino UNO(のコピー、CH340Gが乗ってるやつ)に載せてみました。購入時にshieldの型番などの記載は無く、LoRa Shield程度の情報しかなかったためにどう使えば良いのか考え込みましたが、どうやらDraginoのLoRa Shieldのコピー品のようです(モジュールはHopeRF RFM98Wが載っています)。

tp7124130.jpg tp7124132.jpg

なので使い方自体はLora Shield - Wiki for Dragino Projectを見れば分かるのですが、RadioLibと組み合わせて使う場合は以下の設定が必要でした。

設定が終わったらArduino IDEを起動し、ファイル→スケッチ例→(カスタムライブラリのスケッチ例にある)RadioLib→Morse→Morse_Transmitを選択し、動作テストをします。以下の修正を行ってからArduinoに書き込みます。書き込み後にいきなり電波が出るので、ダミーロードの装備は忘れずに

t20200712-cw.png

指定した周波数よりちょっと低い感じですが、動いてはいるようですね。

LoRaのスケッチ例はRadioLib→SX127x→SX127x_Transmitになります。new Module()の設定を同様に変更し、lora.begin()はとりあえずlora.begin(435.0, 20.8)としておきます(JARDの測定器室でスプリアス測定を行う際、バンドの真ん中で送信することが求められるためこの設定にしています、設定の詳細はSX1278 Class Referenceを参照)。

t20200712-lora.png

モジュール(とRadioLibの)使い方は何となく分かってきたので、あとはスプリアス測定を行う際にどういう条件が求められるかを尋ねて、それに合わせたスケッチを用意しておけば良さそうです。

とはいえ、RFM98についてはこれで良いのですが、PM1280についても同じことができるよう準備する必要があります。E32-433T30Dについてはどうすれば良いんだろう…

実はDMR機を追加しようとしており、そちらのスプリアス測定を行うならLoRaもついでに挑んでみようということで元々LoRaはオマケという立ち位置だったのですが、未だにDMR機が届かないためこちらが主役になりつつあります。いつ届くんでしょうね、HD1とDM-1801…56.70kg(19:05)

09-Jul-2020
[E32-433T30Dを動かしてみる]

一応こんな感じ。ダミーロードを装備した(大事なことので太字で書きます)E32-433T30Dに、なんか適当に転がっていたアンテナを付けたワンセグUSBドングルを使ってSDRSharpで受信してみたんですが…ちょっとこのモジュールで局免取るのは難しいんじゃないかなというのが結論です。

tp7094129.jpg

設定可能な通信速度(Air speed)、300/1200/2400/4800/9600bps(19200bpsも設定可能ですが今回は調べていません)と、使用する周波数帯域幅をざっと見てみます。

300bps→125kHzくらい
t300.png
1200bps→250kHzくらい
t1200.png
2400bps→500kHzくらい
t2400.png
4800bps→250kHzくらい
t4800.png
9600bps→500kHzくらい
t9600.png

何故4800bpsよりも2400bpsの方が広い帯域になっているのかは謎ですが、それ以前にこれLoRa変調で喋ってるモジュールなんだろうか。Signal Identification Wiki見てもよく分からない…55.70kg(21:20)

12-Aug-2020補足:19200bpsでの状態も見てみました。

19200bps
t19200.png

500kHz…だと思うんですが、なんかそれよりも広く見えるのは気のせいでしょうか?

08-Jul-2020
[E32-433T30DをPCに繋げてみる]

その辺に転がってたCH340GなUSB-UARTアダプタを使って、こんな感じに繋げます。

tp7084128.jpg

VCCは3.3V、GNDはGND、UARTアダプタのTXDはE32-433T30DのRXDに、UARTアダプタのRXDはE32-433T30DのTXDに繋げます。E32-433T30D_UserManual_EN_v1.5.pdfによればM0, M1は未接続ではいけないようなのですが、weak-pull upされているそうなので今回はこのまま放っておきます。

eByteのDownloadページから、Tool→Setting Software→09-27 2017 RF Setting (RAR)をダウンロードします。ファイル名は「无线串口配置软件_v3.49.rar」で、アーカイブの中のRF_Setting_v3.49.exeを実行することでE32-433T30Dの設定が行えました。

t20200708.png

操作方法としては、こうなるでしょうか。

Channelと周波数の関係は410 + Channel(0〜31)[MHz]になるので、438MHzで使用する場合は28を設定することになります。ダミーロードを付けているとはいえ必要以上に電波を撒き散らしても困りますので(シールドも外していますし)、Powerは21dBm(125mW)としておきます。

あとは、M0, M1をGNDに落とし、UartRate(9600bps)/Parity(8N1)に従ってデータを流せば何か送信するでしょうから、ちょっと漏れているかもしれない電波をRTL-SDR(SDRSharp)で見られたらいいなーと呑気に考えています。56.30kg(19:55)

07-Jul-2020
[E32-433T30Dのシールドを剥がす]

tp7074122.jpg tp7074123.jpg tp7074124.jpg

tp7074125.jpg tp7074126.jpg tp7074127.jpg

UARTで来たデータをSTM8で受けてSX1278を制御し、WDのチップ…2SK3756で30dBm(1W)の出力を得てアンテナに回しているように見えます。S421のチップはHWS421というRFスイッチです。RF input powerの最大定格が+38dBmになっているので、2SK3756で増幅したものをHWS421に突っ込んでいるのかもしれません。56.20kg(21:20)

06-Jul-2020
[うーむ]

PM1280等に使われているSX1278、電源電圧が3.3V(I/Oも同じ電圧)なのでArduino UNOに直結しても大丈夫なのかという不安があります。多くのサンプルではI/Oは直結(流石に電源は3.3Vだが…)となっているので多分動くのだとは思いますが、壊しちゃったら嫌だなーと思いまして。

理由は分からないのですが何故か手元にSTM32を載せたBlue pillが転がっていますので、これをArduino化して繋げることを考えてみます。今回はその準備。

bluepillにArduino Bootloaderを書き込むSTM32F103 に関する記事の手順通りにやれば良さそうです、以上…ではあるのですが。

一般的な手順だと、

  1. ST-Linkを用意し、Blue pillと結線
  2. Blue pillのBOOT0ジャンパーを1, BOOT1ジャンパーを0とし、ST-LinkをPCに接続
  3. https://github.com/rogerclarkmelbourne/STM32duino-bootloader/tree/master/binariesにあるgeneric_boot20_pc13.binをダウンロード(pc13はLEDが繋がっているGPIOを示しているので他のボードなら適切なものを選ぶ)
  4. 念のためst-info --probeでデバイスが認識されていることを確認
  5. st-flash eraseでイレース(不要かも)
  6. st-flash write generic_boot20_pc13.bin 0x08000000で書き込み
  7. ST-Linkを取り外し、Blue pillのBOOT0/BOOT1ジャンパーを共に0とする

辺りでbootloaderを書き込み、

  1. /usr/local/bin/arduinoのリンク先を確認する、ここでは/home/pi/arduino-1.8.13/arduinoとする
  2. Arduino IDEのボードマネージャで、Arduino SAM Boards (32-bits ARM Coretex-M3) by Arduinoをインストールし、IDEを終了する
  3. cd /home/pi/arduino-1.8.3/arduino/hardware; git clone https://github.com/rogerclarkmelbourne/Arduino_STM32.git でArduino_STM32をインストール
  4. 再度Arduino IDEを起動し、ボードマネージャからSTM32F1 Boards (STM32duino.com)→適切なボードを選択(とりあえずGeneric STM32F103C seriesとした)
  5. CPU Speed(MHz)はデフォルトの72MHz
  6. Upload MethodはSTM32duino bootloader

という手順で書き込むことになるのでしょうが…VMware Player上のRaspberry Pi DesktopでArduino IDEを動かしているせいか、bootloaderだろうがST-Linkだろうがうまくいかないので、Arduino IDEでビルドして得られたバイナリをOpenBSD機からstlinkを使って書き込みます。

この方法で書き込む場合の注意事項としては、

ということが挙げられます。なお、手元のBlue pillだとcore IDが0x2ba01477となっているためst-flashでうまく書き込めないという問題があったのですが、CKS32: Unable to flash STM32F103C8T6 with stlink 1.5.1を参考にstlinkを修正して書き込みました。でも変ですね…チップにはSTM32と書かれているのに。

tp7064121.jpg

本物のSTM32が載っていないので、Generic STM32F103C seriesではなくGeneric STM32F103C6/fake STM32F103C8を選んだ方が良かったのかもしれません(どちらの設定でもBlink程度なら動きますが、よりメモリを消費するものについてはどうなるか分かりません)。55.85kg(21:00)

04-Jul-2020
[PM1280のピン配列]

とりあえずInnocellennt PM1280が届いたので、これを使ってArduino UNOのシールドっぽい物を作らないといけないかなーと考えていたのですが…ピン配列が分からない。

基板を見ながら図を起こしてはみたものの、LoRa et SX1278に詳細な情報が載っていたのでこちらを見た方が良さそうです。というか、やりたいことそのものが載ってるし…(自分はarduino-LoRaではなくRadioLibを使う予定ですが)

まだこれしか届いていないので何も進めることができていませんが、まだ慌てなくても大丈夫…だと…思う多分。57.40kg(20:50)