ラベル ZS-042 の投稿を表示しています。 すべての投稿を表示
ラベル ZS-042 の投稿を表示しています。 すべての投稿を表示

2025年10月18日土曜日

FM-7/77用RS-232CカードにRTCモジュールを追加して一枚のカードに

 FM-7/77用RS-232CカードにRTCモジュールを追加して一枚にしました

以前、FM-7/77用のRS-232Cカードを製作しました。
「FM-7/77用のRS232Cカードを作りました 2019年8月16日」
(https://flexonsbd.blogspot.com/2019/08/fm-777rs232c.html)

より使いやすくなるように、何回か修正を加えて最終的に下記のような形で使用してきました。
「FM-7/77用の自作基板(RS232Cカード、FT245通信カード、1024KB拡張RAMカード)のプチ改良 2024年3月25日」
(https://flexonsbd.blogspot.com/2024/03/fm-777rs232cft2451024kbram.html)

しかし、FM-7/77の32Pスロットは数少ないので、自作した32Pスロット拡張基板を用いても窮屈になってきました。

ということで、とりあえずRS-232CカードにRTC_SDカード中のRTC機能を追加して一枚にまとめてみることにしました。(F-Basicではともかく、Flex9やOS-9ではRTC機能は必須です)


製作の方針

COM部の入出力ですがシリアルコネクタは使いにくいので、今はTTL_USB変換ケーブルを使用することにしています。

また、RTC機能はZS-042というモジュールを使用し、そのコントロールにはPIA(68B21)のポートAを使用しています。スペース的には40ピンICを使用するのは非常に不利なのですが、PIAのポートAの特別な機能(出力に設定したままで入力も可能)がアセンブラでI2C機能を使用するのに最適ですので、そのまま使用することにしました。(回路を変更するとI2Cのプログラムを書き換えるのがかなりの手間になりそうなので、、、)

そのために全ICがそのままでは収まらなくなり、やむを得ず6個のゲートICをGAL20V8Bに置き換えることで何とか10x8cmのサイズに収めることができました。

(40ピンのICのわずか2ビットしか使わないのはいかにも勿体ないので、必要ならポートBが他の用途に使用できるようにピンヘッダを付けましたが、、、)


製作したカード

以上より、下記のようなRTC_COM8251Aカードが出来上りました。


製作したRTC_COM8251Aカード

本体に装着しました

本体スロットに装着した様子



回路図を示します(GALのプログラムは省略しました)

RTC_COM8251A

機能の確認

通信テストに使用したプログラム(F-BASIC文法書掲載のもの)


サンプルプログラム

通信の様子(FM-7側)

実行の様子(FM-7側)

通信の様子(Windows  TeraTerm側)

実行の様子(TeraTerm側)

RTCモジュール機能を下記に示します。


RTC機能の確認

起動直後のF-Basicでは日付・時刻が不定です。

RTC_WR2で時刻を設定します。RTCモジュールに設定されると同時にF-Basicのタイマー関係のバッファにもセットされます。

PRINT文で確認できています。

また、RTCモジュールの設定値をRTC_RD2で読み出し、RTC_SET2でF-Basicのバッファに転送できます。


最後に

製作直後は8251Aによる通信機能が全く反応せず、焦りましたが、TeraTermの改行コードの設定をデフォルト値のCRからAUTOやCR+LFに変更することで正常に通信ができました。(最初にRS232Cカードを製作した時に必要だった設定を忘れてしまっていました。。。)

通信速度ですが、純正のRS232Cカードでは19200baudまでとなっていますが、インテルやOKIの8251Aでは38400baudまで可能です。

また、RTCモジュールのコントロールソフト(RTC_WR2, RTC_RD2, RTC_SET2)ですが、FM-11用のものがそのまま使用できます。




2025年7月29日火曜日

FM-11用に作成したRTC_COMカードをFM-7/77用に移植

 FM-11用に作成したRTC_COMカードをFM-7/77用に移植しました。


FM-7用には以前、RTC_SDカードを作成して使用してきました。
(ブログ「FM-7にRTCとSDを接続する試み(2023年3月9日~5月19日の計6回掲載)」で紹介。)

しかし、カードを筐体の中にセットする機種ではSDの挿入・取り外しが非常に不便でしたので、常用しているFM77系には不向きということでFM-7でのみ使用してきました。
今回、FM-11用を作成する際にはそれを考慮してSDカード用の回路を取り除き、代わりに6850ACIAを用いた通信ポートを設けることにしました。RS232Cを持っている機種もありますが、別途通信ポートがあると便利な場合があると考えたからです。

実際にFM-11用を作成してみて、FM-7系にもあったら良いなと思えてきましたので、FM-7系用として32Pスロットに装着する形でのカードを作成しました。

これが作成したカードです。

FM-7用RTC_COMカード


いつものようにドジをしましたので、基板の修正(パターンカット1箇所、追加配線2本)が必要でしたが、修正して無事に動作しました。


裏面の修正箇所


回路図を示します。
上記の不具合を修正してあります。


回路図(修正済み)



(1)RTCモジュールのドライブソフト


ドライブソフト(RTC_RD2, RTC_WR2, RTC_SET2)はFM-11のF-Basic用に作成したものがそのまま使えます。RTCの時刻の読み出しにはRTC_RD2、RTCへの時刻の設定にはRTC_WR2、F-Basicへの時刻の転送にはRTC_SET2を使用します。

また、F-Basicと並んで良く使用しているOS-9Level2用にも同じ機能の3つのソフト(RtcRd2, RtcWr2, RtcSet2)を作成しました。実際には、F-Basic用に作成したものをOS-9用に移植したということですが、OS-9ではファイル名に「_」を使えないので名称も変更してあります。

F-Basicでの動作の様子は以前のブログで示していますので、ここではOS-9上での動作の様子を示します。
OS-9の起動直後は日付・時刻の設定がされていませんので(バッテリーが上がっている)、date t コマンドを実行するとデタラメな日付・時刻が表示されています。
ここでRtcWr2コマンドを実行して日付・時刻を設定します。このコマンドはRTCモジュールに設定すると同時にOS-9にも設定しますので、再度date tを実行すると設定した日付・時刻になっていることが確認できます。
(2000年問題に対処していないので2025年が1925年になっているのには笑えますが、実用上の不便はありません。)
 

RtcWr2の動作画面


一旦電源を落としてから再度起動すると、やはり日付・時刻がデタラメになっていますが、RTCモジュールはバッテリーバックアップされていますので、設定した値が保存されています。ここでRtcSet2コマンドを実行すると、RTCモジュールに保存されている日付・時刻がOS-9に設定されます。date tでそれが確認できます。



RtcSet2の動作画面


ということで、OS-9のStartupファイルにRtcSet2コマンドを書き込んでおけば、起動時にRTCモジュールの値でOS-9の日付・時刻を設定してくれます。

なお、RtcRd2コマンドは動作画面を示しませんが、RTCモジュールに設定された日付・時刻を読み出して表示するものです。


(2)ExCOM用通信ソフト


COMポートとして追加した6850ACIA(63C50を実装)用の通信ソフトですが、以前のブログにも書きましたが、何故かFT245、8251A、6850の3つの通信経路を一本のソフトで切り替えて使用する方法ではうまく動作しませんでしたので、FM側のソフトをそれぞれを単独のソフトとしFT245DRF(FT245用), FT245DRE(6850のExCOM用)の2本を作成しました。Windows側のソフトはFM-7/77/11に共通のft245drv.exeです。

FT245DRFは従来のソフトと同様ですので、ここではFT245DREの動作画面を示します。


FM側のFT245DREの動作画面(読み込み)



FM側のFT245DREの動作画面(書き込み)



Windows側のft245drv.exeの動作画面


なお、転送速度ですが、FT245カード使用では2Dディスクで1分弱、ExCOMでは5分ほどでしたので、ディスクイメージの転送に使用するのは実用的ではありませんが、このExCOMは以前からFlex9, F-Basic, OS-9, CP/Mで使用しているWindows上の仮想ドライブとのインターフェースに使用したいという目的のために実装したものです。
この場合には、ファイルの送受信が基本になりますので、ExCOMの38400baudでも十分に実用になることを体験しています。
ExCOMを使用したWindows上の仮想ドライブのドライブルーチンができましたら、改めて報告させていただきます。


2025年7月3日木曜日

FM-11用のRTC & COMカードが完成

 FM-11用のリアルタイムクロック(RTC)と拡張COMを作成しました

OS-9やFlex9の起動時には日付・時刻を入力する必要があり、結構面倒です。またF-Basicの場合にも、日付・時刻を必要とする場合には直接入力する必要があります。

ということで、FM-7用に作成してあったRTC_SDカードのRTC部をFM-11に移植することにしましたが、SDカード部を省いたために空いたスペースに68B50(ACIA)を増設して38400baudのCOMポートを増設しました。本体内蔵の8251A使用のCOMポートの通信速度が19200baudなので、その倍の速度のものが欲しかったということでもあります。

移植そのものはFM-11のコネクタに出ていないIOS信号の生成部を追加するだけで良いのですが、EB信号とQB信号が*EB, *QBと反転していることを見落としていたために最初は動作しませんでしたが、その点を修正することで正常に動作しました。(ということで、基板を再発注することになってしまいました。。。)

これが再発注した基板で完成させたRTC_ExCOMカードです。使用しているRTCモジュールはクロックタイムIC  DS3231を使用したZS-042というもので、5Vで動作するので使いやすいです。(バッテリーはCR2032なので充電回路部はカットしてあります。)これを68B21(PIA)を介してI2Cで制御しています。



RTC_ExCOMカード


回路図を示します。


RTC_ExCOM R1.1


まずはCOMポートのテストをしてみました。画像右端の6ピンコネクタからTTL-USB変換ケーブルを使用してWindowsPCに接続します。FT245カード用のドライブソフト(FM側、Windows側)を拡張して、FT245、内蔵COM(8251A)に加えて拡張COM(68B50)も使用できるようにして実行してみました。結果ですが、転送時間は内蔵COMポートの場合とほとんど変わりませんでした。ちょっとがっかりでした。

続いてRTCのテストをしました。FM-7用のドライブソフト(RTC_WR, RTC_RD, RTC_SET)はF-Basic3.0の内部ルーチンを使用していましたので、それをF-Basic5.0のDisplay Sub System中のSET TIMER, READ TIMERに置き換えました。また、FM-11の時刻関係のワークエリアが不明なので困っていましたが「Retro PC Gallery」(http://haserin09.la.coocan.jp/)のはせりん様から、FM-7と同じだと教えていただきましたので、無事にFM-11用のドライブソフトを完成させることができました。ありがとうございました。

作成したRTC_WR2, RTC_RD2, RTC_SET2はF-Basic5.0用の機械語プログラムで、RTC_WR2でZS-042に日付・時刻を設定し、RTC_RD2で設定されている値を読み込み・表示します。RTC_SET2はZS-042に設定されている値を読み込んでF-Basicのワークエリアに設定するもので、起動時に自動的に設定させたい場合にSTARTUPに書き込んで使用します。


参考までにRTC_WR2のアセンブルリストを示しておきます。68B21(PIA)のポートAを使用してI2CでDS3231をコントロールしています。68B21のポートAは入力に設定したままで出力もできるのでこのような入出力が同じポートで行なわれるような用途には適しています。


 


 
参考までに作成したRTC_WR2, RTC_RD2, RTC_SET2をOneDriveに上げておきます。
機械語プログラムでI2Cを使用するサンプルとしてみていただければと思います。