Voy a usar un cristal de 8 MHz para ejecutar mi microcontrolador a 16 MIPS (PLL 4x, instrucciones de 2 ciclos). Sin embargo, 8 MHz no se divide en ninguna frecuencia UART AFAIK ... entonces, ¿qué tan críticas son estas frecuencias? Planeo usar 115,200 baudios.
¿Puede UART funcionar dentro de ± 1%? Si esto no funciona, ¿qué frecuencia debo usar? (Me gustaría acercarme lo más posible a 16 MIPS, para obtener la máxima velocidad de procesamiento). Si es importante, estoy usando un PIC24FJ64GA004.
Si está dentro del 1%, debería estar bien.
Suponga que su UART usa un reloj de sobremuestreo de 16x, por ejemplo, puede configurarlo en 1,843,200 Hz para sobremuestrear 16x de 115,200 bps. (sobremuestreo como este es bastante común) Esto permite que el UART cuente 8 overclocks desde el borde descendente del bit de inicio, por lo que puede ubicar el centro de las celdas de bits dentro de +/- un período del overclock, después que cuenta 16 períodos de overclocking para determinar cuándo muestrear datos.
Si supone que puede tocar el centro del bit de inicio, entonces, para seguir muestreando datos en serie en las celdas de bits correctas en 8 bits de datos, la frecuencia del reloj debe permanecer entre (8-0.5)/8 y (8+0.5 )/8, o +/-6,25% de la tasa de bits prevista. Un overclocking más alto se acerca a la condición ideal de golpear el centro del bit de inicio, pero 8x o 16x suelen estar lo suficientemente cerca como para suponer que funcionará una falta de coincidencia del 5 %.
Sin embargo, no puede contar con que el otro lado esté perfectamente en la frecuencia. Si conecta un dispositivo que es un 4 % rápido a un dispositivo que es un 4 % lento, tendrá un problema. Me encontré con al menos un caso en el que una PC funcionaba un poco lenta y un dispositivo un poco rápido, y los dos solo podían comunicarse marginalmente, aunque el mismo dispositivo funcionaba bien con otras PC y la PC funcionaba bien con otros dispositivos. (Amplió estos a unos 112 kbps y 119 kbps) Por esa razón, es bueno tratar de alcanzar la frecuencia nominal lo más cerca posible. Nunca he visto que algo dentro del 2% del valor nominal tenga un problema.
Lo habitual es utilizar una frecuencia de reloj maestra que proporcione un múltiplo de un número entero de la frecuencia de sobremuestreo del UART deseada multiplicada por la velocidad en baudios. Por ejemplo, si desea que una CPU funcione a aproximadamente 8 MHz, puede usar un oscilador de 7,3728 MHz, que se puede dividir por 4 para obtener 1,8432 MHz, que resulta ser exactamente 16 veces 115200.
El 1% que menciona @JustJeff no es obligatorio. La mayoría de los UART permiten un error de medio bit en el último bit. La mayoría de las veces, una trama consta de 1 bit de inicio, 8 bits de datos y 1 bit de parada, para un total de 10 bits. Medio bit en 10 bits es 5% (el 6,25% de JustJeff no tiene en cuenta el bit de inicio y parada).
Un punto que aún no se menciona es que algunos dispositivos esperan transmitir un byte de datos por cada byte de datos que reciben. Si un dispositivo de este tipo recibe datos de forma continua, su velocidad en baudios es incluso un 0,1 % más lenta que la del dispositivo transmisor y no tiene capacidad para enviar bits de parada ligeramente reducidos, su salida se retrasará un byte por cada 1000 bits consecutivos. bytes que ingresan. Si el dispositivo está limitado a 16 bytes de almacenamiento en búfer, eliminará un byte de datos después de pasar aproximadamente 16,000 y eliminará aproximadamente un byte por mil a partir de entonces. Vale la pena señalar que los llamados módems de "1200 baudios" en realidad funcionan a una velocidad ligeramente superior a 1200 bits/segundo (creo que es alrededor de 1202) precisamente por esta razón (de modo que incluso si el transmisor es un 0,15% más rápido de lo que debería). ser, el módem aún pasará a través de todos los datos).
JustJeff se olvidó del bit de inicio, pero Stevenh agregó el bit de parada. Asumiendo el protocolo común de 8 bits de datos, 1 bit de inicio y ningún bit de paridad (la cantidad de bits de parada no importa), hay 8 1/2 tiempos de bit desde el borde anterior del bit de inicio hasta el centro del último bit de datos. En general, desea que el receptor muestree este último bit dentro de un tiempo de 1/4 de bit. Tenga en cuenta que 1/2 bit es el umbral de falla garantizado. Cualquier cosa cerca de allí se vuelve irreal ya que siempre hay algo de ruido eléctrico y fluctuaciones.
1/4 dividido por 8 1/2 = 2,94%.
Como mencionó JustJeff, la mayoría de las implementaciones de UART en realidad muestrean los datos entrantes con un reloj asíncrono de 16x. Eso agrega otra incertidumbre de tiempo de 1/16 bit, ya que ese es el error con el que se puede medir el borde de ataque del bit de inicio. 1/16 bit de tiempo fuera de 8 1/2 bits es otro 0,74%. Eso sale del presupuesto de error calculado anteriormente. Termina con un 2,2% de desajuste de reloj permitido para que el receptor muestree el último bit dentro de 1/4 de tiempo de bit de su centro.
Como han dicho otros, el uso de un cristal de 7,3728 MHz es una práctica común cuando se requiere una velocidad de transmisión precisa. Por lo general, puede hacer arreglos para ejecutar la CPU cerca de su velocidad máxima mientras alcanza la velocidad en baudios de UART dentro del error de cristal.
Tomas O.
Tomas O.
Tomas O.
solojeff