HT008 23.5-6000MHz Signal Generator (MAX2871)モジュール

2025/04/08

 久々の投稿です。

HT008 23.5-6000MHz Signal Generator (MAX2871)というモジュールを見つけました。

HT008は、出力周波数範囲が広く、出力レベルを可変でき、0.96インチサイズの160x80ドットのTFT COLOR LCDとキーパッドが搭載されています。価格もまずまずの優れものです。しかしながら、ユーザインタフェースは、CUIで操作性があまり良くありませんでした。

そこで、GUI化と今後の活用範囲の自由度を上げられるようにファームウェアを自作することにしました。下記は、新ファームウェアを搭載後の画像です




















以前は、開発元でドキュメント、ファームウェアがダウンロードできていたみたいですが、現在は、アクセスできないようです。


まず、このHT008の回路図を起こしました。


次にモジュールの主要部品MCU(GD32F303CBT6)、RF Synthesizer(MAX2871)、6-Bit Attenuator(HMC624A)、TFT COLOR LCD(ST7735S)のデータシートを確認しました。開発ツールGD32EmbeddedBuilderをダウンロードし、利用可能なライブラリ等を活用して、オリジナルより使いやすいファームウェアを作成しました。

実行バイナリHT008.binの書き込みには、「GD32 All In One Programmer」を使用します。まず、GD32F303上のBootloaderに「Connect」させるため、「DTR low level reset, RTS low level into BL」を選択します。

新しいファームウェアに書き換えるには、書き込み済のファームウェアのプロテクトを外すため、「Remove Protection」を選択しすると、オリジナルのファームウェアが消去されます。次に、新しいファームウェアを書き込みます。書き換えたら、115,200bpsで、CRLF改行コードのターミナル(TeraTerm等)を接続後、中央のキーを押すと下記の画面とヘルプメッセージがターミナルに表示されます。ヘルプメッセージを参考に操作してください。









HT008のCH1出力レベル設定値は方形波での値になります。方形波の基本波成分は、レジスタの設定値は、CH1では、約-3dB、CH2では、約-6dBレベルが下がります。また、出力波形はサイン波ではなく方形波ですので、高調波を含んでいるため用途にも注意ください。



CH1 Output Level

Buffer mode: Single-ended output + 50ohm

Register setting (dBm)

Nominal fundamental component (dBm)

Measured fundamental component (dBm)

5

2.0

1.4

2

-1.0

-1.9

-1

-4.0

-4.4

-4

-7.0

-7.4

 

CH2 Output Level

Buffer mode: Single-ended output + 50ohm

Register setting (dBm)

Nominal fundamental component (dBm, /w 0dB Attenuator)

Measured fundamental component (dBm, /w 0dB Attenuator)

5

-1.0

-0.6

2

-4.0

-3.5

-1

-7.0

-6.4

-4

-10.0

-9.5

 

Buffer mode: Single-ended output + 50ohm

Register setting (dBm)

Nominal fundamental component (dBm, /w -31.5dB Attenuator)

Measured fundamental component (dBm, /w -31.5dB Attenuator)

5

-32.5

-31.4

2

-35.5

-34.0

-1

-38.5

-37.0

-4

-41.5

-39.7


ソースコード及びプロジェクトファイル一式を公開しますので、各々のライセンス条件に従い、利用をお願いします。必要に応じ改良等にチャレンジしてください。


Panasonic HHC ~ カセットインターフェース

2023/06/21

 RL-P1004Aプリンタには、カセットインターフェース機能があります。

カセットテープレコーダを接続し、録音・再生することで、HHC内のファイルを保存・読込ができます。

ただ現状では、アナログ・カセットレコーダは、動作するものも少なくなりました。何より、操作性が悪く、内容の編集もできない問題があります。


そこで、USB経由でPCに接続し、デジタル保存できるようにしてみました。デジタル保存によって、テキストファイルは、PCで編集後、HHCに戻すことも可能になります。


RL-P1004Aプリンタのアナログ入出力を解析すると、下記のような仕様のようです。
・'SAVE OUT'出力は、5mVpp
・'LOAD IN'入力は、1.0Vpp
・変調方式は、約1,500bpsのFM方式で、'0' -> 1.5KHz信号の半サイクル, '1' -> 3.0KHzの1サイクル



最適なMCUモジュールを選ぶために、要件を整理すると、
・コンパクトなハードウェア
・USB接続できるMCUモジュール
・MCUモジュール内のデータ保存スペース
・アナログ入出力が可能


上記から、RP2040-Zeroモジュールを選定しました。プログラミングにはmicropythonを選択しました。アナログ入力にはADCが使えますが、'SAVE OUT'出力が小さすぎますので、OP-ampを追加して、300倍のゲインを稼ぎました。アナログ出力については、micropythonはインタープリタであり、不定期のガーベージコレクションが発生するため、正確なタイミングのデジタル出力には不向きです。このため、RP2040のPIOASM機能で、正確なFMエンコードが実現しました。アナログ出力は、3.3Vppをトリマ抵抗器で、1.0Vpp程度に調整(ほぼ中点)しています。


下記が、カセットインターフェースの回路図です。



OP-ampは、電源3.3Vで十分なゲインと優れた周波数特性のNJU77701Fを選定しました。パッケージがSOT-23-5と米粒サイズですので、必要に応じ、DIP化変換基板の使用をお勧めします。


下記は、試作用基板にアナログ回路を実装し、RP2040-Zeroと接続した写真です。


次は、小型のプラスッチックケースに入れ、RL-P1004Aに接続した状態です、



