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がお勧めです。下記は、切り外し前の基板外観です。





Panasonic HHC ~ 16KBプログラムカプセルの再現

2023/06/19

 eBayで見つけたレトロなコンピュータPanasonic Hand Held Computer(HHC) RL-H1400の修復を行いました。RL-H1400は、1982年に松下電器が米国および、欧州向けに充電電池駆動で、手のひらに乗るコンピュータとして発売しました。当初は、民生用・業務用の両面展開を目指したようでしたが、最も利用された用途は、米国保険業界の営業ツールのようです。様々な顧客条件に合った保険提案を即時、RL-P1004Aプリンタにプリントアウトし、販売増が期待できる営業ツールだったようです。これがeBayに出品されています。


RL-H1400の仕様:
・CPU: MOS Technology 6502(1.024MHz)
・ROM: 16KB
・RAM: 4KB
・Program ROM: 16KB, 8KB or 4KB x 3 Capsules(MaskROM or EPROM)
・Display: 26 Character LCD


RL-H1400は、電池駆動でも当時のパーソナルコンピュータ並みの性能(Apple IIも6502を採用)を発揮できました。これは、①コンパクトかつ、処理性能が高い、ROMベースFORTH言語によるOSの採用、②NMOSデバイスの消費電力を抑えるため、アクセスされたデバイスのみ電源を入れる電源スイッチングにより、低コスト・省電力・高演算性能を実現していました。当時NMOS全盛時代で、CMOSのMPUは、まだ価格・性能上の制約があったようです。


業務用として、Apple II上でSnapForthで業務用のプログラムを開発できるSDKが発売され、保険用営業ツールが幅広く開発されて、プログラムスロットには、最新保険商品のEPROMに書き込まれたプログラムが入れられていたようです。

民生用としては、各種プログラムカプセルも発売されました。プログラム言語として、SnapForth、SnapBasic、MS-BASIC、アプリケーションでは、Scientific Calculator、Portacalc、Teleconputingなどがあったようです。ROMカプセルですので、数は少ないものの、現存しているようです。これらのカプセルは、当時サンフランシスコのFriends Amis社で開発されたようですが、現時点では、Friends Amis社は存続していないようです。

そのため、保険用営業ツールで使用された、モトローラ社のMCM68764というEPROMを書き換えて流用しているようです。ただ、MCM68764は、8KB以下のカプセルにしか使えないません。16KBカプセルの場合は、27128系のEPROMを使い、24ピンに変換した例もあるものの、成功していないようです。


そこで、Panasonic HHCを蘇らせるため、劣化している内蔵NiCd充電電池をNi-MH電池に交換するとともに、16KBカプセルにもチャレンジしてみることにしました。

モトローラ社のMCM68764は、24ピン8K x 8(64Kbits)のEPROMですが、ピン数の制約により16KBカプセルに使える24ピンのEPROMは、現存しません。16KBに拡張するためには27128系のEPROMを使用するしかありませんが、MCM68764と同じように使用できるEPROMを探すことが必要になります。


では、なぜMCM68764が使われてたのでしょうか?その理由を調べるため、プログラムカプセル周辺の回路を下記のように確認してみました。


①CMOSの27128系のEPROMの場合、EPROMの電源スイッチがOFF時に、入力・出力端子に寄生ダイオードがあるため、アドレス・データバスから電流を吸い込んでしまいますので、システムとして動作できません。

②NMOSの27128系のEPROMの場合、MCM68764のように、電源スイッチングしても動作可能な製品と電源スイッチングを行った場合、アドレス・データバスの電圧によって、言わゆるラッチアップ現象(異常電流)が発生するものがあるようです。MCM68764の場合でも電源に0.01uFのコンデンサを取付け、電源の立ち上が遅くしてラッチアップを回避しようとしているようです。

従って、下記の条件を満たすNMOSのEPROMを探すことにしました。

条件1:28ピンDIPパッケージでは、スロットに入らないので、市場で入手可能なPLCCまたは、フラットパッケージのNMOS EPROMを探す

条件2:ラッチアップ現象が起こらないいか、28ピンDIPパッケージ品を入手し、24ピン変換基板を作成して動作確認を行う

