日々の記録

ほどよく書いてきます。

RS232CレベルとTTLレベルコンバーター MAX3232

2023年05月09日 23時04分18秒 | AVR

MAX3232というICがある。チャージポンプ回路を内蔵し、TTLレベルから真のRS232Cレベルに変換してくれるIC!!

ナイス!名前からしてマキシム・インテグレーテッドだろうとおもったら、Analog Devicesが買収していた。リニアテクノロジーもまさかの買収されたとおもったら、こっちもか。

さて、それはおいておき、このMAX3232を搭載したものが非常に安価で販売されている。

RS232Cコネクタ付いて48円??え?

Amazonでも5個で750円?

 

買ったのだが、買ってから気がついた、これメスコネクタ?装置はオスコネクタで、えーっと?クロスケーブルがいいのかストレートケーブルがいいのか判断できないぞ?ちょっと配線図を確認しないといけないですね。

かk人すると、、、ICのレシーバーRXが3ピン、トランスミッターTXが2ピンという配置のようだ。

今回ターゲットにしている電子天秤はA&Dのものなので、、例えばGH-252の取説を見ると2が、ん?Rxが送信データ?ん?レシーバーでRx、トランスミッタでTxだとおもったが、どうなってるんだろう?接続相手の配線を書いているのだと思うのだが・・・また検討しようと思います。



コメント (11)    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« Arduino Pro MicroでUSB-HID... | トップ | CH9329 Serial HID変換IC »

11 コメント

コメント日が  古い順  |   新しい順
Unknown (いち)
2023-05-10 01:31:55
私の時代はRS232C全盛期で、機器間の接続はこればかりでした。
一対一の接続仕様ですから、パソコン側が出力の端子は、端末側は入力となります。
同じ端子記号を使うので、入出力を勘違いしないように気をつけます。

この場合は同じ端子番号同士を接続するストレートケーブルとなります。

特別な利用として、クロスケーブルを使って、パソコン同士のデータ転送に使うこともできます。
出力端子を相手の受信端子に接続するのでクロスケーブルといいます。
データ端子以外に、データのタイミングをとるRTS-CTSや、受付け許可をとるDTS-RTSがありまが、データ一時待機を必要としなければ、データのTXDとRXDのみの接続で行うことが可能です。
返信する
Unknown (いち)
2023-05-10 01:39:46
すみません。訂正

受付け許可をとるDTS-RTS

受付け許可をとるDTR-DSR
返信する
Unknown (まこち)
2023-05-14 12:41:16
RS232Cからのデータ受信は一方的に流れてくるデータを受信するだけなので、装置側はTX端子、マイコン側はRX端子だけでいいかなと思いつつあります。

レベルシフタも双方向じゃないので、抵抗とダイオードで電源とGNDにクリップさせるような方式が簡単でいいのかなと思っています。

買ってきたMAX3232は発熱が結構大きくてあれ?って思っています。2kΩのプルダウンが結構聴いてるのかな。
返信する
Unknown (いち)
2023-05-14 23:43:27
端末からの受信のみならMAX232使うのはもったいないですね。
ダイオードクリップで十分だと思いますが、信号がインバートですので、トランジスタやゲートインバータで反転させるか、ワンチップマイコンのシリアルI/Oに入力反転の設定ができるならOKです。
ワンチップマイコンのシリアルI/Oは1バイト分のバッファしかもたないので、プログラムの処理が間に合わない場合は、割り込みを使ってバッファ機能を入れる必要があります。
パソコンで受信するなら、すでにOSにバッファリング機能があるので問題ないですが、バッファ容量を超えるまで放おっておくとエラーします。
マイコンチップでバッファリングできない場合は、RTS-CTSハンドシェイクで、相手に送信待ちを要求すれば問題解決できる場合があります。
返信する
Unknown (いち)
2023-05-14 23:51:01
そうそう、装置側の送信は記号がRXじゃないかと思いますが、確認を。
返信する
Unknown (いち)
2023-05-15 15:32:56
MAX232が触って熱を感じる程だと、もしかして出力同士を誤接続してしまっている可能性があるかも。
端末側の記号は入出力が逆表示なので勘違いに注意です。
返信する
バッファリング (いち)
2023-05-15 20:25:32
RS232Cの通信は非同期式ですから、決められたクロック周期によって1バイト単位で送られてきます。
RTSで送信停止要求をしない限り、送信側の都合でどんどん送られてくるので、受信漏れが無いようにしなければいけません。
シリアルデータをシフトレジスタで、1バイトのデータに変換する、シリアルI/Oを利用します。
ところが、シリアルI/Oは、1バイトの受信バッファしか持たないため、9600bpsの場合、約100uS以内にバッファデータを読まないと次のデータを取り込めなくなります。
バッファーに1バイトのデータが入ると割り込み要求してくるので、割り込みによって数百バイト程度のリングバッファにデータを一時退避させるように割り込み処理をプログラムします。
RAMに設定した容量の作業エリアを確保し、最大アドレスになったら、また先頭からの先読み後出しとするリングバッファを組みます。
メインプログラムがデータを読み出すには、最終データアドレスから1バイトづつ読みだしていきます。
実際にはもっといろいろ細かな構造が必要ですが、独自にPICマイコン用に割り込みプログラムを完成させて使っています。
通信エラーもなく快調に動作します。(^_-)-☆
返信する
日本語の間違い (いち)
2023-05-15 21:37:46
ん?、データは、先読み先出しですね。
食品在庫と同じで、新しいものを仕入れて古いものから使うです。(^^;
返信する
2400baud (まこち)
2023-05-17 22:27:06
ボーレートは電子天秤の場合2400baudなので400usほどの余裕があります。

Arduinoのプログラムだと受信完了のフラグが立ったら一旦内容をメモリにコピーしますので、16MHzで数クロックなら、サブusくらいで処理が終わるかと思っています。

本来ならシリアルインターフェースの回路、受信完了したら割り込みイベント発生できるはずなので、その割り込みで処理をしておくのが効率いいかなと思っていますが、受信待っている間に処理するメニューがありませんので、ひたすらポーリングでバッファ溜まった?のループでやっています。

文字列処理は面倒なので、RS232Cで7ビットのキャラクター受信したら、即時キーボード信号でPCに送信して処理なので、今気になっているのはキーボード信号1文字の送出にどれくらい時間が必要かといったところです。
返信する
Unknown (いち)
2023-05-19 22:09:03
入力データをそのまま吐き出すだけなら、バッファに入力さたフラグに間に合いそうですね。
それと、9600bpsの転送速度は通常1mSでした。すみません。
2400bpsで7bitなら、S1,Data,E1で9bitなので1文字あたり、3.7mSの余裕がありますね。
ただ、送信もRS232Cを使って、同じボーレートだと、送信バッファが空になるまで受信と同じ時間がかかるので、バッファ無しだと難しいかも。
でも、送信はHIDみたいなので問題ないかな?
返信する

コメントを投稿

AVR」カテゴリの最新記事