Arduino Uno, caracteres extraños enviados a COM (Serie de software)

6

Estoy intentando enviar caracteres ASCII desde Arduino UNO a un puerto serie de computadora. Estoy usando un cable con un conector COM macho, conectado al puerto serie de la computadora, y tres cables (TX, RX y tierra) en el lado de Arduino. Usé los pines 12, 13 y Gnd como se muestra en la imagen:

Yestoyejecutandoestefragmentodecódigoparaenviarunacadenacadasegundoenelpuertoserie:

#include<SoftwareSerial.h>SoftwareSerialmySerial(13,12);//RX,TXvoidsetup(){mySerial.begin(9600);}voidloop(){mySerial.println("Hello world");
  delay(1000);
}

Pero, cuando leo ese puerto (a la velocidad correcta de 9600), en lugar de "Hola mundo", obtengo caracteres extraños en su lugar:

Penséquehabíaestablecidoelpinerróneamente,asíquecambiéRXconTX,peroobtengounasalidadiferenteperoaúnincorrecta:

¿Qué estoy haciendo mal?

    
pregunta etuardu

2 respuestas

9

El Arduino UART produce señales de nivel TTL, es decir, 5V para alta y 0V para baja. El puerto RS232 de una PC espera voltajes RS232 completos, que pueden ser de -9 V a +9 V y se invierten.

Utilice un adaptador serie TTL (como los de FTDI) para conectarse a la PC. O use un convertidor de nivel como el MAX232.

    
respondido por el Toby Jaffey
7

Al igual que Toby dice que necesita un transceptor EIA-232 (el nombre RS-232 es obsoleto). El UART de Arduino emitirá +5 V cuando está inactivo y para un "1" lógico, y 0 V para un "0" lógico. EIA-232 funciona con niveles invertidos, por lo que el +5 V se convierte típicamente en -12 V, y el 0 V se convierte en +12 V.

Si conecta el UART directamente al puerto EIA-232 de la PC, puede ver el +5 V como un valor bajo, pero el 0 V no estará definido, por lo que puede interpretar sus datos de cualquier manera .

Pero los datos recibidos son un problema mucho más grande, y muy tiene suerte de que los pines de E / S del AVR tengan diodos de protección:

LalíneaRxDdelaPCserá-12Vcuandoestéinactiva,y+12Vcuandoestéenviandoun"0" lógico. Ambos niveles están way más allá de los valores máximos permitidos para el AVR, pero los diodos los sujetarán, y la corriente limitada de la unidad desde el EIA-232 de la PC será menor que el máximo permitido de 40 mA. Sin los diodos de protección, es muy probable que ese pin de E / S (y quizás más) se dañe.

    
respondido por el stevenvh

Lea otras preguntas en las etiquetas