NMOSの27128系EPROMを何種類か試してみました。
EXCEL製、XICOR製のNMOS EEPROMは、動作しませんでした。電源が安定するまで動作しない仕様のようです。次に、AMD製のNMOS EPROMを確認しましたが、動作しませんでした。その後、諦めかけていましたがTOSHIBA製のNMOS EPROM、TOSHIBA製TMM24128APを入手し、動作確認したところ、電源スイッチングに耐えることがわかりました。ラッチアップ現象が発生しやすい製品とそうでない製品との差は、各社の製造プロセス差やサブストレートバイアス回路の違いで発生しているのではないかと推察します。

TOSHIBA製TMM24128APにはOTPタイプのフラットパッケージ TMM24256AFがあり、市場に在庫があるようですので、カプセルスロットにちょうど入る専用基板を作成することにしました。TMM24256AFは、容量が32KBですので、16KBカプセル2個分を入れることができるため、'CHS-01B'というSO-typeのスライドスイッチで切替できるようにしました。最初の試作では、EPROMのA14を+5Vと0Vに切替できるようにしましたが、+5Vの時、プログラム実行中にハングアップしてしまいました。この現象は、何が起こっているのかはっきりわかりませんでしたが、対策として、+5Vを分圧して+3Vに落としたところ、問題なく動作しました。結果的には、ラッチアップ現象が発生する条件が発生したと思われます。

下記は、専用基板の使用部品です。
・TMM24256AFにEPROMライターで
 書き込みする。このとき、SOP-28用の
 書き込みアダプター(*)が必要になります。
・カプセルスロットに入るように、
 基板のバリをヤスリで削る
・SMD部品(抵抗・コンデンサは、
 1608mm 0603inchサイズ)を
 はんだ付けする
・TMM24256AFをはんだ付けする
・半田付け状態をルーペで確認する


・0.5mm角ヘッダーの黒いプラスティック
 部分を端に移動する
・0.5mm角のヘッダーはんだ付けする
・カプセル取り出し用の紐を取り付ける


(*)TMM24256AFは、幅11.8mmと広いタイプのフラットパッケージですので、「FP-28-127-07」または「OTS-28-1.27-23」という変換ソケットが必要になります。
今回は、入手難のため、「OTS-28-1.27-04」を分解・削り出して、無理やり幅広くして使用しましたが、非常に大変でした。(お勧めしません)







次の写真は、完成したカプセルです。設計上、TMM2464AF x 2、TMM24128AF、TMM24256AFを使用して、16KBカプセルを実現できます。詳しくは、回路図(後段の公開ZIPファイル中にあります)の注釈部に実装オプションの記載があります。























次は、そのカプセルをプログラムスロットに取付た状態です。



EPROMの書き込み・基板の組立・カプセルの接触状態に問題無ければ、プログラム名がメニュー表示されるはずです。

同じようにのこの基板を製作したい方(個人利用のみ、商用利用は禁止)は、
回路図・外形・ガーバーファイルを自己責任にて使用してください。
基板の発注先は、JLCPCBがお勧めです。下記は、切り外し前の基板外観です。




マイクロカラーテレビ「TR-101CT」の修理 ~ 電解コンデンサの罠

2022/12/17

 久しぶりのアップになりました。

松下電器産製 Nationalブランド1983年製造の「カラー Solo ナショナル マイクロテレビ 1.5型 TR-101CT」の修理です。グッドデザイン賞受賞モデルだそうで、手のひらに乗る重さ600gのブラウン管カラーテレビです。ただし、充電電池8本を入れると、1kgに近づきますが、手のひらサイズには変わりがありません。

このモデルは、当時、主に産業向け製品を生産していた藤沢テレビ事業部が産業向けブラウン管技術を使用した民生用小型ブラウン管(超微細ドットピッチ0.25mm)を開発し、世界でもっとも小さなブラウン管カラーテレビとして、世界展開したようです。いまでも中古市場で人気があるようです。


ところが、野心的に小型化するため、小型電解コンデンサを多用しているため、今回のように、まともに動作する中古が少ないと思われます。小型電解コンデンサの劣化モードの検証と修理を行い、地デジチューナのアナログ(コンポジット)出力をUHF変調し、無線アンテナ経由で部屋の好きな場所で見ることができるようにしました。パソコン作業中にテレビを横目で見れるようにもなりました。


まず、TR-101CTの入手です。当時は、回路図・基板パターン図が添付されていましたので、これが付いているもので、電池漏れがないものをヤクオフで落札しました。

