Olimex / ATMega328 Lectura de UART y envío a USB

0

Me estoy frustrando con mi conocimiento electrónico, porque quiero hacer esto simple:

Olimex 328 / ATMega328 lee datos de UART (Olimex MOD-PULSE o lo que sea) y los reenvía al puerto USB (mi computadora).

No entiendo cómo puedo hacer esto. Escribí el siguiente programa:

void setup()         // run once, when the sketch starts
{
  Serial.begin(9600);
  Serial1.begin(9600);
}

void loop()                       // run over and over again
{
  Serial.println(Serial1.read());  // prints hello with ending line break 
}

Pero no funciona, ya que Serial1 no existe. ¿Me podrías dar una pista? No puedo encontrar nada que pueda entender en Internet.

    
pregunta Lichtamberg

3 respuestas

3

Al parecer, al sitio no le gustó mi intento de completar mi registro. Así que, luego de su comentario sobre mi respuesta anterior (como usuario 46333):

En el Uno (la placa que estoy usando para el desarrollo), es posible comunicarse con la placa usando el UART de dos maneras. Existe la conexión USB y los pines Rx / Tx (2 y 3, respectivamente). Es posible conectar un dispositivo (es decir, RS232- > conexión TTL) a los pines Rx y Tx para comunicarse en serie con el controlador. Cuando el USB está conectado a la computadora, se comunica en las mismas líneas, indirectamente, a través del ATmega16U2. Los dos se conectan al ATmega328 a través de los mismos pines, como lo demuestran las líneas ROJAS en la siguiente imagen (esquema de la documentación de Arduino Uno):

Entonces,pararesponderatupregunta

  

¿leen/escribenenelmismocable?

Ellosleen/escribenenlosmismospines.

También,paracorregirmicódigoysimplificarlo:

voidsetup(){Serial.begin(9600);}voidloop(){if(Serial.available()>0){Serial.println(Serial.readString);}else{Serial.println("HELLO");}
    delay(2000);
}

Esto recibirá todos los datos enviados al controlador en el pin Rx, y luego los imprimirá inmediatamente en el pin Tx.

    
respondido por el craigkoiter
1

ATMega328 solo tiene un puerto serie de hardware, es decir, el uso de Serial1 no tiene sentido. ¿Cómo crees que lo transfieres al dispositivo USB CDC? Necesitas el puente serial2USB (que se puede comprar a través de un segundo UART) o un chip compatible con USB (por ejemplo, ATMEGA1286 / 7).

    
respondido por el TMa
1

En el Arduino Uno (ejemplo que usa el ATmega328), los datos pueden enviarse desde y hacia el dispositivo a través del UART. Código de ejemplo:

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

void loop() {
    if (Serial.available() > 0) {
        String getString = Serial.readString();
        Serial.println(getString);
    }
    else {Serial.println("HELLO");}
    delay(2000);
}

Buscará los datos en serie entrantes, y los imprimirá de nuevo en la conexión en serie, de lo contrario, imprimirá simplemente hola. Este código se puede modificar para aceptar diferentes tipos de variables y seguir imprimiéndolos en la conexión en serie.

También, es posible usar otros puertos de E / S para simular una conexión UART, usando bibliotecas de código compiladas ( existe una en Arduino sitio ), que debería ser más que adecuado con una baja velocidad de transmisión.

    
respondido por el user46333

Lea otras preguntas en las etiquetas