Podría ser instructivo observar un algoritmo más simple para encontrar los bits de parada e inicio. Primero, muestrea la entrada a 4 veces la velocidad de bits.
Si la tasa de datos es de 9,600 bits por segundo, querrá muestrearla a 38,400 Hz.
Cuando no hay transmisión, obtendrás una gran cantidad de ruido, y la entrada de muestra puede ver altos y bajos aleatorios.
Cuando se envía un bit de inicio, lo detectará en al menos 3 muestras consecutivas. A partir de entonces, muestreará cada cuarta muestra como el bit real recibido, compensado por una muestra para que esté cerca de la mitad de cada bit.
Finalmente, recibirás el bit de parada: si no es correcto, puedes descartar todos los datos e intentarlo nuevamente, esperando un bit de inicio.
Ese es el caso simple. Una vez que lo tienes funcionando, verás que aún obtienes datos erróneos, y ahí es donde empleas más técnicas para recuperar los datos:
- En lugar de usar solo una muestra cerca de la mitad de cada bit, observe las tres muestras que deberían ocurrir dentro del tiempo de bit y use el voto mayoritario para determinar el valor real del bit
- Aumente la frecuencia de muestreo a 8x o 16x, lo que le proporcionará un número mucho mayor de muestras por bit para usar, y lo acercará más a la recopilación de información en todo el bit en lugar de solo 3/4 en el medio.
- Almacene el flujo de datos mientras recibe, y use un correlateral que se mueva a lo largo del flujo para encontrar los bits de inicio y parada. De esta manera, no está tirando un posible byte porque tuvo un bit de inicio incorrecto justo antes de los datos reales.
- En lugar de muestrear en medio de los bytes, busque las transiciones: RF envía las transiciones mejor que los niveles estáticos. Encuentre el comienzo del bit de inicio, luego use una pequeña ventana alrededor de cada transición de bit, mire para ver si hay una transición, y luego tendrá algo de información sobre el bit anterior y el siguiente.
Sin embargo, las señales USART no son apropiadas para RF. Considere buscar en la codificación de Manchester. En lugar de enviar datos como máximos / mínimos, los envía como transiciones de alto a bajo o de bajo a alto. Facilita la recuperación del reloj, ya que codifica el reloj en cada bit y opera en las transiciones, que es el amigo natural de RF. No puedes enviarlo tan rápido, pero será mucho más confiable.
También considere la detección de errores y, si es posible, la corrección de errores. Con la simple detección de errores, podrá verificar si los ajustes en su algoritmo están mejorando la señal o no de manera objetiva.