¿Qué es Serial.begin (9600)?


Respuestas:


22

Serial.begin(9600)en realidad no imprime nada. Para eso querrás usar Serial.print("Hello world!")para imprimir el texto "¡Hola mundo!" a la consola en 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 conexión en serie de velocidad para obtener cualquier tipo de información inteligible. Si hay un desajuste entre lo que los dos sistemas piensan que es la velocidad, entonces los datos serán confusos.

9600 bits por segundo es el valor predeterminado para el 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 el software que esté utilizando en su computadora (como el monitor serie del Arduino IDE) a la misma velocidad para ver los datos que se envían.


2
Baud y BPS son dos cosas diferentes ... no puedo encontrar el enlace que estaba buscando ahora.
Anonymous Penguin

¿Qué pasa si pongo "Serial.begin (0);" o "Serial.begin (4000);". Quiero decir, quiero saber cuál es la diferencia entre los números.
shajib0o

3
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 particular al sistema receptor. Por lo tanto, se necesitan 10 bits para enviar un carácter. El uso Serial.begin(0)le dice al Arduino que debe comunicarse con el serial a 0 bits por segundo. Como es 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.
heypete

2
En resumen: cambiar el número cambia la velocidad. Reducir el número (p Serial.begin(300). Ej. ) Hace que el Arduino envíe datos más lentamente. Al aumentarlo, digamos que 57600 enviará datos más rápido. Tanto el sistema emisor como el sistema receptor deben acordar qué velocidad usar: el programa en serie de su computadora, como la ventana Arduino Serial Monitor, le permitirá establecer la velocidad a la cual su computadora recibirá datos, pero solo puede seleccionar entre los comunes velocidades: 300, 1200, 2400, 4800, 9600, 19200, 38400, 57600 y 11520 bit / seg. No puede ingresar otras velocidades, como 4000. 9600 generalmente es bueno.
heypete

Baud and BPS are two different things... can't find the link I was looking for now.- Aquí hay una explicación: Apéndice C: "baudios" vs. "bps"
Nick Gammon

21

Una imagen vale 1000 palabras, por lo que dicen, (1024 palabras si trabajas con computadoras), así que publicaré algunas fotos ...

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.

Según la nota gráfica anterior, la línea de datos Tx (transmisión) normalmente es 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 en baudios (9600 muestras por segundo). Después de eso, la línea vuelve a ser alta. Este es el bit de parada (la parte roja). Luego vemos el bit de inicio para el siguiente personaje, y así sucesivamente. La porción de "parada" puede ser indefinidamente larga, sin embargo, debe tener al menos un bit de longitud.


Aquí puede ver más detalles sobre el primer carácter (la letra "F" o 0x46 o 0b01000110):

Comunicaciones en serie: un solo byte

  • A - sin datos (Tx es alto)

  • B - El "bit de inicio". La línea se baja para decirle al receptor que un carácter (byte) comienza 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 hay 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 al bit menos significativo primero (en caso de que no envíe 8 bits por byte). Así vemos 01100010 (en lugar de 01000110).

  • D - El bit de parada. Esto 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 un cero y el bit de detención es uno, siempre hay una transición clara de un byte al siguiente.

  • E - El bit de inicio para el siguiente personaje.


Puede ver en la captura del analizador lógico que T1 - T2es 0.1041667 ms, y resulta que 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 lo inverso es el intervalo de tiempo entre bits .


Otras Consideraciones

  • Las comunicaciones en serie no se sincronizan automáticamente (a diferencia de SPI o I2C, y otras), por lo tanto, tanto el emisor como el receptor deben acordar una frecuencia de reloj.

  • La velocidad 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 da en la hoja de datos (cifras citadas para un reloj de sistema de 16 MHz, como en el Uno):

    Error de velocidad de transmisión 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 enviarse un bit de paridad después de los bits de datos.

    • Si especifica una 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 sea 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 del bit de parada.

  • En el caso de 9 bits de datos (como se usa en el protocolo SeaTalk), el bit de paridad se vuelve a utilizar 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 alarga el tiempo entre bytes. En los "viejos tiempos" esto era para que un equipo electromecánico lento pudiera procesar el byte anterior (por ejemplo, para imprimirlo).


Posible corrupción

Si comienza a escuchar datos en serie en el medio de una secuencia, es muy posible que un bit 0 en el medio de la secuencia se interprete como un bit de inicio, y luego el receptor interpretará todo después de eso incorrectamente.

La única forma real de recuperarse de esto es tener un espacio 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 1 bit es ALTO y un 0 bits es BAJO. Si tiene un equipo RS232 que probablemente enviará algo como -12 V para 1 bit y +12 V para 0 bit. Esto se invierte porque uno es menor que cero, en cuanto a voltaje.

Si tiene tales dispositivos, necesita hacer conversión de voltaje e inversión lógica. Chips como el MAX232 harán las dos cosas por usted. También pueden proporcionar los -12 V necesarios para conducir dicho equipo al generarlo internamente con la ayuda de unos pocos condensadores suministrados 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 que puede transmitir en un segundo dividiendo la velocidad de bits por 10 .

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


Código para reproducir:

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

void loop ()
  {
  }

1

; TLDR; Inicializa el puerto de comunicación en 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 coincidente. Una vez que haya inicializado el puerto, puede comenzar a enviar o recibir caracteres. Referencia serial de Arduino


No para disminuir o faltarle el respeto a la excelente cobertura de @ Nick-Gammon sobre este tema.
linhartr22
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.