6 votos

Arduino Uno, caracteres extraños enviados a COM (SoftwareSerial)

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

Arduino and COM interface

Y estoy ejecutando este trozo de código para enviar una cadena cada segundo en el puerto serie:

#include <SoftwareSerial.h>

SoftwareSerial mySerial(13, 12); // RX, TX

void setup()  
{
  mySerial.begin(9600);
}

void loop()
{
  mySerial.println("Hello world");
  delay(1000);
}

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

enter image description here

Pensé que había configurado el pin erróneamente, así que cambié RX por TX, pero obtengo una salida diferente pero aún errónea:

enter image description here

¿Qué estoy haciendo mal?

10voto

letronje Puntos 128

La UART de Arduino produce señales de nivel TTL, es decir, 5V para los altos y 0V para los bajos. El puerto RS232 de un PC espera voltajes RS232 completos que pueden ser de -9V a +9V y están invertidos.

O bien utilizar un adaptador de serie de nivel TTL (como los de FTDI) para la interfaz con el PC. O utilizar un convertidor de nivel como el MAX232.

7voto

lillq Puntos 4161

Como dice Toby, necesitas un transceptor EIA-232 (el nombre RS-232 está obsoleto). La UART del Arduino dará una salida de +5 V cuando esté en reposo y para un "1" lógico, y 0 V para un "0" lógico. EIA-232 trabaja con niveles invertidos, por lo que los +5 V se convierten normalmente en -12 V, y los 0 V en +12 V.

Si conecta la UART directamente al puerto EIA-232 del PC, ésta puede ve el +5 V como un bajo, pero el 0 V será indefinido, por lo que puede interpretar sus datos de cualquier manera.

Pero los datos recibidos son un problema mucho mayor, y estás muy suerte que los pines de E/S del AVR tienen diodos de protección:

enter image description here

La línea RxD del PC será de -12 V cuando esté en reposo, y de +12 V cuando esté enviando un "0" lógico. Ambos niveles son camino más allá de los valores máximos permitidos para el regulador, pero los diodos los bloquearán, y la corriente de accionamiento limitada del EIA-232 del PC será inferior a los 40 mA máximos permitidos. Sin los diodos de protección es muy probable que ese pin de E/S (y quizás más) se dañe.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X