Arduino Nano 직렬 통신을 통해 직렬 장치와 통신 할 수 없습니다.
직렬 포트를 통해 RFID 리더와 통신하려고합니다. 직렬 포트에는 RS232 커넥터가 있습니다. 또한 Arduino를 사용하여 16x2 LCD 화면에 RFID 태그 ID를 표시하고 싶습니다.
따라서 저는 RS-232 to TTL 변환기를 구입했습니다 (아래 참조).

리더의 RS-232 케이블을 변환기 (남성-남성 RS-232 케이블)로 연결 한 다음 Arduino Nano에 연결했습니다. 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 케이블 (male to male RS-232 케이블)을 조사한 후 DCD (Data Carrier Detect)와 RS-232의 RX 핀이 단락 된 것을 발견했습니다 (멀티 미터의 연속성 테스터로 테스트했습니다). 이것이 데이터가 표시되지 않은 이유일까요?
최신 정보:



답변
여기에는 여러 가지 실패 지점이있을 가능성이 높습니다.
우선 RS232 to TTL 변환기 TX 핀은 RS232 송신기의 입력이므로 TX 입력은 Arduino의 TX 출력 핀에 연결되어야합니다. 마찬가지로 컨버터 RX 핀은 RS232 수신기의 출력이므로 Arduino RX 입력 핀에 연결해야합니다.
RS232 to TTL 변환기 DE-9 커넥터는 다른 DCE와 같은 암형이므로 핀 2는 RS232 TX 출력이고 핀 3은 RS232 RX 입력이며 케이블을 통해 직접 DTE에 직접 연결됩니다. PC. 따라서 DCE가 리더와 같은 다른 DCE에 연결되면 한 장치의 TXD를 다른 장치의 RXD에 연결하기 위해 크로스 오버 널 모뎀 케이블이 필요합니다. 어댑터는 직접 연결되어 작동하지 않습니다.
마지막 문제는 Arduino가 16MHz 클럭에서 실행된다는 것입니다. 또한 시계는 크리스털이 아닌 덜 정밀한 세라믹 공진기에서 나온다. 초기에는 약 0.5 % 정도만 정확하고 온도에 따라 약 1 %까지 편차가있을 수있다.
이제 softwareserial이 어떻게 작동하는지 자세히 알지 못하지만 프로그램이 수행하는 다른 작업에 따라 115200 속도로 안정적으로 실행되는 데 문제가있을 수 있습니다. 하드웨어 UART를 사용하더라도 16MHz 클럭은 속도 오류의 2 % 미만의 115200 보오율을 허용하지 않고 세라믹 공진기 오류를 추가하기 때문에 큰 도움이되지 않습니다. 115200에서 작동합니다. 제안 된 최대 오류율은 2 % 이내입니다.
컨버터 헤더의 RXD 는 MAX3232의 핀 R1 OUT 에 연결됩니다 . 그것은 출력이며 Arduino의 RX 입력에 연결되어야합니다. 마찬가지로 TXD 핀은 Arduino의 TX 출력에 연결되어야합니다.
두 RS232 포트 모두 DCE 유선 일 수 있으므로 두 포트를 연결하려면 널 모뎀 케이블 / 어댑터가 필요할 수도 있습니다.
다음 중 하나를 시도하십시오.
Arduino와 변환기가 동일한 GND를 공유하는지 확인하십시오.
올바른 COM 포트를 선택했는지 확인하십시오.
스케치 설정에서 올바른 보드를 선택했는지 확인하십시오.
프로그래머가 보드에 적합한 지 확인하십시오. "일반적으로 (ArduinoISP)"
115200 보드에서 실행되도록 소프트웨어 직렬 포트를 요청합니다. 소프트웨어 직렬 포트가 안정적으로 작동하기에는 너무 빠르다고 생각합니다. 배선을 확인하기 위해 9600 보드에서 시도하십시오.