¿Evitar la confusión entre ninguna entrada y un cero en binario?

10

Supongamos que estoy transmitiendo datos a través de FM donde 0 es 2Hz y 1 es 4Hz. El transmisor está transmitiendo 2Hz cuando no hay entrada. Si alimentara el binario recibido a un puerto UART de un microcontrolador, ¿cómo diferenciaría el microcontrolador entre ningún dato y 0?

Esto se vuelve relevante cuando se transmiten caracteres ASCII, por ejemplo. Supongamos la siguiente cadena:

01000110 01101111 01101111 01100010 01100001 01110010

Como he agregado espacios, podríamos traducir esto a:

Foobar

Pero para una máquina, la cadena se vería así:

010001100110111101101111011000100110000101110010

¿Cómo crearía esos "espacios" para que no se confundan los caracteres ASCII cuando recibe binarios?

Allenph
fuente
55
Así es como UART lo resuelve, enlace . Detener e iniciar bits, ya que si lo alimenta a un puerto UART, también debe transmitirlos.
Bence Kaulics
Me temo que no entiendo bien su diagrama. Parece que el "Bit de inicio" es simplemente cero, lo que restituye mi problema. Por ejemplo, ¿cómo sabría la diferencia entre 01111000 y 00111100 si la cadena fuera 000 01111000 000?
Allenph
2
@Allenph, cuando no está enviando el bus está inactivo y se mantiene en un estado lógicamente alto. Cuando comienza la transmisión de un paquete, el primer bit siempre es lógicamente bajo. Este es el bit de inicio. Luego sigue ocho bits de datos y luego un bit de parada que es lógicamente alto. El microprocesador sabe cuándo llega el siguiente bit, ya que conoce la velocidad del bus que ha configurado. Tanto el microprocesador como la unidad que transmite al microprocesador deben configurarse con la misma velocidad de transmisión.
Mattias Johansson

Respuestas:

16

Si alimenta algo a un puerto UART de un microprocesador, debe seguir el protocolo de comunicación UART si desea que el microprocesador entienda lo que está alimentando. Debe incrustar cada carácter ASCI en un paquete UART que contenga un bit de inicio, un bit de parada y posiblemente un bit de paridad, hay mucha más información disponible en la página Wikipedia de UART .

Cuando no está enviando, el bus está inactivo y se mantiene en un estado lógicamente alto. Cuando comienza la transmisión de un paquete, el primer bit siempre es lógicamente bajo. Este es el bit de inicio. Luego sigue ocho bits de datos y luego un bit de parada que es lógicamente alto. El microprocesador sabe cuándo llega el siguiente bit, ya que conoce la velocidad del bus que ha configurado. Por lo tanto, es posible transmitir, por ejemplo, dos ceros uno al lado del otro. Tanto el microprocesador como la unidad que transmite al microprocesador deben configurarse con la misma velocidad de transmisión, paridad y número de bits de parada.

Mattias Johansson
fuente
2
Un punto clave es que el número configurado de bits de parada es un mínimo, no un máximo. El estado inactivo de la línea serie asíncrona es un bit de parada extendido. Entonces, si la radio debe estar inactiva en 0, entonces la respuesta fácil es invertir la salida UART antes de conducir la radio con ella para que funcione en 0, y 1 es un comienzo. Luego invierta los datos recibidos antes de manejarlos con un UART.
RBerteig
6

Hay muchas técnicas para esto. Es posible que desee ver la codificación Manchester o los códigos NRZ. O codificación 8b / 10b , que asigna cada 8 bits de datos a una secuencia de 10 bits que permite la recuperación del reloj, la corrección de errores y los símbolos especiales de "coma" que se pueden usar para detectar el inicio y el final de una transmisión.

pjc50
fuente
5

Todos los caracteres ASCII tienen 8 bits de ancho, puede ver eso en una tabla ASCII. Los valores HEX de los caracteres ASCII no van más allá de FF (1111 1111)

UART no puede recibir más de un byte de datos (8 bits) a la vez, además de esos datos de 8 bits hay bits STOP y START, PARITY y algunos más, que puede ver en la imagen que se muestra a continuación y que juntos forman el paquete de comunicación UART.

ingrese la descripción de la imagen aquí

Entonces, cuando envía caracteres ASCII a UART, los envía uno por uno, y así es como se hace la cadena. Ya sabes que la cadena es solo una serie de caracteres.

Lazar
fuente
44
ASCII es de 7 bits, no de 8, sin embargo, es común ponerlo en una mordida de 8 bits para que la alineación sea trivial. También permite otros conjuntos de caracteres y utf8.
hildred
0

El protocolo UART, como explicó Mattias, es un protocolo asincrónico basado en el tiempo. Lo que define los límites entre los bits es el tiempo transcurrido desde el comienzo del bit de inicio. Entonces el microcontrolador "muestreará" los bits (N+half)/baudratesegundos después de que comience el bit de inicio. El medio bit es solo para muestrear en el medio de los bits para que pueda tener una diferencia de medio bit en el tiempo entre el receptor y el transmisor (recuerde que las diferencias son acumulativas y el peor de los casos ocurre en el último bit de cada trama, que generalmente es, pero no siempre, de 8 bits de ancho, dependiendo de la configuración). La clave para que funcione es tener el receptor y el transceptor con velocidades de transmisión lo más cerca posible.

Entonces, el microcontrolador cuenta el tiempo entre cada bit para saber dónde está cada bit dentro de un marco. El siguiente personaje irá al siguiente cuadro. Cuando finaliza cada cuadro, el microcontrolador comienza a escuchar el siguiente cuadro automáticamente, por lo que cuando llega el siguiente bit de inicio ya sabe que debería comenzar un nuevo cuadro. Así se separan los personajes.

Además, agregaré que en realidad no necesita dos frecuencias para transmitir a un microcontrolador receptor de UART. Puede usar una sola frecuencia como OOK en lugar de dos frecuencias como FSK . Tiene una mayor eficiencia espectral y los circuitos son mucho más simples, ya que solo necesita un conmutador de onda portadora como transmisor y un detector de frecuencia única como receptor, más o menos como el código Morse. Recuerde usar generalmente portadores con frecuencias que son mucho más altas que la velocidad en baudios, de lo contrario los circuitos más simples no funcionarán correctamente.

Ronan Paixão
fuente