Conecte dos Arduinos a través de una simple conexión en serie

1

Tengo dos Arduino UNO con los que no puedo hablar entre ellos. Hice las siguientes conexiones

A <---> B
0(RX)   1(TX)
1(TX)   0(RX)
GND     GND

Tengo entonces, en mi código (corriendo en ambos tableros):

void setup()
{
  Serial.begin(9600);
  // ...
}

void loop()
{
  if (Serial.available() >= 1) {
    in_sample_value = Serial.read();
    in_sample_available = true;
  }
  if (out_sample_available) {
    Serial.write(out_sample_value);
    out_sample_available = false;
  }
}

in_sample_value se consume en un ISR (que también establece el indicador in_sample_available en false), out_sample_value se produce en otro ISR (que también establece el indicador out_sample_available en true). El problema es que ambos leds TX en ambas placas están continuamente encendidos, pero los leds RX están completamente apagados en ambas placas. Sé que los ISR se están ejecutando porque los probé. ¿Puedes ver lo que estoy haciendo mal?

Addendum

Para crear un caso de prueba mínimo, simplemente conecté los pines 0 y 1 en una de las dos placas y ejecuté lo siguiente:

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

uint8_t count = 0;

void loop() {
  Serial.write(count++);
  Serial.read();
}

Como se dijo anteriormente, el led TX está encendido, el led RX está apagado.

    
pregunta CAFxX

3 respuestas

3

Los RX / TX son los LED de conexión USB. Indican si su ATMEGA está transmitiendo (TX) o recibiendo datos (RX) en lugar de la PC. Si está transmitiendo datos, se envía tanto al chip convertidor USB como al nodo conectado. Después de todo, el chip USB está enviando datos a la PC host UART.

Si está recibiendo datos del nodo conectado, el chip USB no ha enviado los datos al arduino, por lo que no se encenderá ningún LED RX. ¡No significa que no hay nada enviado sin embargo! Es posible que ATMEGA aún esté recibiendo datos, pero el chip USB no está involucrado, por lo que ningún LED parpadeará.

En otras palabras, TX significa datos enviados a USB, RX significa datos recibidos de USB. Estos LED están directamente vinculados al chip convertidor UART USB, por lo que no puede cambiar su comportamiento.

Habiendo dicho eso, supongo que tu código probablemente funcione bien. Si no está familiarizado con una pieza de hardware, ¡no siempre confíe en ella! Especialmente estas cosas pueden ser engañosas si crees que el RX / TX está relacionado con tu microcontrolador, mientras que solo están relacionados con el chip USB UART. Solución: busque esquemas, busque hojas de datos y averigüe cuándo se encienden ciertos indicadores.

    
respondido por el Hans
0

Me preguntaba sobre estos LED, así que busqué en la página de la UNO y encontré esto:

  

Los LED de RX y TX en la placa parpadearán cuando los datos se transmitan a través del chip USB a serie y la conexión USB a la computadora (pero no para la comunicación en serie en los pines 0 y 1).

Si puede "reutilizar" esos LED (o alternar otro pin y agregarle un LED / resistencia) y destellar uno al recibir un carácter particular, esto podría confirmar si la serie está funcionando correctamente. Por lo tanto, en su código anterior, agregue uint8_t rx_char = 0 para recibir que la rutina de lectura se actualice, y agregue, por ejemplo,

if(rx_char < 128) 
{
    LED = 1;
}
else
{
    LED = 0;
}
    
respondido por el Oli Glaser
0

Aunque no estoy conectando dos arduinos juntos (aún), sí conecté un medidor de voltaje industrial Micron usando un convertidor serial SN75176A.

Quería ver si los datos se estaban enviando, así que conecté dos led a los pines TX / RX y, por supuesto, el pulso del led cada vez que se envían o reciben datos.

Usando este método, no se requería programación. Son solo 2 LED, 1 resistencia conectada al cátodo y amp; tierra y los LED conectados directamente a TX & RX.

    
respondido por el Steve

Lea otras preguntas en las etiquetas