En la comunicación en serie, ¿la tasa de baudios significa que tenemos que usar la velocidad de reloj exacta 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?
Los tiempos deben ser lo suficientemente precisos para que no se desvíen 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). Suponemos 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 error del 1% en su reloj es casi seguro que está bien. El error del 5% es casi seguro que es un problema. Entre esas dos cifras 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 da una tolerancia del 3% para la constante de tiempo de la red RC y eso es antes de pensar en los errores introducidos por el chip del controlador.
Entonces, la conclusión es que debería estar mirando 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 máxima velocidad.
Los UART que se utilizan normalmente en los sistemas seriales de tipo RS232 funcionan muestreando 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 tasa de baudios 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 bits de un byte es de 10 u 11 bits. 1 bit de inicio, 8 de datos y 1 o 2 bits de parada. Medio poco de desviación en el décimo bit se traduce en 0,5/10 = 5 % de error.
Sin embargo, en realidad su tolerancia es menor que eso porque también necesita agregar la latencia de su período de frecuencia base que agregará una compensación desde el borde de ataque del bit de inicio. Cuanto mayor sea su frecuencia base, menos efecto tendrá.
En cuanto al uso de 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 integrado, mediante el uso de un reloj pasado o mediante alguna forma de bloqueo de fase en los bordes de datos recibidos. (Aunque podría decirse que este último es realmente pseudosincrónico).
Eugenio Sh.
el fotón