実行例として、まず、PC上のThonnyツールを利用して、main.pyを実行し、'r'コマンドを選択します。次に、Panasonic HHCのメインメニューから'PRINTER/CASSETTE'を選択後、'1=SAVE FILE'、'1=ALL FILES'と進み、RL-P1004Aの'SAVE OUT'からアナログ信号を出力させます。しばらく待つと、'data'サブフォルダーにファイルが保存されることを確認できます。PC間の転送は、Thonnyツールが便利です。



ここで、ファイル形式が0x08(テキスト形式)の場合、拡張子'txt'が作成されますので、内容確認・修正できます。新規作成されたテキストファイルをHHCに転送することも可能です。


HHCに転送する場合は、テキストファイルファイル形式の場合は、拡張子'txt'その他の形式では、拡張子'bin'を指定することで、転送ファイルを指定できます。'*.txt'とすれば、ワイルドカード指定も可能です。


これで、HHC上でのプログラミングが容易になります。

micropythonで作成したカセットインターフェースツールを公開します。PIOASMの使い方など参考にしてもらえれば幸いです。また、レトロな他のPCにも応用できるかもしれません。


下記は、PIOASM部分の抜粋です。コメント部が、設計上のクロックタイミングになります。今回は50KHzの比較的遅いクロックで駆動していますが、最高125MHzまで動作させることができますので、独自のアプリケーションに柔軟に対抗させることができます。ただ、最高32命令しか使えない点が制約になります。興味がある方は、RP2040のデータシートを確認ください。

@asm_pio(out_init=PIO.OUT_LOW, autopull=False)

def fm_encoder(): # output stream to RL-P1004A cassette interface

    # outset -  DATA

    # HIGH freq -> 320uS(16 clock) + 320uS(16 clock)

    # LOW  freq -> 640uS(32 clock)

    # 1 clock = 20uS

    label("loop")

    pull(block)                      # clock#4

    set(x, 31)                       # clock#5

    jmp("start_bit")                 # clock#6

    

    label("next_bit")

    nop().delay(3)                   # clock#3

    

    label("start_bit")

    out(y, 1)                        # clock#7

    jmp(not_y,"bit0")                # clock#8


    label("bit1")

    nop().delay(5)                   # clock#9

    in_(pins, 1)                     # clock#15

    mov(pins, invert(isr)).delay(14) # clock#16 <- flip output

    in_(pins, 1)                     # clock#31

    mov(pins, invert(isr))           # clock#32 <- flip output

    jmp("check_loop")                # clock#1

    

    label("bit0")

    nop().delay(21)                  # clock#9

    in_(pins, 1)                     # clock#31

    mov(pins, invert(isr))           # clock#32 <- flip output

    nop()                            # clock#1

    

    label("check_loop")

    jmp(x_dec,"next_bit")            # clock#2

    jmp("loop")



Panasonic HHC ~ 内蔵RAMの8KB拡張

2023/06/20

 Panasonic HHC RL-H1400のRAM容量は、4KBと決して多くはありませんので、別途発売されていた、RL-H1800と同様に8KBに拡張してみることにしました。


そのために、プログラムスロットの隣のIC7のSRAMを取り外し、8KBRAMを搭載したRAM拡張基板を取り付けるようにしました。(SRAMの取り外しには、十分なスキルが必要になります。他の基板で練習した後に行うことをお勧めします。実施には自己責任でお願いします。)

IC7(HM6116LP)のSRAMを取り外しは、ハンダ吸取線でSRAMのスルーホールからハンダを吸取ります。吸い出せたら、まだピンがスルーホールの端にわずかなハンダで接合しているはずですので、ハンダコテの先で、SRAMのピンの先端を熱して左右に動かし、スルーホール中でSRAMのピンが自由に動くようします。

全てのピンがピンセットでSRAMのピンがゆらゆら動くまでに根気よく行います。うまくハンダを吸い出せないない場合は、再度スルーホールにハンダを流し込んで再トライします。部品面側、IC7(HM6116LP)と基板の隙間にマイナスのドライバーを入れ、スルーホールにダメージを与えないように少しづつ弱い力でドライバーをひねると、SRAMのピンに着いたわずかなハンダがはがれて、IC7のSRAMが外れます。

スルーホールにダメージがないことをルーペで確認し、平ばね型のICソケットをハンダ付けします。直接RAM拡張基板をハンダ付けをすることも可能ですが、4KBに戻すことも可能なようにしました。平ばね型のICソケットにしたのは、RAM拡張基板をソケットに刺しても比較的低い高さに保てるからです。


下記のRAM拡張基板回路を見てもらえればわかると思いますが、最低限の改造でRAM容量を8KBにできましたが、RAM拡張基板にIC6(74LS155)の4pin, 5pinに必要なプルアップ抵抗10Kを入れるのを忘れましたので、手作業になりますが、基板上に1/8W小型抵抗を追加してください。


以下は、組立中の専用RAM基板です。














基板のリード部分には、秋月電子通商の「基板用リードフレーム SS2.54-6SN」または、element14の"1544425-2 Lead Frame, Single-In-Line (SIL) Contact"が利用できます。1544425-2の場合には加工が必要ですので、下記図面の各ピン赤線部分を精密ニッパーなどで横一直線になるように切断してください。切断後、曲がったリード部分を真っすぐに伸ばせば、基板のスルーホールにはんだ付けできるようになるはずです。



以下は、IC6の4pin, 5pinから信号を取り出している部分です。

同じようにのこの基板を製作したい方(個人利用のみ、商用利用は禁止)は、
回路図・外形・ガーバーファイルを自己責任にて使用してください。

基板の発注先は、JLCPCBがお勧めです。下記は、切り外し前の基板外観です。