Impossibile comunicare con il dispositivo seriale tramite una comunicazione seriale Arduino Nano
Sto cercando di comunicare con un lettore RFID tramite la sua porta seriale. La porta seriale ha un connettore RS232 su di essa. Voglio anche visualizzare l'ID dei tag RFID su uno schermo LCD 16x2 utilizzando un Arduino.
Pertanto, ho acquistato un convertitore da RS-232 a TTL (mostrato sotto).

Ho collegato un cavo RS-232 dal lettore al convertitore (cavo RS-232 maschio-maschio) e quindi al mio Arduino Nano. Ho collegato TX (convertitore RS-232) a RX (Arduino) e RX (convertitore RS-232) a TX (Arduino).
Dopo aver caricato un semplice schizzo:
#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());
}
}
Il codice non è mio, è uno schizzo di esempio da Arduino. Ho impostato la velocità di trasmissione in base alle impostazioni del lettore RFID, che era 115200.
Dopo aver collegato tutto, ho quindi aperto il monitor seriale e impostato il baud rate corretto. Tuttavia, nessuna informazione è stata inviata al monitor. Ho anche una seriale per il connettore USB. Ho collegato questo cavo al lettore e quindi all'ingresso USB del mio PC (no Arduino). Ho testato la connessione seriale con questo cavo e ho aperto il monitor seriale, impostato la porta COM e il baud rate. Il monitor seriale ha iniziato a visualizzare i dati corretti.
Dopo aver esaminato il cavo RS-232 (cavo RS-232 maschio-maschio) ho notato che il DCD (Data Carrier Detect) e il pin RX dell'RS-232 era in corto (ho provato con il tester di continuità del mio multimetro). Potrebbe essere questo il motivo per cui non sono stati visualizzati dati?
Aggiornare:



Risposte
Molto probabilmente ci sono più punti di errore qui.
Prima di tutto, il pin TX del convertitore da RS232 a TTL è un ingresso per il trasmettitore RS232, quindi l'ingresso TX deve essere collegato al pin di uscita TX di Arduino. Allo stesso modo, il pin RX del convertitore è un'uscita dal ricevitore RS232, quindi deve essere collegato al pin di ingresso RX di Arduino.
Il connettore DE-9 del convertitore da RS232 a TTL è una femmina come qualsiasi altro DCE, quindi il pin 2 è l'uscita TX RS232 e il pin 3 è l'ingresso RX RS232 ed è pensato per essere collegato direttamente con un cavo diretto a un DTE simile un PC. Quindi, quando un DCE è collegato a un altro DCE come il lettore, significa che è necessario un cavo null-modem crossover, per collegare il TXD di un dispositivo all'RXD di un altro dispositivo. Semplicemente un adattatore avrà una connessione diretta e non funzionerà.
Quindi il problema finale è che Arduino funziona con un clock di 16 MHz. Inoltre, l'orologio non proviene da un cristallo, ma da un risonatore ceramico meno preciso, che inizialmente è accurato solo allo 0,5% circa e può deviare con la temperatura fino all'1% circa.
Ora, non conosco i dettagli su come funziona il software seriale, ma a seconda di quali altre cose fa il programma, potrebbe avere problemi a funzionare in modo affidabile alla velocità di 115200. Anche l'utilizzo dell'hardware UART non sarà di grande aiuto, poiché il clock a 16 MHz non consente una velocità di trasmissione di 115200 inferiore al 2% di errore nella velocità e aggiungendo l'errore del risonatore ceramico, potrebbe causare un errore così grande che non lo fa lavorare a 115200. Il tasso di errore massimo suggerito è entro il 2%.
RXD sull'intestazione del convertitore si collega al pin R1 OUT sul suo MAX3232; è un'uscita e dovrebbe essere collegata all'ingresso RX di Arduino. Allo stesso modo, il pin TXD dovrebbe essere collegato all'uscita TX di Arduino.
Entrambe le porte RS232 possono anche essere cablate DCE, quindi potrebbe essere necessario anche un cavo / adattatore Null Modem per collegare le due.
Prova uno dei seguenti:
Assicurati che Arduino e il convertitore condividano lo stesso GND.
Assicurati di aver scelto la porta COM corretta.
Assicurati di aver scelto la scheda corretta nella configurazione dello schizzo.
Assicurati che il programmatore sia adatto alla tua scheda "Di solito è (ArduinoISP)"
Stai chiedendo a una porta seriale del software di funzionare a 115200 baud. Penso che sia troppo veloce perché una porta seriale del software funzioni in modo affidabile. Provalo a 9600 baud solo per controllare il cablaggio.