¿Evita confusiones 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 introduje el binario recibido en un puerto UART de un microcontrolador, ¿cómo diferenciaría el microcontrolador entre no datos y 0?

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

01000110 01101111 01101111 01100010 01100001 01110010

Debido a que 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 un binario?

    
pregunta Allenph

4 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 lo está alimentando. Debe insertar 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 UART página de Wikipedia .

Cuando no está enviando, el bus está inactivo y se mantiene en un estado lógicamente alto. Cuando está comenzando 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 está llegando 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 transmiten al microprocesador deben configurarse con la misma velocidad de transmisión, paridad y número de bits de parada.

    
respondido por el Mattias Johansson
6

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

    
respondido por el pjc50
5

Todos los caracteres ASCII tienen un ancho de 8 bits, se puede ver 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, también junto a esos datos de 8 bits, hay bits de PARADA y ARRANQUE, PARIDAD y algunos más, que puede ver en la imagen que se muestra a continuación y que juntos forman la comunicación de UART paquete.

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

    
respondido por el Lazar
0

El protocolo UART, como explicó Mattias, es un protocolo asíncrono basado en el tiempo. Lo que define los límites entre los bits es el tiempo tomado desde el principio del bit de inicio. Por lo tanto, el microcontrolador "muestreará" el bit (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, por lo que puede 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 suele ser, pero no siempre, ancho de 8 bits, 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 caracter entrara en el siguiente cuadro. Cuando termina cada cuadro, el microcontrolador comienza a escuchar el siguiente cuadro automáticamente, de modo que cuando llega el siguiente bit de inicio ya sabe que debe comenzar un nuevo cuadro. Así es como se separan los personajes.

Además, agregaré que en realidad no necesita dos frecuencias para transmitir a un microcontrolador receptor 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, muy parecido al código Morse. Recuerde usar generalmente portadoras con frecuencias mucho más altas que la velocidad de transmisión, de lo contrario los circuitos más simples no funcionarán correctamente.

    
respondido por el Ronan Paixão

Lea otras preguntas en las etiquetas