ArduinoNanoシリアル通信を介してシリアルデバイスと通信できません

Aug 21 2020

シリアルポートを介してRFIDリーダーと通信しようとしています。シリアルポートにはRS232コネクタがあります。また、Arduinoを使用してRFIDタグIDを16x2LCD画面に表示したいと思います。

そのため、RS-232からTTLへのコンバーターを購入しました(以下を参照)。

リーダーからコンバーターへのRS-232ケーブル(オスからオスへのRS-232ケーブル)を接続し、次にArduinoNanoに接続しました。TX(RS-232コンバーター)をRX(Arduino)に接続し、RX(RS-232コンバーター)をTX(Arduino)に接続しました。

簡単なスケッチをアップロードした後:

#include <SoftwareSerial.h>

SoftwareSerial mySerial(5, 6); // RX, TX

void setup() {
 // Open serial communications and wait for port to open:
 Serial.begin(115200);
 while (!Serial) {
 ; // wait for serial port to connect. Needed for native USB port only
 }

 // set the data rate for the SoftwareSerial port
 mySerial.begin(115200);
}

void loop() { // run over and over
 if (mySerial.available()) {
 Serial.write(mySerial.read());
 }
 if (Serial.available()) {
 mySerial.write(Serial.read());
 }
}

コードは私のものではなく、Arduinoのスケッチの例です。ボーレートをRFIDリーダーの設定(115200)に従って設定しました。

すべてを接続した後、シリアルモニターを開いて、正しいボーレートを設定しました。ただし、情報はモニターに送信されませんでした。USBコネクタへのシリアルも入手しました。このケーブルをリーダーに接続してから、PCのUSB入力(Arduinoなし)に接続しました。このケーブルでシリアル接続をテストし、シリアルモニターを開いて、COMポートとボーレートを設定しました。シリアルモニターが正しいデータを表示し始めました。

RS-232ケーブル(オス-オスRS-232ケーブル)を調べた後、DCD(データキャリア検出)に気づき、RS-232のRXピンが短絡しました(マルチメーターの導通テスターでテストしました)。これがデータが表示されない理由でしょうか?

更新:

回答

2 Justme Aug 22 2020 at 04:21

ここには複数の障害点がある可能性があります。

まず、RS232からTTLへのコンバーターのTXピンはRS232トランスミッターの入力であるため、TX入力はArduinoのTX出力ピンに接続する必要があります。同様に、コンバータのRXピンはRS232レシーバからの出力であるため、ArduinoRX入力ピンに接続する必要があります。

RS232からTTLへのコンバーターDE-9コネクターは他のDCEと同様にメスであるため、ピン2はRS232 TX出力、ピン3はRS232 RX入力であり、ストレートケーブルでDTEに直接接続することを目的としています。 PC。したがって、DCEがリーダーなどの別のDCEに接続されている場合、あるデバイスのTXDを別のデバイスのRXDに接続するには、クロスオーバーヌルモデムケーブルが必要であることを意味します。単にアダプタが直接接続され、機能しません。

そして最後の問題は、Arduinoが16MHzのクロックで動作していることです。また、時計は水晶からではなく、精度の低いセラミック共振子であり、最初は約0.5%の精度しかなく、温度によって約1%までずれることがあります。

さて、ソフトウェアシリアルがどのように機能するかについての詳細はわかりませんが、プログラムが他に何をするかによっては、115200レートで確実に実行するのに問題があるかもしれません。ハードウェアUARTを使用しても、16 MHzクロックでは115200ボーレートがレートのエラーの2%未満になることはなく、セラミック共振子エラーを追加すると、エラーが非常に大きくなり、エラーが発生しないため、あまり役に立ちません。 115200で動作します。推奨される最大エラー率は2%以内です。

mbedded Aug 21 2020 at 05:56

ピンR1コンバータヘッダコネクトにRXD OUTそのMAX3232に、これは出力であり、ArduinoのRX入力に接続する必要があります。同様に、TXDピンはArduinoのTX出力に接続する必要があります。

両方のRS232ポートもDCE配線されている可能性があるため、2つを接続するためにヌルモデムケーブル/アダプターが必要になる場合もあります。

AhmedM.Zahran Aug 21 2020 at 06:08

次のいずれかを試してください。

Arduinoとコンバーターが同じGNDを共有していることを確認してください。

正しいCOMポートを選択していることを確認してください。

スケッチ設定で正しいボードを選択したことを確認してください。

プログラマーがあなたのボードに適していることを確認してください「通常はその(ArduinoISP)」

ElliotAlderson Aug 21 2020 at 06:51

ソフトウェアのシリアルポートに115200ボーで実行するように要求しています。これは、ソフトウェアのシリアルポートが確実に機能するには速すぎると思います。配線を確認するためだけに9600ボーで試してみてください。