TR-101CTの状態は、チューニング位置によってブラウン管がわずかに発光し、ノイズ音声がでました。外部ビデオ入力をしましたが、ほとんど画面の変化はありませんでした。最初は、調整で逃げ切れるかもしれないと思っていましたが、基板の状態を確認すると、やはり電解コンデンサの液漏れが所々で発生していました。この時期(80年代製品の修理では注意)、電解コンデンサの小型化・低等価直列抵抗化を進めるために「第四級アンモニウム塩」の電解液が使用され始めたようで、強アルカリ電解液であるため、電極酸化膜のピンホールによる性能劣化、ゴムパッキンの劣化による漏液でプリント基板銅箔の腐食に進行してしまいます。


全電解コンデンサを交換するのが万全ですが、本数が多いので、劣化した電解コンデンサを特定し、交換することにしました。また、プリント基板銅箔の修復もせざるを得ない状態でした。

①劣化電解コンデンサの特定と交換

・小型品の電解コンデンサ(特に低電圧・大容量)

・リップル電流が大きい初段平滑コンデンサ

・リード線が変色している電解コンデンサ

・リード線が変色していなくても、上記品と同じ電解コンデンサ

以上を取り外し、LCRメータで、特性確認すると、大半が不良でした。検査した電解コンデンサの状態を参考までに、掲載します。


容量抜け・高周波特性劣化・漏れ電流増加・ESR増加など、典型的劣化パターンが網羅できそうです。びっくりでした。


②プリント基板銅箔の腐食部分の修復

電解液漏れで変色してしまっている銅箔部分のレジストを工作ナイフで削り、銅箔をむき出し後、銅箔の腐食膜を削り、正常に導通できているか確認します。もし切断部分があれば、銅箔(銅線)でブリッジして銅むき出し部分全体を半田メッキします。

今回は、IC301の下部の銅箔が腐食していたので、IC301を取り外して修復しました。


③ブラウン管関連の調整

電解コンデンサの問題が大半で、他の部分は問題ないことが多いため、ブラウン管関連の調整のみを行いました。ブラウン管ドライブIC302の左上2つのドライブトリマを左にいっぱいに回し、右側縦2つのカットオフトリマを左にいっぱいに回します。これで緑のみが表示されることになります。

適当なビデオ入力をして、本体の右側の"Color"最小、"Bright"中央、"Contrast"最大に調整して白黒画面表示にします。フライバックトランス部上部のブラウン管に近い方のスクリーン調整ボリウムを適当に回し、緑色画面がきれいに出るようにします。

この状態でIC302の右側縦2つのカットオフトリマを徐々に右側に回し、暗い部分が白色発光するようにします。次に、IC302の左上2つのドライブトリマをを徐々に右側に回し、明るい部分が白色発光するようにします。さらに、明るさに関わらず全体に白色発光するように上記を繰り返します。


以上でうまくテレビが動作しない場合は、別途、オシロスコープ等で、問題を解決する必要があります。


④アナログ(コンポジット)高周波変調器

ゲーム用のRF変調器を流用することも考えましたが、VHF帯のみにしか使えないので、アマゾンや、eBayの「RCA-RFアダプター ビデオコンバーター」を改造しました。写真のように出力ポート側にもスイッチがついている製品が必要です。この製品は、元々中国向けの製品で、出力周波数や、ビデオ形式が日本向けNTSCではないので、内部のマイクロコントローラを入れ替える必要があります。また、ケーブル接続を前提にしているため、出力電圧が10uV台と微弱になっています。

そこで、日本のNTSCに対応してL-VHS、H-VHS、UHFの切り替えとチャネルL/H切替をできるようにするため、内部のMC44BS373類似の中華モジュレータのプログラム内容をキャプチャし、日本向けプログラムをするPIC12F1822ファームウェアを作成しました。

参考までにRFモジュレータファームウェアを公開します。


オリジナルのマイクロコントローラを外して、PIC12F1822の電源端子極性を間違わないように入れ替える必要があります。スペースの余裕があったので、DIPソケット経由でジャンパ配線を行いました。また、RF出力をアンテナから飛ばすことができるように20dBゲインのLNA(NBB-500等、適当なMMIC)をカスケード接続で40dBまでブーストし、1mW弱程度(電波法令の小電力規制内)の出力をUHF用受信アンテナに給電して部屋内部で見ることができるように電波を飛ばしました。



結構苦労しましたが、目論見通りできました。参考にしてもらえればと思います。

(再クロール更新:2022/12/22)

