Diferencia entre el valor binario real y el valor del osciloscopio

14

Traté de ver un carácter ASCII "A" con un osciloscopio, pero el valor binario real y los valores del osciloscopio son diferentes ¿por qué es eso? Valor binario ASCII "A" - 01000001

El osciloscopio muestra este gráfico:

Ascii A

Ascii A

Yo uso un Arduino Uno para enviar el valor ASCII usando el código:

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

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

Respuestas:

35

Así es como se lee la forma de onda del osciloscopio. Me tomé el tiempo para editar su imagen de forma de onda y anotarla para mostrar qué bit es cuál. El microcontrolador envía 10 bits por carácter; START, que siempre es 0, 8 bits de datos y STOP, que siempre es 1. La línea también descansa en 1, por lo que el primer flanco descendente START le avisa al receptor que están llegando bytes. Los bits se envían LSB primero, por lo que si desea "echarles un vistazo" aritméticamente, debe duplicarlos horizontalmente para que tengan sentido. El ancho de cada bit está determinado por la velocidad de transmisión, y tanto el transmisor como el receptor deben saber cuál es la velocidad de transmisión.

En la imagen a continuación, puede ver que envía tres caracteres: el carácter ASCII 'A', un retorno de carro y un avance de línea.

ingrese la descripción de la imagen aquí

PkP
fuente
Si se trata de comunicación en serie, wave dar así. ¿Derecha? ¿Qué son CR y LF? ¿Qué otros datos pueden obtener como CR o LF?
user38701
1
CR es retorno de carro, LF es avance de línea. Juntos forman una nueva línea, por ejemplo, el cursor va al comienzo de la siguiente línea. Forman parte del estándar "ASCII" ("Código estándar estadounidense para el intercambio de información"), el "cuadro ASCII" de Google o algo así.
PkP
@ user38701: CRLF es lo que sucede cuando presiona la tecla Intro. Técnicamente, se supone que CR es la clave de retorno y se supone que LF es la clave de ingreso, pero la consola serial interpreta que la clave de ingreso es CRLF (o, a veces, solo LF). En la mayoría de los lenguajes de programación, CR es "\ r" y LF es "\ n", pero algunos compiladores / idiomas
generan
1
El retorno de carro es simple. Usó un printlncomando, que significa imprimir la cadena, así como un "\ r \ n". Entonces tres personajes
ps95
1
Vale la pena señalar que las terminaciones de línea son específicas del sistema. CRLF es principalmente la terminación de línea de Windows y Arduino. Si repitió la misma prueba usando un terminal en Linux como la fuente de la "A", solo vería el LF.
Nicolas Holthaus
13

Si observa la documentación de println () de Arduino , verá que agrega un retorno de carro y un salto de línea al final. Entonces, en decimal, terminará con 65 (A), 13 (CR) y 10 (LF) que en binario se traduce como:

01000001 00001101 00001010

Los datos en serie asíncronos se envían primero a LSB para que se conviertan en:

10000010 10110000 01010000

Su señal está inactiva en alto, por lo que el bit de inicio será 0 y el bit de parada será 1, por lo que se agrega a cada byte y termina con:

0100000101 0101100001 0010100001

Es un poco difícil calcular el tiempo exacto de su diagrama, pero eso parece al menos coincidir aproximadamente y debería darle una idea de dónde provienen algunos de los bits adicionales y por qué se reordenan. El enlace de Wikipedia proporcionado por Kvegaoro ofrece una gran cantidad de información de fondo sobre datos seriales asíncronos.

PeterJ
fuente
1

Si ese flujo que muestra es serial asíncrono , el osciloscopio mostrará el bit de inicio correspondiente, los bits de parada y los bits de paridad. También tenga en cuenta si su señal está invertida o no y el clima es el bit más significativo primero o el bit menos significativo primero. Si agrega más detalles sobre la transmisión en serie que ha representado en la imagen, podemos darle una respuesta mejor y más detallada; de lo contrario, esto es solo una suposición educada

Kvegaoro
fuente