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?
digital-logic
data
binary
Allenph
fuente
fuente
Respuestas:
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.
fuente
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.
fuente
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.
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.
fuente
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)/baudrate
segundos 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.
fuente