Convertir la señal digital a UART y viceversa

0

Para un proyecto, estoy tratando de decodificar la señal digital (representada como Ejemplo 1 y 2 en el diagrama a continuación) en UART y de UART en una señal digital similar. La señal digital se genera a partir de un protocolo / chip de comunicación de línea eléctrica.

Eldiagramaserealizacon enlace

Como puede ver, los datos son la mitad de la velocidad de los cambios reales, la segunda mitad de cada bit de datos UART, la señal siempre va a la lógica 1 si aún no era 1 .

Si los datos son 9600 baudios, 8 bits de paridad par y un bit de parada, la señal digital actual no se decodifica bien. ¿Hay una solución fácil para ello? P.ej. Eliminando el cambio en la última mitad del bit de datos.

Para la codificación, ¿cómo podrían volver a convertirse los datos de UART? Ya que necesitamos volver a agregar el 1 para la segunda mitad de cada bit.

¿Cómo se puede resolver esto? Dado que el bit banging no es la mejor solución.

    
pregunta EmbedWise

3 respuestas

1

Gracias a todos por las respuestas.

El modo IrDA es la solución más sencilla en hardware, proporcionada por @ Ben Voigt ,

¡Comencé a buscar en IrDA y encontré la solución de hardware que funciona! El microcontrolador que estoy usando soporta USART-IrDA, para mí fue necesario invertir el exceso de muestreo del conjunto de señales a 8 y el ancho de pulso a 4/8, para obtener el ancho de pulso requerido del 50%.

    
respondido por el EmbedWise
0

Al recibir

Puede usar la misma velocidad en baudios si retrasa todo después del bit de inicio un poco. Esto se puede implementar con un elemento de retardo (2 inversores lógicos que actúan como un búfer con un filtro RC entre ellos) y un mux y un contador. O simplemente agregue otro MCU como dice oldfart. Golpe de bits vs solución de hardware. Fácil vs duro

Aquí está el elemento de retardo del que estoy hablando.

Aquíestáel enlace si quieres perder el tiempo.

Y los datos retrasados serían todo excepto el bit de inicio. Así que un contador que va a 11 y luego se reinicia sería algo. Y un mux donde un canal pasa directamente y otro canal atraviesa los circuitos de arriba.

Pero ahora, cuando lo estoy pensando, los datos están a una cuarta parte de donde debería estar. Si hubiera estado a la mitad, los datos habrían estado en el punto de transición, pero ahora el punto de transición está ... relativamente lejos, así que creo que puede leer estos datos sin ningún problema.

Misma velocidad en baudios, salida a entrada. No hay circuitos adicionales o golpes de bits.

Al enviar:

Solo los ceros envían la mitad 0 y la mitad 1. En otras palabras, simplemente puedes conectar un circuito que envía pulsos invertidos en los bordes descendentes.

Este es un esquema simple que hace justamente eso. Todo lo que tienes que hacer es cambiar la constante RC.

Aquíestáel enlace si quieres perder el tiempo.

Es difícil hacer algunos bits al hacer clic con la mano. Pero como puede ver, los unos mantienen la salida en 1, los ceros hacen que se reduzca durante un tiempo determinado y luego vuelva a subir. Exactamente como lo que estás tratando de hacer.

Gahh Acabo de darme cuenta de que este circuito no se volverá a disparar si se envían dos ceros en una fila ... Hmm, al enviar, creo que debes usar bit banging, porque las cosas son volteando a un reloj específico. Dudo que quieras usar un oscilador externo ... bueno ... ni siquiera sé si estás usando uno o no. De cualquier manera, recomiendo resolverlo en el lado del software.

TLDR;

Al leer, solo usa la misma velocidad de transmisión y todo debería estar bien.

Al enviar, usa bit banging. Si hay un reloj externo para el UART (convirtiéndolo en un USART), entonces puede modificar el circuito de envío anterior y resolverlo en el lado del hardware.

    
respondido por el Harry Svensson
0

se puede resolver en hardware estirando las partes bajas de las señales:

para crear tal señal or la salida de uart con el reloj de bits.

    
respondido por el Jasen

Lea otras preguntas en las etiquetas