Saltar al contenido

¿Qué es Serial.begin(9600)?

Este dilema se puede resolver de variadas maneras, por lo tanto te damos la resolución más completa en nuestra opinión.

Solución:

Serial.begin(9600) en realidad no imprime nada. Para eso querrías usar Serial.print("Hello world!") para imprimir el texto “¡Hola mundo!” a la consola serie. Más bien, inicializa la conexión en serie a 9600 bits por segundo.

Ambos lados de la conexión en serie (es decir, el Arduino y su computadora) deben configurarse para usar la misma velocidad de conexión en serie para obtener cualquier tipo de datos inteligibles. Si hay una discrepancia entre lo que los dos sistemas creen que es la velocidad, los datos se distorsionarán.

9600 bits por segundo es el predeterminado para Arduino, y es perfectamente adecuado para la mayoría de los usuarios, pero puede cambiarlo a otras velocidades: Serial.begin(57600) configuraría el Arduino para transmitir a 57600 bits por segundo. Deberá configurar cualquier software que esté utilizando en su computadora (como el monitor serial del IDE de Arduino) a la misma velocidad para ver los datos que se envían.

Una imagen vale 1000 palabras, eso dicen, (1024 palabras si trabajas con computadoras) así que pondré algunas fotos…

Configuré mi Uno para enviar “Fab” a 9600 baudios y capturé los resultados en un analizador lógico.

Comunicaciones seriales - 3 letras

Las partes sombreadas en rojo son el período “inactivo” entre bytes.

Del gráfico anterior, tenga en cuenta que la línea de datos Tx (transmisión) normalmente es alta (1) hasta que baja para indicar el comienzo de un carácter (byte). Este es el bit de inicio. Luego, los 8 bits de datos (indicados por puntos blancos) aparecen a la velocidad de transmisión (9600 muestras por segundo). Después de eso, la línea vuelve a subir. Este es el bit de parada (la parte roja). Luego vemos el bit de inicio para el siguiente carácter, y así sucesivamente. La parte de “parada” puede tener una longitud indefinida, sin embargo, debe tener al menos una longitud de un bit.


Aquí se pueden ver más detalles del primer carácter (la letra “F” o 0x46 o 0b01000110):

Comunicaciones serie: un solo byte

  • A – sin datos (Tx es alto)

  • B – El “bit de inicio”. La línea se toma baja para indicarle al receptor que se está comenzando a enviar un carácter (byte). El receptor espera un reloj y medio antes de muestrear la línea.

  • C – Llega el primer carácter (la letra “F” o 0x46 o 0b01000110). No hay un bit de reloj como tal, los datos entrantes simplemente se muestrean a la velocidad de transmisión (baud). A diferencia de la comunicación SPI, los datos llegan primero con el bit menos significativo (en caso de que no envíe 8 bits por byte). Así vemos 01100010 (en lugar de 01000110).

  • D – El bit de parada. Siempre es alto, para garantizar que podamos distinguir entre el final de este byte y el comienzo del siguiente. Dado que el bit de inicio es cero y el bit de parada es uno, siempre hay una transición clara de un byte al siguiente.

  • E – El bit de inicio para el siguiente carácter.


Puede ver en la captura del analizador lógico que T1 - T2 es 0.1041667 ms, y da la casualidad que es 1/9600:

1 / 9600 = 0.00010416666 seconds

Así, la tasa de 9600 te da el número de bits por segundo y el inverso es el intervalo de tiempo entre bits.


Otras Consideraciones

  • Las comunicaciones en serie no tienen reloj automático (a diferencia de SPI o I2C, y otros), por lo tanto, tanto el remitente como el receptor deben acordar una frecuencia de reloj.

  • La frecuencia del reloj no es exacta en el Arduino, porque el hardware tiene que dividir el reloj del sistema para obtener un reloj en serie, y la división no siempre es exacta. Casi siempre hay un error, la cantidad se proporciona en la hoja de datos (cifras citadas para un reloj de sistema de 16 MHz, como en el Uno):

    Error de tasa de baudios en serie

  • Puede variar la cantidad de bits de datos, no tiene que enviar 8 de ellos, de hecho puede enviar de 5 a 9 bits.

  • Opcionalmente puede haber un paridad bit enviado después de los bits de datos.

    • Si especifica paridad “impar”, el bit de paridad se establece de tal manera que el número total de bits 1 es impar.
    • Si especifica paridad “par”, el bit de paridad se establece de tal manera que el número total de 1 bits es par.
    • Si no especifica paridad, se omite el bit de paridad.

    Esto puede ayudar al receptor a detectar si los datos llegaron correctamente o no.

  • El bit de paridad se envía antes que el bit de parada.

  • En el caso de 9 bits de datos (como se usa en el protocolo SeaTalk), el bit de paridad se reutiliza como un noveno bit de datos. Por lo tanto, no puede tener 9 bits de datos y un bit de paridad.

  • También puede tener dos bits de parada. Básicamente, esto solo alarga el tiempo entre bytes. En los “viejos tiempos”, esto era para que los equipos electromecánicos lentos pudieran procesar el byte anterior (por ejemplo, para imprimirlo).


posible corrupción

Si comienza a escuchar datos en serie en medio de una transmisión, es muy posible que un bit 0 en el medio de la transmisión se interprete como un bit de inicio, y luego el receptor interprete todo lo que sigue incorrectamente.

La única forma real de recuperarse de esto es tener una brecha lo suficientemente grande, de vez en cuando (por ejemplo, 10 bits de largo) para que esto no pueda suceder.


lógica invertida

Los bits que se muestran aquí (nivel lógico) no están invertidos. Es decir, un bit de 1 es ALTO y un bit de 0 es BAJO. Si tiene un equipo RS232, probablemente enviará algo así como -12 V para 1 bit y +12 V para 0 bits. Esto se invierte porque un uno es menor que cero, en cuanto al voltaje.

Si tiene tales dispositivos, necesita hacer conversión de voltaje e inversión lógica. Chips como el MAX232 harán ambas cosas por ti. También pueden proporcionar los -12 V necesarios para impulsar dichos equipos generándolos internamente con la ayuda de algunos condensadores proporcionados por el usuario.


Regla de oro de la velocidad

Dado que, con un bit de inicio, 8 bits de datos y un bit de parada, tenemos un total de 10 bits, como regla general rápida, puede calcular el número de bytes puede transmitir en un segundo dividiendo la tasa de bits por 10.

P.ej. A 9600 BPS puedes enviar 960 bytes por segundo.


Código para reproducir:

void setup() 
   
  Serial.begin(9600); 
  Serial.print("Fab"); 
   

void loop ()
  
  

;TLDR; Inicializa el puerto de comunicación serie y establece la velocidad en baudios. El dispositivo con el que se está comunicando (o Arduino IDE Serial Monitor) debe configurarse a una velocidad de transmisión correspondiente. Una vez que haya inicializado el puerto, puede comenzar a enviar o recibir caracteres. Referencia de serie de Arduino

Recuerda dar recomendación a esta división si te fue de ayuda.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *