Diferença entre o valor binário real e o valor do osciloscópio


14

Tentei ver um caractere ASCII "A" com um osciloscópio, mas o valor binário real e os valores do osciloscópio são diferentes. Por que isso? Valor binário ASCII "A" - 01000001

O osciloscópio exibe este gráfico:

Ascii A

Ascii A

Eu uso um Arduino Uno para enviar o valor ASCII usando o código:

void setup() {  
  Serial.begin(9600);  
}  

void loop() {  
  Serial.println("A");  
  delay(1000);  
}

Respostas:


35

Veja como você lê a forma de onda do osciloscópio. Levei um tempo para editar sua imagem da forma de onda e anotá-la para mostrar qual bit é qual. O microcontrolador envia 10 bits por caractere; START, que é sempre 0, 8 bits de dados e STOP, que é sempre 1. A linha também fica em 1; portanto, a primeira borda descendente de START alerta o receptor que um bytes está chegando. Os bits são enviados primeiro ao LSB; portanto, se você quiser "dar uma olhada" neles aritmeticamente, precisará espelhá-los horizontalmente para que façam algum sentido. A largura de cada bit é determinada pela taxa de transmissão, e o transmissor e o receptor devem saber qual é a taxa de transmissão.

Na imagem abaixo, você pode ver que ele envia três caracteres: caractere ASCII 'A', retorno de carro e avanço de linha.

insira a descrição da imagem aqui


Se for comunicação serial, onda dê assim. certo? O que são CR e LF? O que outros dados podem obter como CR ou LF?
user38701

1
CR é retorno de carro, LF é avanço de linha. Juntos, eles formam uma Nova Linha, por exemplo, o cursor vai para o início da próxima linha. Eles fazem parte do padrão "ASCII" ("Código Padrão Americano para Intercâmbio de Informações"), do "gráfico ASCII" do Google ou algo assim.
pkP

@ user38701: CRLF é o que acontece quando você pressiona a tecla Enter. Tecnicamente, o CR deve ser a chave de retorno e o LF deve ser a tecla Enter, mas o console serial interpreta a tecla Enter como CRLF (ou, às vezes, apenas LF). Na maioria das linguagens de programação, CR é "\ r" e LF é "\ n", mas alguns CRLF saída compiladores / idiomas para "\ n"
slebetman

1
O retorno de carro é simples. Ele usou um printlncomando, o que significa imprimir a string, além de um "\ r \ n". Então, três caracteres
ps95

1
vale notar que as terminações de linha são específicas do sistema. O LCF é principalmente a terminação de linha do Windows e do Arduino. Se você repetisse o mesmo teste usando um terminal no Linux como a fonte do "A", você apenas veria o LF.
Nicolas Holthaus

13

Se você olhar para a documentação do Arduino println () , verá que ela anexa um retorno de carro e avanço de linha no final. Portanto, em decimal, você terminará com 65 (A), 13 (CR) e 10 (LF), que em binário se traduz em:

01000001 00001101 00001010

Os dados seriais assíncronos são enviados primeiro ao LSB para que se tornem:

10000010 10110000 01010000

Seu sinal está ocioso, então o bit inicial será 0 e o bit final será 1, adicionando isso a cada byte e você terá:

0100000101 0101100001 0010100001

É um pouco difícil determinar o tempo exato do seu diagrama, mas isso parece corresponder pelo menos aproximadamente e deve lhe dar uma idéia de onde vêm alguns bits extras e por que eles são reordenados. O link da Wikipedia fornecido pelo Kvegaoro fornece muitas informações básicas sobre dados seriais assíncronos.


1

Se você mostrar que o fluxo é serial assíncrono , o osciloscópio mostrará o bit inicial correspondente, o (s) bit (s) de parada e os bits de paridade. Também leve em consideração se o seu sinal está invertido ou não e o clima é o bit mais significativo primeiro ou o menos significativo primeiro. Se você adicionar mais detalhes sobre o fluxo serial que você representou na imagem, poderemos fornecer uma resposta melhor e mais detalhada, caso contrário, esse é apenas um palpite.

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.