Evitando confusão entre nenhuma entrada e zero no binário?


10

Suponha que eu esteja transmitindo dados por FM, onde 0 é 2Hz e 1 é 4Hz. O transmissor está transmitindo 2Hz quando não há entrada. Se eu alimentasse o binário recebido na porta UART de um microcontrolador, como o microcontrolador diferenciaria entre nenhum dado e 0?

Isso se torna relevante ao transmitir caracteres ASCII, por exemplo. Suponha a seguinte sequência:

01000110 01101111 01101111 01100010 01100001 01110010

Como adicionei espaços, podemos traduzir isso para:

Foobar

Mas para uma máquina, a string ficaria assim:

010001100110111101101111011000100110000101110010

Como você criaria esses "espaços" para não confundir os caracteres ASCII ao receber o binário?


5
Aqui está como o UART resolve isso, link . Pare e inicie os bits, pois você o alimenta com uma porta UART e também os transmite.
Bence Kaulics

Receio não entender bem o seu diagrama. Parece que o "Start Bit" é simplesmente zero, o que restabelece o meu problema. Por exemplo, como saberia a diferença entre 01111000 e 00111100 se a sequência fosse 000 01111000 000?
Allenph

2
@ Allenph, quando você não está enviando o barramento, ele fica ocioso e é mantido em um estado logicamente alto. Quando você inicia a transmissão de um pacote, o primeiro bit é sempre logicamente baixo. Este é o bit inicial. Em seguida, segue oito bits de dados e, em seguida, um bit de parada logicamente alto. O microprocessador sabe quando o próximo bit está chegando, pois sabe a velocidade do barramento que você configurou. Tanto o microprocessador quanto a unidade que está transmitindo ao microprocessador precisam ser configurados com a mesma velocidade de transmissão.
Mattias Johansson

Respostas:


16

Se você alimentar alguma coisa na porta UART de um microprocessador, deverá seguir o protocolo de comunicação UART se desejar que o microprocessador entenda o que está sendo alimentado. Você precisa incorporar cada caractere ASCI em um pacote UART que contenha um bit de início, um bit de parada e possivelmente um bit de paridade; muito mais informações estão disponíveis na página da Wikipedia do UART .

Quando você não está enviando, o barramento fica ocioso e é mantido em um estado logicamente alto. Quando você inicia a transmissão de um pacote, o primeiro bit é sempre logicamente baixo. Este é o bit inicial. Em seguida, segue oito bits de dados e, em seguida, um bit de parada logicamente alto. O microprocessador sabe quando o próximo bit está chegando, pois sabe a velocidade do barramento que você configurou. Portanto, é possível transmitir, por exemplo, dois zeros um ao lado do outro. Tanto o microprocessador quanto a unidade que está transmitindo ao microprocessador precisam ser configurados com a mesma velocidade de transmissão, paridade e número de bits de parada.


2
Um ponto importante é que o número configurado de bits de parada é mínimo, não máximo. O estado ocioso da linha serial assíncrona é um bit de parada estendido. Portanto, se o rádio precisar ficar ocioso em 0, a resposta mais fácil é inverter a saída UART antes de conduzir o rádio com ele para que fique ocioso em 0 e 1 seja o começo. Inverta os dados recebidos antes de manipulá-los com um UART.
RBerteig

6

Existem muitas técnicas para isso. Você pode querer olhar para a codificação Manchester ou códigos NRZ. Ou codificação 8b / 10b , que mapeia a cada 8 bits de dados para uma sequência de 10 bits que permite recuperação do relógio, correção de erros e símbolos especiais de "vírgula" que podem ser usados ​​para detectar o início e o fim de uma transmissão.


5

Todos os caracteres ASCII têm 8 bits de largura, é possível ver isso em uma tabela ASCII. Os valores HEX dos caracteres ASCII não vão além de FF (1111 1111)

O UART não pode receber mais de um byte de dados (8 bits) por vez, também, além dos dados de 8 bits, existem os bits STOP e START, PARITY e mais alguns, que você pode ver na figura abaixo e que juntos formam o pacote de comunicação UART.

insira a descrição da imagem aqui

Então, quando você envia caracteres ASCII para o UART, envia-os um por um e é assim que a string é criada. Você já sabe que a string é apenas uma matriz de caracteres.


4
ASCII é 7 bits, não 8, no entanto, é comum colocá-lo em um pedaço de 8 bits para tornar o alinhamento trivial. Também permite outros conjuntos de caracteres e utf8.
Hildred 13/05/15

0

O protocolo UART, como Mattias explicou, é um protocolo assíncrono baseado em tempo. O que define os limites entre os bits é o tempo gasto desde o início do bit inicial. Portanto, o microcontrolador "amostrará" os bits (N+half)/baudratesegundos após o início do bit. O meio bit é apenas para amostrar no meio dos bits, para que possa haver uma diferença de meio bit no tempo entre o receptor e o transmissor (lembre-se de que as diferenças são cumulativas e o pior caso ocorre no último bit de cada quadro, o que geralmente é, mas nem sempre, com largura de 8 bits, dependendo da configuração). A chave para fazê-lo funcionar é ter o receptor e o transceptor com taxas de transmissão o mais próximo possível.

Portanto, o microcontrolador conta o tempo entre cada bit para saber onde cada bit está dentro de um quadro. O próximo caractere entrará no próximo quadro. Quando cada quadro termina, o microcontrolador começa a ouvir o próximo quadro automaticamente; assim, quando o próximo bit inicial chegar, ele já sabe que deve iniciar um novo quadro. É assim que os caracteres são separados.

Além disso, acrescentarei que você não precisa de duas frequências para transmitir a um microcontrolador que recebe UART. Você pode usar uma única frequência como OOK em vez de duas frequências como FSK . Possui maior eficiência espectral e os circuitos são muito mais simples, já que você só precisa de um comutador de ondas portadoras como transmissor e um único detector de frequência como receptor, praticamente como código morse. Lembre-se de geralmente usar portadoras com frequências muito maiores que a taxa de transmissão, caso contrário, os circuitos mais simples não funcionarão corretamente.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.