¿Qué es Serial.begin (9600)?

Sé que esto es para inicializar algo:

Serial.begin(9600); 

Pero quiero sabes lo que realmente significa?

Comentarios

Respuesta

Serial.begin(9600) en realidad no imprime nada. Para eso,» querría 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 valor predeterminado para Arduino y es perfectamente adecuado para la mayoría de los usuarios, pero podría cambiarlo a otras velocidades: Serial.begin(57600) configuraría el Arduino para transmitir a 57600 bits por segundo. Debería configurar cualquier software que esté usando en su computadora (como el El monitor serial de Arduino IDE) a la misma velocidad para ver los datos que se envían.

Comentarios

  • Baud y BPS son dos cosas diferentes … no puedo ‘ encontrar el enlace que estaba buscando ahora.
  • ¿Y si pongo » Serial .begin (0); » o » Serial.begin (4000); » . Quiero decir, quiero saber cuál es la diferencia entre los números.
  • Serial.begin se usa para establecer la velocidad de comunicación, en bits por segundo. Un byte es igual a 8 bits, pero las conexiones en serie envían un bit de inicio y parada para identificar el inicio y el final de un byte en particular al sistema receptor. Por tanto, se necesitan 10 bits para enviar un carácter. El uso de Serial.begin(0) le dice al Arduino que debe comunicarse con el serial a 0 bits por segundo. Como era de esperar, esto significa que Arduino nunca enviará ningún dato. Serial.begin(4000) hará que Arduino envíe datos a 4000 bits por segundo. Esto no es estándar, pero por lo demás está bien.
  • En resumen: cambiar el número cambia la velocidad. Reducir el número (por ejemplo, Serial.begin(300)) hace que Arduino envíe datos más lentamente. Aumentarlo, digamos a 57600, enviará datos más rápido. Tanto el sistema de envío como el sistema de recepción deben acordar qué velocidad usar: el programa serial de su computadora ‘, como la ventana del Monitor serial Arduino, le permitirá establecer la velocidad a la que su computadora recibirá datos, pero solo puede seleccionar entre las velocidades comunes: 300, 1200, 2400, 4800, 9600, 19200, 38400, 57600 y 11520 bit / seg. Puede ‘ t ingresar otras velocidades, como 4000. 9600 suele ser bueno.
  • Baud and BPS are two different things... can't find the link I was looking for now. – Aquí ‘ s una explicación: Apéndice C: » baud » frente a » bps »

Respuesta

Una imagen vale 1000 palabras, por eso dicen, (1024 palabras si trabajas con computadoras) así que publicaré algunas imágenes …

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

Comunicaciones en serie - 3 letras

Las partes sombreadas en rojo son el período» inactivo «entre bytes.

Del gráfico anterior, observe que el La línea de datos Tx (transmisión) es normalmente alta (1) hasta que baja para indicar el inicio 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 se eleva de nuevo. Este es el bit de parada (la parte roja). Luego vemos el bit de inicio para el siguiente carácter y así sucesivamente. La porción de «parada» puede ser indefinidamente larga, sin embargo, debe tener al menos un bit de longitud.


Más detalles para el primer carácter (la letra «F» o 0x46 o 0b01000110) pueden ser visto aquí:

Comunicaciones en serie: un solo byte

  • A – sin datos (Tx es alto)

  • B – El «bit de inicio». La línea se toma baja para decirle al receptor que un carácter (byte) está comenzando a enviarse. El receptor espera una hora y media antes de muestrear la línea.

  • C – Llega el primer carácter (la letra «F» o 0x46 o 0b01000110). No existe un bit de reloj como tal, los datos entrantes simplemente se muestrean a la velocidad de transmisión (baudios). 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). Por lo tanto, vemos 01100010 (en lugar de 01000110).

  • D – El bit de parada. Esto siempre es alto, para asegurarnos de 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 como sucede eso es 1/9600:

1 / 9600 = 0.00010416666 seconds 

Por lo tanto, la tasa de 9600 le da el número de bits por segundo y la inversa 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 que tanto el emisor como el receptor deben acordar una frecuencia de reloj.

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

    Error de velocidad en baudios en serie

  • Puede variar el número de bits de datos, no tiene que enviar 8 de ellos, de hecho puede enviar de 5 a 9 bits.

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

    • Si especifica la paridad «impar», el bit de paridad se establece de tal manera que el número total de 1 bits sea impar.
    • Si especifica la 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, el bit de paridad se omite.

    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. Esto básicamente solo alarga el tiempo entre bytes. En el «antiguo días «esto fue para que el equipo electromecánico lento pudiera 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 interpretará todo lo que sigue de forma incorrecta.

La única forma real de recuperarse de esto es tener un espacio lo suficientemente grande, de vez en cuando, (por ejemplo, 10 bits de longitud) para que esto no suceda.


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 0 es BAJO. Si tiene un equipo RS232 que probablemente enviará algo como -12 V para 1 bit y +12 V para bit 0. Esto se invierte porque uno es menos un cero, en términos de voltaje.

Si tiene tales dispositivos, necesita hacer conversión de voltaje e inversión lógica. Los chips como el MAX232 harán ambas cosas por usted. También pueden proporcionar los -12 V necesarios para impulsar dicho equipo al generarlo internamente con la ayuda de algunos condensadores proporcionados por el usuario.


Regla empírica de 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 la cantidad de bytes puede transmitir en un segundo dividiendo la tasa de bits por 10.

Ej. A 9600 BPS puede enviar 960 bytes por segundo.


Código para reproducir:

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

Respuesta

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

Comentarios

  • No menospreciar o faltarle el respeto a @ Nick- Gammon ‘ s excelente cobertura de este tema.

Deja una respuesta

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