2012年11月29日

RS232Cボードを動かす(1)について


  だいぶ前の記述ですが、『RS232Cボードを動かす(1)』のデータ送信の項目が間違っていました。


>>・データ送信
>>
>> DSR=on 、TxEMPTY=1、TxRDY=1 になるまで待つ。その後、データを出力する。
>>
>> DSR は、相手の端末の準備が完了している時は、on になっています(DTR=on として出力される)。
>> TxEMPTY は、送信するデータがない時(つまりデータを送信したい時)に1になります。
>> TxRDY は、CTS がon の時に1になります。
>>
>>
>> 結局、速度に関係なく、データが出力できる時には出力します。


  以下が正解のようです。


・データ送信

 DSR=on 、TxRDY=1 になるまで待つ。その後、データを出力する。

 DSR は、相手の端末の準備が完了している時は、on になっています(DTR=on として出力される)。
 TxEMPTY は、送信するデータが全くない時に1になります。
 TxRDY は、送信するデータの入力が可能になった時に1になります。


 CPUからは、TxRDY が1になった時にデータを書き込めばいいことになります。
 また、TxEMPTY が1になるときは、送信データに隙間が出来ているときです。


  以上のように訂正します。


  また、RS232C の確認用のプログラムですが、まだいろいろとバグがあるようです。現在修正中です。



posted by えすび at 23:27| Comment(0) | HW:RS232Cボード | このブログの読者になる | 更新情報をチェックする

2012年11月25日

RS232Cボードを動かす(8)の追記

  追記です。

  SR で動かすと、122880bps の受信ができませんでした(MSM82C51、uPD71051とも)。

  システムクロックが、7.9872MHz から、7.15909 MHz に変わったのが原因じゃないかと思います、多分。

posted by えすび at 21:15| Comment(0) | HW:RS232Cボード | このブログの読者になる | 更新情報をチェックする

RS232Cボードを動かす(8)

  作成したRS-232Cボードに搭載した 8251/71051 ですが、オーバースペックで使っても動くようです。


  チップの仕様の一部を以下に示します。

・MSM82C51
システムクロック:最大6.25MHz
Tx/Rxクロック(1/16、1/64モード時):最大615KHz
(なおかつ、システムクロックがTx/Rxクロックの5倍以上)
非同期モード時通信ボーレート:最大38.4Kbps(1/16、1/64モード時)


・uPD71051
システムクロック:最大8MHz
Tx/Rxクロック(1/16、1/64モード時):最大1536KHz
(なおかつ、システムクロックがTx/Rxクロックの4.5倍以上)
非同期モード時通信ボーレート:最大96Kbps(1/16モード時)
非同期モード時通信ボーレート:最大24Kbps(1/64モード時)


  仕様は上記のようなのですが、実際はもっと高速に動くようです。

  確認に使ったのは、前のソフトを一部変更したものです。

rs232c_4.zip


  メニューに quick recieve というのを追加しました(ヘンな英語ですが)。

  通常の recieve とほぼ同じですが、以下を変更しています。

  ・バスリクエストをOFFにしています(そのため、画面が砂嵐になります)。
  ・RTS のチェックをしていません。
  ・可能な限り高速動作にした...つもりです。


  通常の recieve だと、受信は38400 bps までしか受信できません。
  多分、バスリクエストで停止期間があるのが問題だと思います。

  quick recieve を使うと、122880 bps まで受信を確認できました。
  この時、Rx クロックは、19.6608MHz の10分周クロックを入力していて、1/16 の設定になっています。
  上記で挙げた両チップの仕様からは、オーバーしていることが分かるとと思います。


  153600bps (19.6608MHz の8分周クロックで1/16)では、受信ができませんでした。
  調べてみると8251側の問題ではなくて、送信側がちゃんと出力できていないようでした。

  ロジアナで確認してみると、ボード上の分周クロックで数えると、受信データのパルス幅が15クロック分になっていました。
  USBーRS232C変換コネクタを使っているので、この辺りが限界かも知れません。
  (でもなぜか、送信側は問題ないんだよなぁ...)


  うちにある他のRS-232Cボードは、出力できる最高ボーレートが 115200bps なのでこれ以上は未調査ですが、もうちょっと高速まで動きそうな気がします。



posted by えすび at 16:40| Comment(0) | HW:RS232Cボード | このブログの読者になる | 更新情報をチェックする

RS232Cボードを動かす(7)

  RS-232Cボードですが、いろいろと情報をもらったので、作り直しました。

  結局、ボーレート切り替えは手動のままです。


  今回作成したボードの回路図その1です。

RS232Cボード回路図そ

の1


  uPD71051 が入手できたので使用しました(若松通商で通販)。
  DIPだとピンコンパチだったんですが、あいにくQFP でした。

  また、19.6608MHz の水晶発信器が処分価格(200円)だったので、それを使用しています。

  水晶発振子なら 19.6608MHz は入手しやすいようです(水晶発信器は、入手難か、あっても高い)。

  発信器が使えるなら、余計な部品が要らなくなるので、組み立てがラクになります。

  また、分周回路は、(1〜256)×(2、4、8、16)分周の回路にしました。


  実際に実装したのがこれです。

RS232Cボード1表

RS232Cボード1裏


  PC-6001用にしたので、若干基板のサイズが大きいです。
  ですが、実装的にはギリギリです。




  今回作成した別のボードの回路図その2です。

RS232Cボード回路図2


  こちらは、MSM82C51A を使っています。

  実はシステムクロックが仕様外ですが、問題なく動いているようです。温度が上がるとダメになる可能性はありますが。

  こちらも、19.6608MHz の水晶発振子で、分周回路は、(1〜16)×(2、4、8、16)分周です。
  このスペックで、考えていたスペックが大体出せます(1200bps未満には出来ませんが)。


  実際に実装したのがこれです。

RS232Cボード2表

RS232Cボード2裏


  まあまあ詰まってる感じです。


  ついでに、コネクタを止めている金具も変更しました。
  前の金具は、長さがぎりぎりだったので、ちゃんと止まっていなかったので、プラスティックで自作しました。

コネクタ止め具


  100円ショップで下敷きを買ってきて、ハサミで適当な大きさに切って、穴を開けています。

  ちょっと薄いので、2枚重ねて使っています。




posted by えすび at 16:00| Comment(0) | HW:RS232Cボード | このブログの読者になる | 更新情報をチェックする

2012年11月03日

RS232Cボードを動かす(5)

  AVR を使ってみました。

  いろいろと調べてかなりいろいろと試したんですが...結論は AVR では無理でした。
  1チップマイコンなので、高速動作が苦手なようです。

  P6 から出力される、4MHz の2.5クロック幅のnCS、nRD、nWR に対して、データを出力する事ができませんでした。

  16MHz動作のAVR なので、10クロック分ぐらいしかないため、かなりきついようです。



  前の書き込みの、ボーレートをS/Wから設定できる回路図は、一部間違いがありました。

  D5 からLS10 に入力している信号がありますが、D6 から入力するのが正解です。

  また、回路を組んだ時に併せて修正します(他に間違いがあるかも知れないので)。


posted by えすび at 08:42| Comment(7) | HW:RS232Cボード | このブログの読者になる | 更新情報をチェックする

2012年10月26日

RS232Cボードを動かす(4)

 先のRS232C のボーレートを切り替える回路を作りました。


RS232C回路図その2


 仕様としては、以下の通りです。

1)リセット時のボーレートは、ジャンパで決定される。
2)S/W からボーレートを変更するためには、8251 へのリセットコマンドの後に、データ送信としてボーレートを書き込む。
3)ボーレートが書き込まれない時は、ジャンパで設定されているボーレートが設定される。


2)は、言葉で書くとややこしいですが、S/W では以下の通りです。

OUT 81H,52H ; 8251 のリセット
OUT 80H,xxx ; ボーレートの設定
OUT 81H,4FH ; 8251 の動作モードの設定(スタートビットやパリティなどの設定)

 通常は、リセット後にポート80H に出力されないため、普通のボードとコンパチで使えます。



 ・・・ここまで回路を書いて、組み立てる前に念の為シミュレーションをして、多分問題ない事は確認しました。

 組み立てるために部品を買い終わってから、ふと思った事。


 『PIC や AVR を使えば簡単なのでは』



  PIC も AVR も使った事はありません。
  ただ、上の回路を組み立てるのも結構大変です。

  これを機に AVR を使ってみようかと思い、ボードを買いました。


  まだ結果が出てませんので、また後日報告します。


posted by えすび at 19:16| Comment(8) | HW:RS232Cボード | このブログの読者になる | 更新情報をチェックする

2012年10月20日

RS232Cボードの製作(4)

  SR用のRS232Cボードの回路図です。

RS232C回路図(SR用)

  親基板からのクロックが 4MHz系ではないため、分周しても4800bps のクロックがうまく作れません。
  仕方がないので、RS232Cボード上に、16MHz の発信器と周辺回路を載せました。
  この発信回路は、P6、mk2、66で使われている回路と同じものです。発信周波数が 15.9744MHz ではなく 16MHz になっていますが、そんなに問題になりません。


  ボーレートは、600bps以下は実現していません。74LS161 を追加すれば実現は可能ですが、多分使わないかなーと。
  また、74LS00 を使っていた箇所を 74LS04 にしました。特に NAND が必要ではなかったので、INV に変更しただけです。


  上記の仕様変更の結果、搭載するICの個数はそのままにできました。水晶振動子などが若干増えていますが、そこまで場所は取らないかと思います。

  基板の固定方法などは、mk2と同じで実現可能です。ただ、もう少し長い基板でもいいみたいですが。




posted by えすび at 09:38| Comment(4) | HW:RS232Cボード | このブログの読者になる | 更新情報をチェックする

RS232Cボードの製作(3)

  先に書いたRS232Cボードですが、SRでは使えません。理由はクロックの周波数が違うからです。コネクタに入力されているクロックが4MHz系ではなく、3.58MHz系になっているためです。

  SRに関しては、また別の機会にアップします。

  P6の方ですが、電気的には先の回路をそのまま作ればいいのですが、実際に工作をすると結構問題が発生します。


1)P6初代機とmk2 では、内部の構造が違うために、許容される基板の大きさが違う。

 これに関しては、P6初代機とmk2 で作り変える必要があります。今回はとりあえずmk2用として作りました。


2)RS-232Cのコネクタ(Dsub 25pin)をユニバーサル基板に載せるのが難しい。

 基板を起こせばいいんですが、いろいろ大変なので、無理やりユニバーサル基板に載せました。
 要するにDsubコネクタが何とかなればいいので。


Dsub25pinコネクタ(1)

 このDsubコネクタを使いました。足の部分が上に曲げられるので、上に曲げて基板上に載せました。


Dsub25pinコネクタ(2)

 半田付け前の写真です。微妙に基板の穴のピッチとずれています。
 RS-232C で使用するピンは、上側(1〜15)が殆どですので、足を曲げて使ってもそんなに問題になりません。


Dsub25pinコネクタ(3)

 基板に穴を開けて、コネクタを止める爪を無理やり折り曲げて固定します。


Dsub25pinコネクタ(4)

 半田付け後です。真ん中が空いているのは、ピッチがずれているせいです。


3)mk2 では基板を支える箇所がない。

 これについては仕方がないので、Dsubコネクタを本体に固定する事にしました。


Dsub25pinコネクタ止め具

 こんなL字金具が売っていたので、それをまっすぐにして使いました。


Dsub25pinコネクタ(5)

 金具をDsubに取り付けた所です。
 この金具をRS-232Cの横の穴(プラスティック板が止められていた穴)にネジ止めします。
 ちょっと短いんですが、何とか固定できています。


4)P6、mk2の基板上に合うコネクタがない。

 10pin、12pin が必要になるんですが、このコネクタに合う物が入手できません。
 仕方がないので、QIコネクタというもので代用しました。


QIコネクタ

 これがQIコネクタです。12pin がなかったので、6pin ×2で使います。


 実際に組み立てて、完成した基板です。

RS232Cボード表

RS232Cボード裏

 ボーレートの切り替えには。ジャンパピンを使っています。切り替えるのに、いちいち本体の蓋を開ける必要があるので、かなり面倒ですが...


 テストでは、とりあえずPRINT#-2、INPUT#-2 で他のパソコンと入出力が出来ることだけを確かめました。
 ファイルの転送とかをしてみないと、たまにデータ落ちとかしている可能性はあります。

 ボーレートですが、300〜4800bps までは動作します(元のボードの仕様範囲内)。

 9600bps、150bps はBASIC では動作しません。

 9600bps以上は何か工夫が必要かなー、と調べているところです。


posted by えすび at 09:07| Comment(0) | HW:RS232Cボード | このブログの読者になる | 更新情報をチェックする

2012年10月14日

RS232Cボードの製作(2)

  P6用のRS232Cボードの回路ですが、西田さんのHP(西田ラヂオ)にあった回路を参考に、問題がありそうな箇所を修正しました。
 


RS232C回路図

  これが回路図です。8251 の周りに必要な回路を付けているだけの単純な回路です。

  8251 は、今回は沖電気の MSM82C51 を使っていますが、東芝のTMP82C51 など、5V で動作するものならどれでも構いません。
  8251 は、現在入手が困難だと思います。私はオークションで購入しました(5個で500円)。

  ADM3202 は、RS-232C の電圧と5Vを変換するためだけのデバイスです。MAX232 とか、SP3232 とか、各社から発売されていますので、安いものを使うといいでしょう。ただし、この際、5Vで動作するものを選ぶ必要があります。また、チャージポンプ用のコンデンサの値が違う時があるので注意が必要です。さらに、SP3232 を使う時は、若干回路が違うようです。

  今回、0.1uF の電解コンデンサを使っていますが、0.1uF〜10uF までOKなようです(ADM3202の場合)。

  74LS161 は、シリアルデータの送受信クロックを作っています。TxC/RxC に入力されているクロックの1/64 が、送受信に使うクロックになります(PC-6001 BASIC の設定値)。

  前段の 74LS161 で、1/2/4/8/16 分周し、後段の 74LS161 で 13分周しています。ここでは74LS161 を使っていますが、74LS163 でも構いません。


  電気的には、8251 が入手できれば、作るのは難しくないかと思います。




posted by えすび at 21:35| Comment(0) | HW:RS232Cボード | このブログの読者になる | 更新情報をチェックする

2012年10月13日

RS232Cボードの製作(1)

  P6用のRS232Cボードを作る事にしました。
  きっかけは、日本橋に行った時、何となく買ったUSB-RS232C インタフェースの変換ケーブルを買ったためです。

  これで今のパソコンとP6とのデータのやり取りが簡単になるかと思いました。

  で、USB-RS232C の変換ケーブルは安物を買ったんですが、これがヒドい。

  サポートがないのはまだいいとして、ドライバをHPからダウンロードして使ったんですが、エラーばっかりでまともに使えません。

  ドライバのバージョンがすごく古かったので、いろいろ探してみると、変換チップ(PL2303)メーカーのHPに新しいドライバがありました。で、ドライバを使うと、今度はUSBが全然認識しない。

  ドライバに付いていたドキュメントを読んでみると、『中国から粗悪なコピー品が出回っていて、そのコピー品だと認識しない』との事。


  何だかなー、って感じです。


  結局、いろいろ調べて、別のよさそうな物を買いました。4000円ほどしましたが...

  ラトックという知らないメーカーでしたが、外箱を見る限り、よさそうな感じだったので、これにしました。変換チップは、FTDI のようです。

  使ってみると、全く問題はなく使えました。当たり前なんですけどねー。


posted by えすび at 22:07| Comment(2) | HW:RS232Cボード | このブログの読者になる | 更新情報をチェックする