4004マイクロプロセッサ 50周年 ~ インテルからのクリスマスプレゼント

2021/12/26

 製作手順(1)ブログ掲載時にはQuartus II Web Edition 13.0sp1のリンクは有効でしたが、インテルからのとんだクリスマスプレゼントでQuartus II Web Edition 13.0sp1が配布中止になりました。


"the Internet Archive"で確認すると12/23には切り替えされていました。Release: v16.1以前すべて配布中止になったようです。幸い、Quartus Prime Lite Edition 17.0のProgrammerが使用できることが確認できましたのでダウンロード手順を紹介します。


まず、下記URLを開きます。

https://fpgasoftware.intel.com/17.0/?edition=lite&platform=windows



「追加ソフトウェア」のタブからから"Stand-Alone Software Quartus Prime Programmer and Tools"をダウンロードしてください。(前回と同じようにインテルのユーザ登録が必要です。)


Quartus II Web Edition 13.0sp1の"Additional Software Quartus II Programmer and SignalTap II"と同じようにFPGAへのプログラミングができます。インストールして使用ください。






さて、Pro MicroのスケッチVer.0.92を合わせて公開します。

EM5822用のコンパイルスイッチを有効にしたSBC4004スケッチVer0.92(商用には利用できません)を公開します。


(a)EM5822プリンタ対応でプリンタとの通信量が増えてしまったため、通信中にLED表示が止まってしまうことがわかりましたので、修正しました。

(b)電卓のキーボード・エミュレーション機能に問題があり、「CE」キーで、LED表示がクリアされない点を修正しました。


(再クロール更新:2022/12/22)

4004マイクロプロセッサ 50周年 ~ SBC4004のサーマルプリンタ追加サポート

2021/12/20

 アマゾンで「GOOJPRT QR204 POS/ESCサーマルプリンタ」の入手ができない状況になっています。eBayでは入手可能なようです。今回、アマゾンで入手できるEM5822とQR701を評価しましたので、接続方法及び対応スケッチを公開します。



左の写真は、左上(EM5822)、右上(QR701)、下(QR204)です。サーマル紙のドアノブの形状によって識別できます。








①EM5822の接続方法

下記は、購入時のコネクタの写真です。


EM5822コネクタの形状は、QR204と同じですが、信号配置が違うため、コネクタピンの入れ替えが必要になります。






まず、精密マイナスドライバで電源コネクタ(2ピン)のピンを外します。ピンのロック部を下に下げながら外します。押したことでロック部が下がってしまった場合は、ピンを外してから押し上げます。






次に信号コネクタ(5ピン)のハウジングのロック部を押し上げながら黒・緑ピンを外します。電源コネクタは、黒と赤を入れ替えます。信号コネクタは、黒と緑ピンを入れ替えます。下記は、入れ替え後の様子です。












②QR701の接続方法


下記の写真のように、基板裏のコネクタ端子に直接はんだ付けします。ケーブルの色に注意してください。



この例では、プリンタを入れ替えてテストできるように中継コネクタを入れていますが、プリンタ付属のケーブルを切断して直接半田付けするのも良いかもしれません。








③Pro Microのスケッチを書き込む

QR204用のスケッチでEM5822を駆動すると、数字は同じように印字しますが、電卓特有の記号が印字できません。また、デバッガ出力をプリンタに印字すると、文字サイズが小さくなりません。EM5822のコマンドは、QR204のそれと仕様が異なるため、Pro Microのスケッチを書き換える必要があります。QR701は、EM5822と同系列のファームウェアを採用しているようですので、同じスケッチが使用できます。


Pro MicroのSBC4004スケッチVer0.91では、EM582とQR204をPrinter.cpp内のマクロ定義の切り替えで、対応することにしました。


(a)SBC4004 EEPROMスケッチの書き込み

QR204とEM5822共用のSBC4004_EEPROMスケッチVer0.91(商用には利用できません)をダウンロードし、展開後、SBC4004_EEPROM.inoをArduino IDEから開きます。


スケッチ->マイコンボードに書き込むで、Pro Microへプログラムを書き込みます。


(b)SBC4004スケッチの書き込み

EM5822用のコンパイルスイッチを有効にしたSBC4004スケッチVer0.91(12/21 Updated バージョン表示修正忘れ対応、商用には利用できません)をダウンロードし、展開後、Arduino IDEからSBC4004.inoを開きます。


