En la comunicación en serie, ¿la tasa de baudios significa que tenemos que usar la velocidad exacta del reloj o es un rango de velocidades que podemos usar?
y si es un valor exacto, ¿qué tan exacto debería ser? por ejemplo, ¿puedo usar 555 como reloj de un circuito de comunicación en serie?
serial
clock-speed
baudrate
soundlikefiziks
fuente
fuente
Respuestas:
Los tiempos deben ser lo suficientemente precisos para que no se separen antes de que el protocolo vuelva a sincronizarse.
La serie UART se resincroniza en cada byte y un byte tiene alrededor de 10 bits (8 bits de datos más inicio y parada). Asumimos que nuestro UART apunta a la mitad de cada bit. Si todo es perfecto y solo un extremo es inexacto, eso permite una diferencia de aproximadamente el 5% entre los dos extremos del enlace.
Sin embargo:
La conclusión es que el 1% de error en su reloj es casi seguro que está bien. El error del 5% es casi seguro un problema. Entre esas dos figuras puede o no ser un problema dependiendo de la imagen general.
Esa es una tarea difícil para un oscilador RC. Digamos que su R tiene una tolerancia del 1% y su C tiene una tolerancia del 2%. Eso le da un 3% de tolerancia a la constante de tiempo de la red RC y eso es antes de pensar en cualquier error introducido por su chip controlador.
Entonces, la conclusión es que debería mirar un resonador de cristal o cerámica.
En cuanto a USB, no tengo la experiencia para analizar desde los primeros principios, pero https://www.silabs.com/community/interface/knowledge-base.entry.html/2004/03/15/usb_clock_tolerance-gVai dice 1.5% para baja velocidad y 0.25% para velocidad máxima.
fuente
Los UART que se usan típicamente en los sistemas seriales de tipo RS232 funcionan al muestrear la línea de datos en algún lugar a mitad de bit de acuerdo con una división del reloj de frecuencia base de velocidad de transmisión predefinida. Como tal, si los datos enviados y el receptor no están en la misma frecuencia, el "punto de muestra" se acercará al borde de la trama de bits en bits sucesivos.
Con un UART normal, la longitud de bit para un byte es de 10 u 11 bits. 1 inicio, 8 datos y 1 o 2 bits de parada. Medio bit de deambulación en el décimo bit se traduce en 0.5 / 10 = 5% de error.
Sin embargo, en realidad su tolerancia es menor porque también necesita agregar la latencia de su período de frecuencia base que agregará un desplazamiento desde el borde inicial del bit de inicio. Cuanto mayor sea su frecuencia base, menos efecto tendrá.
En cuanto a usar un temporizador 555 para este propósito, no lo recomendaría a menos que planee tener un ajuste manual en el circuito 555.
Un USART, por otro lado, utiliza un método de control más complejo que intenta sincronizar la transmisión con los datos recibidos. Esto puede ser mediante el uso de un patrón de datos que tiene un reloj incrustado, mediante el uso de un reloj pasado, o mediante alguna forma de bloqueo de fase a los bordes de datos recibidos. (Aunque podría decirse que este último es realmente pseudo-sincrónico).
fuente