rendimiento de transmision serie con arduino

El código es el siguiente: void setup() {. // Configuramos la velocidad de transmisión. Serial1.begin(1000000);. // Velocidad de transmisión 1Mbps. } void loop() {.
464KB Größe 1 Downloads 5 vistas
RENDIMIENTO DE TRANSMISION SERIE CON ARDUINO

Para analizar el rendimiento de las transmisiones serie en el arduino utilicé un simple programa que va a trasmitir cinco numero a la velocidad programada y después esperará 5ms, por ejemplo, y volverá a empezar realizando esta operación indefinidamente.

El código es el siguiente:

void setup() { // Configuramos la velocidad de transmisión Serial1.begin(1000000);

// Velocidad de transmisión 1Mbps

} void loop() { // Iniciamos la variable del contador a 0 int n =0; while(n < 5) {

// Repite mientras el contador no sea mayor de 5

Serial1.print(n);

// Transmite el numero, valor de la variable n (de 0 a 4)

n++;

// Incrementamos el contador

} delay(5);

// Después de transmitir los cinco números esperamos 5ms //Se vuelve a repetir el proceso indefinidamente en le loop.

}

Para las pruebas fui variando la velocidad desde 115200 bps hasta el máximo de 1Mbps ya que a partir de de esta velocidad los errores de sincronización son muy grandes. El resultado fue que sobrepasando cierta velocidad más o menos 200Kbps, realmente la transmisión de cada caracter se realizaba a la velocidad que le hemos indicado, pero la cadencia en la transmisión entre caracteres se mantiene fija en unos 64uS.

Como puede verse en la captura del analizador, el caracter es transmitido a una velocidad de 1Mbps , son un bit de start, 8 bit de datos y un bit de stop, en total 10 bis, que se envían en 10uS, pero después hay un tiempo de 54 uS hasta el próximo caracter, en total 64uS entre cada caracter. Esto significa que, aunque realmente los caracteres individuales se transmiten a 1Mbps, el conjunto de los cinco caracteres tardaría lo mismo a 1Mbs que a 500Kbps que a 250Kbps, ya que el tiempo entre cada caracter es el mismo. Ejemplo de envío a 250Kbps.

Se puede ver que el tiempo de transmisión entre caracteres es el mismo, pero cada caracter en si se transmita a la velocidad correcta. Esto significa que la función Serial.print() es muy lenta y no puede alimentar a la UART lo suficientemente rápido, de ahí el retardo entre caracteres. La siguiente prueba fue utilizar la función Serial.write() y el resultado fue sorprendente. Con el mismo programa simplemente sustituyendo el Serial.print() por el Serial.write() el arduino fue capaz de transmitir a 1Mbps sin retardo entre caracteres.

Como se puede ver el tiempo entre caracteres es de 10uS. Esto quiere decir que el arduino es más que capaz de enviar datos a esta velocidad siempre que el programa que le tengamos cargado pueda alimentar el registro de la UART lo suficiente mente rápido. El problema ahora sería si el receptor de estos datos es capaz de recibirlos a esta velocidad.