スケッチ->マイコンボードに書き込むで、Pro Microへプログラムを書き込みます。


以上で、動作上の問題はありませんが、EM5822および、QR701では、薄めの印字になります。了承をお願いします。これは、プリンタの印字濃度設定がすでに濃い状態になっているため、これ以上の濃くできないようです。高感度な印字紙の使用または、プリンタの電源を別電源で7~9Vにするなど、対策が必要なようです。


(2021/12/21追記)

最近流通しているQR204で、ファームウェアの世代が変わったとの情報がありました。以前アクセスできたGOOJPRTのホームページも見つからないみたいです。


もし、左のような「√」が中国漢字「丂」に化けて表示される場合、EM5822用のスケッチ(EEPROM更新含む)に切り替えて試してみてください。





(再クロール更新:2022/12/22)

4004マイクロプロセッサ 50周年 ~ Busicom-141PF電卓プログラム

2021/12/13

 Busicom-141PFは、50年前、当時のビジコン社によって開発製造されたプリンタ電卓です。この電卓に内蔵されていた電卓プログラム(ファームウェア)は、インテル4004プロセッサの開発と並行してインテル4004プロセッサと同等なブレッドボードを使って開発されたようです。


全体のプログラムサイズは、基本部分1KB、平方根部分256Bからなります。先頭の256Bのアセンブラ言語(機械語)で記述された低レベルのプログラムで、後半の1KBの大半が、疑似命令と呼ばれる一種のサブルーチン(電卓マクロ命令)の先頭アドレスが並んだテーブルになっています。このようなテーブル記述によるプログラムは、FORTHにも採用されています。メリットは、コンパクトなプロクラムと効率的なプロクラム実行が実現できます。後日、JAVA(バイトコード)にも受け継がれていると思います。


下記は、電卓プログラムの概略フロー図です。




Busicom 141-PFには、エプソン製の17桁印字可能なドラム式インパクトプリンタ「MODEL-102プリンタ」が搭載されています。このプリンタからは、ドラム位置を知らせる約28mS間隔のセクタパルス信号が4004のTEST入力ピンに接続され、全体の処理の基準信号となっています。また、このセクタパルスは、キーボードの検出タイミングにも利用されていますので、電卓全体のタイミングを担う重要な信号になります。


概略フロー図の先頭部分で、プリンタドラムのセクタパルス信号待ちによる同期を行った後、キー入力の検出を行い、キー入力が確認できれば、キー毎の電卓マクロ命令を実行する仕組みになっています。


「MODEL-102プリンタ」は、17桁印字可能なドラム式インパクトプリンタです.プリンタドラムは回転方向に、14等分され、約28mS間隔で各位置タイミングを知らせるセクタパルス信号と回転ドラム先頭の文字タイミングを知らせるインデックスパルス信号が出力されています。各桁には、最大13種類の文字が刻印されていますので、インデックスパルス信号からセクタパルスを数えた位置で印字ハンマをトリガすれば、刻印された印影をインクリボンのインクで紙に転写できる仕組みになっています。


下記は、電卓マクロ命令を逐次実行する部分のプログラム(インタープリタ)です。“JMS 300H”で電卓マクロ命令を読込み、“JMS 100H”でそのマクロ命令の実体(低レベルのプログラム)を実行するしくみになっています。













下記は、“JMS 300H”と“JMS 100H”の内部処理です。“305H番地”から一連の電卓マクロ命令が格納されています。













モニタプログラムには、電卓マクロ命令レベルのトレースができる”J”コマンドを備えていますので、動きが追えます。下記は、「1」「2」を押した場合のトレース結果の画面です。















Busicom-141PFは、電卓プログラムの解析内容は、下記のURLで公開されています。

https://www.4004.com/2009/Busicom-141PF-Calculator_asm_rel-1-0-1.txt

興味ある方は、参照してください。


電卓プログラムを実行中でも、FPGA内RAMは、Dual Port化してありますので、いつでもモニタプログラムから参照可能です。














モニタプログラムは、ターミナルソフトだけでなく電卓キーボードからも操作できます。例えば、ASキーは、アセンブラ機能を提供しています。


「6」「0」「0」、「AS」、「I」「N」「C」「SP」「3」「SP」、「N」「O」「P」「SP」「SP」で600H番地から"INC 3"命令と"NOP"命令をアセンブルできます。


電卓キーによるモニタプログラムの操作は、それほど操作性は高くありませんが、SBC4004単独でも操作が可能になります。興味があれば、他のコマンドキーも試してみてください。


