VN-L5 MarkII 人柱版 CW トランシーバーキット製作

JL1VNQ さん ( https://jl1vnq.blogspot.com/ ) が頒布されている CW トランシーバーキット VN-L5 が MarkII となりました。この MarkII キットの人柱版製作募集を Twitter でみかけたので、まだ頒布あるかと聞いた所最後の1台とのこと。お願いして頒布していただいた次第。

(写真や図はクリックすると大きくなります。スペアナ画面は元から小さいので除く)

思いの外大き目の箱で届きまして、過去製作したキットに比べて時間がかかりそうな予感でした。で、実際にもかかりました。また箱に貼られたラベルには 10W とありますが実際には 20W です。リチウム電池運用ならファイナルの電源電圧が低くなるので 10W 程度になると思います。

中身は、基板・パーツ一式・説明書です。説明書については部品表・回路図と組んだ時の写真だけで、旧版の説明書も合わせて読んで組むとの指示でした。人柱なのでそこら辺は問題ありません。

基板は3枚構成になっていて写真左上がコントロール(CTRL)基板。右上は送信(TX)基板。手前が受信(RX)基板になっています。裏面の写真は掲載していませんが、裏面にも実装する部分もあります。

結構時間はかかりましたが組みあがりました。組みあがったので保証認定を取るべく資料を作成します。今回は JARD に保証認定してもらうので、送信機系統図とスペクトラムアナライザの測定結果を添付します。

RIGOL スペアナの入力に 50dB のアッテネーターを接続して測ります。今回確認したのは次の3つです。

  • 送信出力
  • 近傍のスプリアス
  • 高調波

このキットの送信回路基板の LPF は 160mb 用と 80mb 用の2つだけなので、スペアナ測定は 1.8MHz と 3.5MHz の測定した結果を提出しました。

160mb 送信出力

スペアナの RBW/VBW を 10Hz SPAN 100Hz で見ました。結果 44.25dBm で 26.6W の出力となりました。160mb の工事設計は 25W で出すことにしました。

160mb 近傍

送信周波数近傍を確認します。Span 10kHz で測ります。RBW・VBW は 10Hz が良いのですが、RIGOL DSA815TG では測定時間がものすごく長くなるので、30Hz にして測定。これでも 12秒程度必要です。17dBm(50mW)以下かつ基本周波数の尖頭電力より 50dB 低い値をクリアしていました。

160mb 高調波

高調波は本来 9kHz から 1GHz の範囲を取らないといけないかもしれませんが、第5高調波あたりまで測りました。50dBm 以下なので問題ありませんでした。

80mb 出力

スペアナの RBW/VBW を 10Hz SPAN 100Hz で見ました。結果 43.23dBm で 21W の出力となりました。80mb の工事設計は 20W で出すことにしました。

80mb 近傍

送信周波数近傍を確認します。17dBm(50mW)以下かつ基本周波数の尖頭電力より 50dB 低い値をクリアしていました。

80mb 高調波

160mb 同様第5高調波あたりまで測りました。50dBm 以下なので問題ありませんでした。

送信機系統図作成

測定の結果申請いけそうなので資料作成をします。送信機系統図は、無線局免許状の記載で 1.8MHz帯、3.5MHz帯、3.8MHz帯の申請となります。なので、各周波数帯の送信周波数を記載。また新スプリアス規格で設計・製作している旨の記載は必要です。

キットの回路構成はファイナル送信出力の LPF が 160mb と 80mb の切り替えになっているので LPF が2つあること、送信出力も 160mb と 80mb でそれぞれ何ワット出るかを図に記載しておきます。

電子申請Lite 入力

電子申請 Lite の工事設計は以下のように入力

  • 変更の種別:増設
  • 適合表示無線設備の番号:空欄
  • 発射可能な電波の型式及び周波数の範囲情報
    希望する周波数帯
    1.9MHz A1A
    3.5MHz A1A
    3.8MHz A1A
  • 変調方式:空欄
  • 終段管
    名称個数:MTA100N10KRI3 x 2
    電圧:13.8V
  • 定格出力: 25W と 20W
  • 添付資料は測定資料と送信機系統図。保証認定のPDF

工事設計入力画面で、変調方式など入れないと入力完了のチェックで未入力欄がありますが続けますか?のような確認ダイアログが出ます。問題ないので続行でOKです。

申請状況

・JARD 保証認定 2022/11/06申請 2022/11/10 保証完了
・JARD から認定シール(普通郵便)待ち 2022年11月24日完了
届かなくて再送してもらったため、シール入手に日数がかかりました。
・近畿総通宛の変更申請 2022/11/10申請 2022/11/14 審査終了

ということで、無線局免許状に新しい無線機の追加が完了しました。

Raspberry Pi Pico I/O 拡張基板

普段使用するマイコンは、Arduino UNO(ATMEGA328P) か Arduino MEGA2560( ATMEGA2560) を良く使っています。最近はマイコンに接続するモジュールも 3.3V のが多いので、Raspberry Pi Pico を使えるようにとお勉強始めたところです。

ESP32 も持っているのですが、ESP32-S(XTensa LX7) ESP32-C(RISC-V) の新製品が技適取って十分出回っていればこちらに行ったかもです。ESP32 の WROVER-E が技適あるので、これでもいいのですが。無線モジュール要らないなら今のところ Raspberry Pi Pico で十分かな。というところで、Pico を使い始めた次第です。

ちょこっと動かすだけなら、Raspberry Pi Pico に秋月の細ピンヘッダつければブレッドボードに差しても左右2列取れますので十分です。

最初はブレッドボードで始めたのですが、やっぱごちゃるなぁということで基板を作成。2×20 ピンヘッダに IO ピンを出しているので、ロジックアナライザの線を刺すこともできますし、SPI や I2C でバス共有するの予備端子としても使えます。

今は、こんな感じで使用しています。基板手前の Raspberry Pi Pico のソケットは Pico Probe デバッグのソケットです。現在 Micropython 勉強中なので openocd + gdb-multiarch は使用していないため手前の Pico Probe は外しています。

基板を10枚作ったので余りは頒布にのせました(売り切り終了)

Raspberry Pi Pico I/O 拡張基板(キット) | 頒布物のページ (em9system.com)

https://github.com/ngc6589/Raspberry-Pi-Pico_IO_Expansion-1

PZEM-004T v3.0 で商用電源の電圧と周波数をロギング

最初に、参考にしたサイトを掲載しておきます。

PZEM-004T v3.0 はアマゾンや Aliexpress で検索するとたくさん出てきます。今回はアマゾンで買いました。1週間ほどで到着です。何も気にせず買ったので、USBシリアルなしを買ってしまったようです。USBケーブル付きがあればそれを買うほうが楽です。

仕方がないので、ポケコンのファイル転送で使っていた FTDI の USB シリアルケーブルに犠牲になってもらうことにしました。使用する線は 5V, GND, TX, RX の4本です。USBシリアルを使うのは Raspberry Pi の USB ポートで使用するためです。マイコン基板と接続する場合は、マイコンの 5V, GND, TX, RX を直結するだけです。

USBシリアルの TX RX と基板の TX RX はクロスで結線しましょう。これ間違えると通信できません。

プラケースの蓋を外して、XH コネクタのポストを外して

USB シリアルの線を半田付け。スクリューターミナルNとLの所にコンセントからの電線を差し込んでネジ止めします。ハードの準備は以上です。

Raspberry Pi 側のプログラムは python で動かします。PZEM-004T v3.0 からデータを取得して、ambient にデータ送信するようにしています。

#!/usr/bin/env python3

import datetime
import time
import serial
import ambient
import requests
import modbus_tk.defines as cst
from modbus_tk import modbus_rtu

# sudo pip3 install git+https://github.com/AmbientDataInc/ambient-python-lib.git
# sudo pip3 install modbus-tk

if __name__ == "__main__":
    # Connect to the slave
    serial = serial.Serial(
                           port='/dev/ttyUSB0',
                           baudrate=9600,
                           bytesize=8,
                           parity='N',
                           stopbits=1,
                           xonxoff=0
                          )

    master = modbus_rtu.RtuMaster(serial)
    master.set_timeout(2.0)
    master.set_verbose(True)
    am = ambient.Ambient(チャネル番号, ' ライトキー ')

    while True:
        try:
            data = master.execute(1, cst.READ_INPUT_REGISTERS, 0, 10)
            result = am.send({'d1': data[0] / 10.0, 'd2': data[7] / 10.0})
            print(datetime.datetime.now(),
                    'voltage=',
                    data[0] / 10.0,
                    'freq=',
                    data[7] / 10.0,
                    'send status=',
                    result.status_code)
            time.sleep(60)

        except KeyboardInterrupt:
            print('exiting pzem script')
        except requests.exceptions.RequestException as e:
            print('request failed: ', e)

USBシリアルのポート名。/dev/ttyUSB0 のところは syslog を見て確認。
am = ambient.Ambient(チャネル番号, ‘Writeキー’)
ambient のデータ送信は、ご自身のグラフを作成するところで、チャネル番号、ライトキー、リードキーが発行されるので、そのチャネル番号、ライトキーを入れたら送信できます。

プログラムの起動は、raspberry pi 起動後手動でしています。
tmux or screen コマンドを起動する
上記 python プログラムを走らせる
tmux or screen から抜ける。
です。tmux や screen でプログラムを動かしておけば、teraterm とかが切れても動き続けますので良いです。

ambient に投げたデータは公開にしていますので、下記 URL からご覧いただけます。

自宅の商用電圧と周波数 -Ambient (ambidata.io)

上のプログラムには記載省略していますが周波数は 0.1Hz 単位なので、実際にグラフを出してみると見にくい感じになりました。2022年9月5日から 周波数データの3回平均したものも追加で表示するようにしました。

MCS-52 Basic 基板作成

ヤフオクを見ていましたら、BASIC-52 の基板を見つけたので購入。基板に書かれたアドレスから https://www.billy.gr/mcs-basic-52/ で公開されているガーバーファイルのようです。以前作成した BASIC-52 基板は EEPROM 領域がないため、プログラムの保存が出来なかったのですが、こちらの基板は EEPROM のソケットが付いています。

この基板を作成された方は EEPROM の代わりに DALLAS DS1230AB-70 という バッテリーバックアップ付き 32KB SRAM (NVRAM) を載せておられました。不揮発性メモリなので機能は果たしますが、Mouser 価格 4000円程度とお高い状況。また、EEPROM は HC138 のアドレスデコードで 8KB バウンダリになっているので、8KB 分しかつかいません。NVRAM はもったいないので AT28C64B など8KBx8bit の汎用EEPROMを使用することにしました。

WEBサイトを見ると基板のエラー情報が書かれています。

DC ジャックの GND 未配線は、DCジャックの端子を抵抗の切れ端で接続して、電源が入るようになりました。また、リセット回路からの信号は CPU のリセット端子まで来ていましたが、74HC32 のリセット信号が配線されるべき端子には来ていなかったためジャンパー飛ばして結線。私の所ではこの2か所手当することで動作しました。

*MCS-BASIC-52 V1.31*
READY

>erase       

READY
>
>10     REM Basic ROM directory
>20    ADR=8010H : PN=1
>30     IF XBY(ADR)<>55H THEN  END
>40    ADR=ADR+1 : BA=ADR
>50     IF XBY(ADR)=1 THEN  GOTO 80
>60    ADR=ADR+XBY(ADR): GOTO 50
>80     GOSUB 100: PRINT : PN=PN+1 : ADR=ADR+1:   GOTO 30
>100    PRINT "PRG",PN,"from ", :  PH1. BA, :  PRINT " to ", :  PH1. ADR,
>110    PRINT " (",ADR-BA,"bytes)",
>120   NB=XBY(BA)-2: IF NB<4 THEN RETURN
>130 IF XBY(BA+3)<>96H THEN  RETURN
>140    FOR XX=BA+4 TO BA+NB:PRINT CHR(XBY(XX)),: NEXT : RETURN
>prog
 1

READY

erase 命令で EEPROM 領域を初期化します。3分くらいかかるので気長に待ちます。その後プログラムを入れて、prog 命令を実行すると EEPROM にプログラムが保存されます。↑のプログラムは、EEPEOM にどんなプログラムが格納されているか表示するプログラムで、http://www.nomad.ee/micros/8052bas.shtml で公開されているものです。

>rrom

PRG 1 from  8011H to  8134H ( 291 bytes) Basic ROM directory

READY
>

rrom 命令を実行すると、EEPROM の1番目のプログラムを実行します。先ほど書き込んだ EEPROM に何が入っているかを表示するプログラムです。

>ram

READY
>new

>1 REM ASCII ART
>10 FOR Y=-12 TO 12
>20 FOR X=-39 TO 39
>30 CA=X*0.0458
>40 CB=Y*0.08333
>50 A=CA
>60 B=CB
>70 I=0
>80 T=A*A-B*B+CA
>90 B=2*A*B+CB
>100 A=T
>110 IF (A*A+B*B)>4 THEN GOTO 150
>120 I=I+1:IF I<=15 THEN GOTO 80
>130 PRINT " ",
>140 GOTO 170
>150 IF I>9 THEN I=I+7
>160 PRINT CHR(48+I),
>170 NEXT X
>180 PRINT
>190 NEXT Y
>
>prog
 2

READY
>rrom

PRG 1 from  8011H to  8134H ( 291 bytes) Basic ROM directory
PRG 2 from  8136H to  8417H ( 232 bytes) ASCII ART

READY
>rrom2

新しいプログラムを追加します。prog を実行すると EEPROM の2番目に格納されます。rrom2 と引数2で2番目を実行できます。

マニュアルを見ると、電源投入時に自動起動するプログラムの設定などもあるようです。また GPIO ピンもCPUについているので簡単に使えますし、このマイコンボードの右端にはメモリマップドI/Oの端子も出ています。プログラムのセーブが出来るマイコンボードは当時としては優れた機能だったかと思います。普通はROM差し替えですしね。まぁBASIC言語なので実行速度はお察しというところで。

E1DA Cosmos ADC 購入

やっとのことで、Cosmos ADC を購入しました。私は、E1DA Aliexpress Store https://ja.aliexpress.com/store/5142044 から購入しました。Aliexpress Standard shipping で2週間程度だったかと思います。

この Cosmos ADC の本体に何も信号を入れない状態のノイズが全体的に低く、アマチュアにはもったいないくらいの性能です。このグラフを出しているソフトは REW というソフトウエアです。

この Cosmos ADC に、USBオーディオインターフェースとプローブの端子を付けて、1kHz の信号を見てみました。

REW の信号ジェネレーターから 1kHz -3dB の信号を出して、アナライザ画面の表示を見たところです。THD+N 106.2dB と測定できます。

自作アンプの周波数特性や、入出力特性は Analog Discovery と FRA Plus で十分なのですが、歪率とノイズフロアは Analog Discovery ではどうにもなりませんでした。今回入手した Cosmos ADC なら、作ったアンプの歪率が高いとか、電源ノイズが出まくっているとかなどの確認が、私のようなアマチュアでも簡単に出来るようになりました。

MCS8051 BASIC-52 基板を買って組んでみました

電脳伝説さん https://vintagechips.wordpress.com/ の記事に、8752同等品でBASIC-52が動いた というのがありました。面白そうだったので、組んでみることに、基板はオレンジピコショップ https://store.shopping.yahoo.co.jp/orangepicoshop/ さんにて基板とCPUなどを購入しました。

今回組み立てた BASIC-52 基板は 8052 (Flashメモリ 8k) で動作します。↑の写真にあるようなCPU+メモリだけの最小構成のものです。今回購入した CPU は STC89C52RC(90C) というもので中華製互換チップです。これは、stc-isp-v6.xx.exe の書き込みソフトを使用して USB シリアルから Flash 書き込みをするタイプの CPU です。

http://www.stcmcudata.com/ というところが、製造メーカーの Web サイトです。このサイト右側に資料の pdf ファイルや STC-ISP ソフトウエアのダウンロードリンクがあります。書き込みソフトウエアについては、indows Defender が 「Trojan:Win32/Wacatac.B!ml」 を検出してすることがあるので、ダウンロードした .zip をウイルススキャンしてから unzip してください。 Wunzip したらドライバーなどのフォルダがありますが、何もインストールする必要はありません。stc-isp の exe ファイルをダブルクリックして起動するだけです。

書き込みソフトは電脳伝説さんの資料にあった、
http://www.stcmcudata.com/STCISP/stc-isp-15xx-v6.88G.zip
や、その後のリリース
http://www.stcmcudata.com/STCISP/stc-isp-15xx-v6.89G.zip
http://www.stcmcudata.com/STCISP/stc-isp-15xx-v6.89G-tiny.zip
は Windows Defender にひっかかりません。

なお、BASIC-52 については、1.3 というのが最新版です。ソースはググると出てきますが、A Tiny 80(C)32 BASIC Board https://www.dos4ever.com/8031board/8031board.html に、ソースファイルと HEX がおいてあります。ダウンロードした HEX ファイルを ST89C52RC や AT89S52 などに書き込めば BASIC-52 が起動します。もしアセンブラでアセンブルしてみたい時は、ASEM-51 http://plit.de/asem-51/final13.htm というから v1.3 をダウンロードしてください。asem5113 を展開したフォルダでコマンドプロンプトを起動し、アセンブルしたら hex ファイルを作成することができます。

HEXファイルの書き込み(STC89C52RC)

ST89C52RC の場合は、STC-ISP を使用して、USBシリアル経由でフラッシュメモリの書き込みを行います。

  • ボードの電源を切る
  • stc-isp を起動する
  • MCU TYPE : STC89C52RC/LE52RC を選択する
  • シリアルポートを選択する
  • ファイル→Open Code File からダウンロードした HEX ファイルを開く
  • H/W Option のチェックボックスを確認する。Enable 6T にチェックを付けると倍速モードになります。
  • Download/Program ボタンをクリックする
  • ボードの電源を入れる
  • フラッシュメモリへの書き込みが行われる

HEXファイルの書き込み(AT89S52)

AT89S52 に書き込む場合は USBASP アダプタのファームウエアを書き換えて avrdude コマンドでフラッシュメモリの書き込みを行います。(TL866 II Plus などのパラレルライターを持っていればそれでも可能)

USBASP という AVR マイコンの書き込みアダプタがあります。これはアマゾンとかで検索すれば2個セットなどがたくさん出ています。AVR マイコンの書き込み機を持っておられない方は、2個セットがおすすめです。USBASP 用 AT89 対応ファームウエアは https://www.avrfreaks.net/comment/2109556#comment-2109556 に usbasp_AT89.zip として掲載されています。これをダウンロードして展開。main.hex というファイルがあるので、これを USBASP に書き込みします。USBASP は ATmega8(A) なので手持ちの AVR 書き込み機や、2個セット USBASP のうち1個使って、 AT89 用 hex を書き込みを行います。

  • 2個ある USBASP のうち1個の JP2 ジャンパをショーして、ファーム更新できるようにする
  • もう1個の USBASP とケーブルで接続し、USBポートに接続。avrdude コマンドでファームウエア更新をする
avrdude -c usbasp -p m8 -U flash:w:main.hex:i
  • ファームウエアを書き終わった USBASP の JP2 ジャンパを外す。(AT89対応 USBASP完成)
  • AT89 対応 USBASP を BASIC-52 ボードと接続する

結線は、MOSI/MISO/SCK/RESET と電源ピンです。USBシリアルから電源供給している場合は、USBASP から電源供給しないよう注意してください。avrdude コマンドでの書き込み例は以下のようになります。

$ avrdude -C avrdude.AT89 -p s52 -c usbasp -P usb -Uflash:w:version_1p3_hex.HEX:i -v

avrdude.exe: Version 7.0-20220610 (cb11423)
             Copyright (c) Brian Dean, http://www.bdmicro.com/
             Copyright (c) Joerg Wunsch

             System wide configuration file is "avrdude.AT89"

             Using Port                    : usb
             Using Programmer              : usbasp
             AVR Part                      : AT89S52
             Chip Erase delay              : 500000 us
             RESET disposition             : dedicated
             RETRY pulse                   : RESET
             Serial program mode           : yes
             Parallel program mode         : yes
             Timeout                       : 200
             StabDelay                     : 100
             CmdexeDelay                   : 25
             SyncLoops                     : 32
             PollIndex                     : 4
             PollValue                     : 0x69
             Memory Detail                 :

                                               Block Poll               Page                       Polled
               Memory Type Alias    Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
               ----------- -------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
               flash                  33    12     0    0 no       8192  256     32   400   900 0x00 0x00
               signature               0     0     0    0 no          3    1      0     0     0 0x00 0x00
               atmelsig                0     0     0    0 no         32    1      0     0     0 0x00 0x00
               lock                    0     0     0    0 no          1    1      0     0     0 0x00 0x00

             Programmer Type : usbasp
             Description     : USBasp, http://www.fischl.de/usbasp/

avrdude.exe: auto set sck period (because given equals null)
avrdude.exe: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.00s

avrdude.exe: Device signature = 0x1e5206 (probably s52)
avrdude.exe: NOTE: "flash" memory has been specified, an erase cycle will be performed
             To disable this feature, specify the -D option.
avrdude.exe: erasing chip
avrdude.exe: auto set sck period (because given equals null)
avrdude.exe: reading input file "version_1p3_hex.HEX"
avrdude.exe: writing flash (8192 bytes):

Writing | ################################################## | 100% 6.16s

avrdude.exe: 8192 bytes of flash written
avrdude.exe: verifying flash memory against version_1p3_hex.HEX:

Reading | ################################################## | 100% 1.60s

avrdude.exe: 8192 bytes of flash verified

avrdude.exe done.  Thank you.


BASIC-52 とは関係ないですが、C言語でプログラムをする場合は sdcc や、Keil μVision5 の C51 コンパイラが使用可能です。

BASIC-52 は EPROM/EEPROM 書き込み命令も持っていたりするのでおもしろいと思いますが、この機能は今回作成した基板では試せません。

興味を持たれたら BASIC-52 で検索してみると検索結果が多く出ます。それだけトライされている方が多いということかと思います。

TL866II PLUS 25V/21V アダプターを作った(2764/27128版)

一つ前の記事、 TL866II PLUS 25V/21V アダプターを作った で 2716/2732 対応のアダプタ基板を作成しました。今回はバリエーションで 28ピンソケットのプログラミング電圧=1Pin の対応で基板を修正しました。

回路図や部品表などは、https://github.com/ngc6589/TL866II-PLUS-25V-21V-Adapter-for-2764-27128 にて公開しています。

このアダプタは 2764や 27128 など VPP=1Pin が対象です。作ってみて試しに手持ちの 2764 27128 に書き込みをしてみました。特に問題なく書けました。

余った基板は https://www.em9system.com/?p=989 にて頒布します。

TL866II PLUS 25V/21V アダプターを作った(2716/2732版)

TL866II PLUS のプログラマーは EEPROM などの書き込みや、ATMEGA328P のヒューズリセットなどお手軽でよいのですが、EEPROM となると書き込み用電圧が 18V までとなっています。この前の機種では 21V まで出たのですが現在は通販から消え去ってしまってます。今更 2716 を書くことは APPLE II のメンテで必要になるくらいなのですが、一つ作っておこうということで作っちゃいました。

回路図や部品表などは、https://github.com/ngc6589/TL866II-PLUS-25V-21V-Adapter にて公開しています。

このアダプタは 2716 VPP=21Pin 2732 VPP=20Pin が対象です。作ってみて試しに手持ちの 2716 2732 に書き込みをしてみましたが、 2716 は特に問題なし。2732 は書き込めず悩みました。ググった結果 XGpro というこのプログラマのアプリケーションにバグがあってワークアラウンドとして 2732 の 18Pin(チップイネーブル)をGNDに落として書き込むというのが今の状況です。これをすれば私のところでも書き込みは出来ました。

今回は初版とあって基板にミスがありますが余った基板を https://www.em9system.com/?p=965 にて頒布します。

AY-3-8910(PSG) の Arduino シールド作成

Z80 をいじったついでで AY-3-8910 の PSG もいじってみようと思います。AY-3-8910 は40ピンの IC ですが、ほかにも YM2149F がコンパチで使えます。また 40ピンの足のうち I/O ポートなどを省略してピン数を減らした AY-3-8912,AY-3-8913 などもありますが、今回作った基板には合いませんので使用できません。

回路は、AY-3-8910 PSG のデーター・制御の線と、3.579545MHz のクロック。MIDI インタフェースと音声出力のジャックで構成されています。ターゲットの Arduino は 基板の大きさと I/O ポート取り出し位置の都合で MEGA2560 を使用しています。AY-3-8910 は 3声までしか出ませんので、ちょっと物足りない感じです。なので、J4 のジャンパ切り替えで4枚まで積んで 12声同時発生できるようにしました。

1つ目は、オシレーターなど部品を全部つけないといけませんが、2つ目以降は、 AY-3-8910 とジャンパがついていればOKです。

プログラムのソースなどは GitHub – ngc6589/arduinoMidiSynthPSG に置いています。

まだ、Github の資料更新中ですが、AY-3-8910 と基板、MIDIコネクタ、フォトカプラ以外は全部秋月でそろいます。頒布するかは未定です。

Free MIDI ファイルをダウンロードして、DOMINOに読み込ませて、リズムパートだけ再生しないようにするだけでこんだけ鳴ります。存外遊べそうなものが出来てうれしい限りです。

Dual-84 CPUボード

共立電子のネット通販にて売り切り終了 550円で投げられていた TMPZ84C015BFC-8 が実装されたボードです。クリスタルは 19.6608MHz システムクロックは 1/2 なので、9.8304MHz で動作するボードです。表面には CPU と ROM のソケットがあります。クロック周波数的には少しオーバークロックですかね。

裏面には SRAM CY62256NLL-70SNXC という SRAM が実装されていました。Z80のメモリアクセスのタイミング的には大丈夫かなと思います。

とりあえず BASIC が動けばいいやというところですが、ブレッドボードに貼り付けたかったので。ヘッダピンが下向きに出ているのを逆向きに付けなおしました。クロック周波数は RC2014 などで使われている 7.3738MHz(クリスタルは倍の 14.7456MHz) に交換しました。この周波数だと一応実装されているCPUの定格内なことと、シリアル通信でシステムクロックをSIOで 1/64 分周すれば CTC を使わずに 115.2kbps の速度が出せます。

CPUボードはブレッドボードに貼り付けボスを使って固定。シリアルインタフェースは秋月の FT232RL のモジュールを使用しました。これは6ピンソケットのシリアルインタフェースでもいけます。TXD/RXD と RTS/CTS をクロス接続しています。DTR/DCD 端子は使わないのですが、SIO の動作には必要なので自分自身で折り返し接続です。SIO のクロックはシステムクロックのピンから  7.3738MHz を供給します。9600bps などのボーレートで通信する場合は CTC の出力からクロックを供給します。(後で紹介するサンプルは 9600bpsの例をコーディングしています)

HALT 端子にLEDと電流制限抵抗を接続して HLAT したことが分かるように。

リセットボタンのタクトスイッチ、PIO A/B にTD62083 シンクドライバを接続し、その先にアノードコモンの8桁LED基板を接続しました。

電源スイッチは、FT232RL の USB ケーブル抜き差しが面倒だったので付けました。最近の Teraterm は USB が抜けてシリアルが切れても USB させば自動復旧するので、スイッチは必須ではないですかね。

開発環境は、VSCode に TASM_Assembler プラグインを入れただけです。このプラグインのディレクトリに TASM.EXE が入っています。面倒なので開発するフォルダに EXE と TAB ファイルをコピーして使っています。build.bat を作っておけば CTRL + SHIFT + B でビルドしてくれます。コマンドラインは

TASM -80 -fff -s D84CPU-CP-BASIC.asm D84CPU-CP-BASIC.hex

という感じで -80 はターゲットが Z80、-fff は空いた領域を 0xFF で埋める。-s はシンボルリストも作成する。後はソースファイル名とhexファイル名を build.bat に記述する感じです。

BASIC は http://searle.x10host.com/index.html Grant Searle さんが 移植したものです。レトロコンピューティングではスタンダードな BASIC です。

ただ、BASIC の入出力のシリアル通信はマシンごとに違うため各自用意する必要があります。オリジナルは 68B50 のシリアルチップなので流用できません。Z80 SIO用を書かねばなりません。AKI-80 用に公開されているものでいいのですが、ここは頑張って自分で用意しました。

クロックを CTC で分周し、SIOのボーレート 9600bps 版のソースは https://github.com/ngc6589/Z80Learning/blob/main/D84CPU-CP-BASIC.asm に置いてます。SIO は送受信ともステータスアフェクトベクタを使用した割り込み制御にし、Z80 の割り込みモードはモード2です。受信のハードフロー制御もいれてあるので、Teraterm からプログラムの貼り付けもTeratermのディレイ設定なしでいけてます。

今回は BASIC が動けばよかったのでこれ以上のことは予定なしですが、本来ならモニタROMを用意するのがいいかなと思います。手持ちにモニタROM付きボードなどもあるので、この CPU ボードは一旦ここまでということにします。