(再クロール更新:2022/12/22)

4004マイクロプロセッサ 50周年 ~ SBC4004/Busicom-141PFの製作手順(2)

2021/12/06

 Twitterで、すでに組立られた方(達人?)がいらっしゃるようです。遅ればせながら、現物インテル4004をお持ちの方用のオプション回路の組立です。下記は、使用部品の例です。

























(a)ダイオード・コンデンサ・抵抗の取付

D1 - D5の定電流ダイオードは、方向に注意して取付ください。(下記の写真参照)


D1 - D5 SEMITEC E-102 1mA 定電流ダイオード

D16 1N914(互換品)









C12 50V, 4.7u 積層セラミック

C13 16V, 33u タンタル

C6, C15 50V, 0.1u 積層セラミック

R21 - R31 470 - 1/8W 小型

R42 47K - 1/8W 小型


(b)ロジック・電源部品の取付

U1, U5, U3, U4, U7は、ソケットを使用することをお勧めします。74VHC541は、eBayでもDIP品は、入手が難しくなっています。代替品としてマルツからSN74AHC541Nを入手できます。ADuM3221Aは、DIP化して使用されることをお勧めします。


U1, U5 74HCT367 4004双方向レベル変換

U2 16ピン ZIF ソケット(i4004)

U3 74VHC541 4004レベル変換

U4 アナログデバイセズ ADuM3221A(DIP化変換済)

U7 秋月電子通商 AE-LCNV4-MOSFET 双方向レベル変換モジュール(互換品)

U9 Minmax Technology MCWI03-12S15 3W級絶縁型DC-DCコンバータ(15V, 200mA)


AE-LCNV4-MOSFET 双方向レベル変換モジュールは、一度FPGAボードを外す必要があります。非常に硬いので、四方から少しづつ抜いてください。AE-LCNV4-MOSFET用にソケット使用する場合は、高さの関係から一列の丸ピンソケットを推奨します。


AE-LCNV4-MOSFET取付方向は、下記の写真を参照ください。













(c)4004電源電圧確認

5V ACアダプタを接続し、U2の16ピン ZIF ソケットのピンが-10V、ピンが+5V

でることを確認ください。


5V ACアダプタを切った後、ZIF ソケットにインテル4004を「1PIN」に注意して間違えないように挿入してください。(念のため白マークを入れておくと良いかもしれません)部品を間違えずに、半田付けに問題なければ、動作するはずですが、貴重なチップですので、あくまで自己責任で、ご使用ください。














5V ACアダプタを接続し、LED表示が「SbC4004 b_141PF」と表示中に、手早くArduino Pro MicroのUSBをPCに接続し、Teratermなどのターミナルソフトで、通信速度9600bpsで、Arduino Pro Microのシリアルポートに接続すると、4004の検出結果が表示されます。


正しく検出できるはずですが、検出できない場合は、Arduino Pro MicroのUSBをPCから外し、5V ACアダプタを切ってください。










②トラブルシューティング

既に、FPGA内の4004コアで動作確認が済んでいるはずですので、正しい部品を使用し、はんだ付けに問題なければ動作するはずですが、ターミナルソフト画面に"Native 4004 is detected."が表示されない場合、部品に間違いないか、ロジックの品番、抵抗値、定電流ダイオードの品番や極性、はんだ付けに問題ないか再度確認してください。


それでも、4004が検出できない場合は、オシロスコープが必要になると思います。4004にクロックが供給されているか、SYNC信号が4004から出ているかなどを確認する必要があります。クロックが供給されていて、SYNC信号が4004から出ていない場合は、4004が不良の可能性があるかもしれません。


その場合は、諦めてFPGA内蔵の4004コアを利用していただくしかないかもしれません。


③オプション部品(必要に応じ実装)

J11 2x5 ピンヘッダ - External I/O Portを使用する場合

J13 2x8 ピンヘッダ - i4004 Signal Header、FPGAプログラムデバッグ用

TP1, TP2 1 ピンヘッダ - FPGAプログラムデバッグ用

J14 JST B2B-EH-A 秋月電子 DC5V-in(FPGA側から電源供給したい場合)


以上、組立は完了です。うまく動作することを願っています。今度は、√3を計算してみました。
























次回は、電卓プログラムやモニタの説明など、考えています。

(再クロール更新:2022/12/22)