Differenz zwischen realem Binärwert und Oszilloskopwert


14

Ich habe versucht, ein ASCII-Zeichen "A" mit einem Oszilloskop zu sehen, aber der tatsächliche Binärwert und die Oszilloskopwerte sind unterschiedlich. Warum ist das so? ASCII "A" Binärwert - 01000001

Das Oszilloskop zeigt dieses Diagramm an:

Ascii A

Ascii A

Ich benutze ein Arduino Uno, um den ASCII-Wert mit dem Code zu senden:

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

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

Antworten:


35

So lesen Sie die Oszilloskop-Wellenform. Ich habe mir die Zeit genommen, Ihr Wellenformbild zu bearbeiten und es mit Anmerkungen zu versehen, um zu zeigen, welches Bit welches ist. Der Mikrocontroller sendet 10 Bits pro Zeichen. START (immer 0, 8 Datenbits) und STOP (immer 1). Die Leitung bleibt ebenfalls auf 1, sodass der Empfänger mit der ersten abfallenden START-Flanke über das Kommen eines Bytes informiert wird. Die Bits werden zuerst mit LSB gesendet. Wenn Sie sie also aritmetisch betrachten möchten, müssen Sie sie horizontal spiegeln, damit sie einen Sinn ergeben. Die Breite jedes Bits wird durch die Baudrate bestimmt, und sowohl der Sender als auch der Empfänger müssen wissen, wie hoch die Baudrate ist.

Aus dem folgenden Bild können Sie ersehen, dass drei Zeichen gesendet werden: ASCII-Zeichen 'A', ein Wagenrücklauf und ein Zeilenvorschub.

Bildbeschreibung hier eingeben


Wenn es sich um serielle Kommunikation handelt, geben Wave wie folgt. richtig? Was sind CR und LF? Was können andere Daten wie CR oder LF bekommen?
user38701

1
CR ist Wagenrücklauf, LF ist Zeilenvorschub. Zusammen bilden sie eine Newline, dh der Cursor springt an den Anfang der nächsten Zeile. Sie sind Teil des "ASCII" -Standards ("American Standard Code for Information Interchange"), Google "ASCII Chart" oder so etwas.
PkP

@ user38701: CRLF passiert, wenn Sie die Eingabetaste drücken. Technisch gesehen sollte CR die Eingabetaste und LF die Eingabetaste sein, aber die serielle Konsole interpretiert die Eingabetaste als CRLF (oder manchmal nur LF). In den meisten Programmiersprachen ist CR "\ r" und LF "\ n", aber einige Compiler / Sprachen geben CRLF für "\ n" aus
slebetman

1
Der Wagenrücklauf ist einfach. Er benutzte einen printlnBefehl, was bedeutet, dass der String gedruckt wird, sowie ein "\ r \ n". Also drei Zeichen
ps95

1
Es ist erwähnenswert, dass Leitungsabschlüsse systemspezifisch sind. CRLF ist in erster Linie der Windows- und Arduino-Leitungsabschluss. Wenn Sie denselben Test mit einem Terminal unter Linux als Quelle des "A" wiederholen, sehen Sie nur den LF.
Nicolas Holthaus

13

Wenn Sie sich die Arduino println () -Dokumentation ansehen, werden Sie feststellen, dass am Ende ein Wagenrücklauf und ein Zeilenvorschub angehängt werden. In Dezimalform erhalten Sie 65 (A), 13 (CR) und 10 (LF), was in Binärform übersetzt bedeutet:

01000001 00001101 00001010

Asynchrone serielle Daten werden zuerst per LSB gesendet, so dass:

10000010 10110000 01010000

Ihr Signal ist im Leerlauf hoch, so dass das Startbit 0 und das Stoppbit 1 ist. Fügen Sie dies zu jedem Byte hinzu und Sie erhalten:

0100000101 0101100001 0010100001

Es ist ein bisschen schwierig, das genaue Timing aus Ihrem Diagramm herauszufinden, aber das scheint zumindest in etwa zu stimmen und sollte Ihnen eine Vorstellung davon geben, woher einige der zusätzlichen Bits kommen und warum sie neu angeordnet werden. Der von Kvegaoro bereitgestellte Wikipedia-Link bietet viele gute Hintergrundinformationen zu asynchronen seriellen Daten.


1

Wenn es sich bei dem Stream, den Sie anzeigen , um einen asynchronen seriellen Stream handelt , zeigt das Oszilloskop die entsprechenden Start-, Stopp- und Paritätsbits an. Berücksichtigen Sie auch, ob Ihr Signal invertiert ist oder nicht und ob es zuerst das höchstwertige Bit oder zuerst das niedrigstwertige Bit ist. Wenn Sie weitere Details zu dem seriellen Stream hinzufügen, den Sie in der Abbildung dargestellt haben, können wir Ihnen eine detailliertere Antwort geben. Andernfalls handelt es sich nur um eine fundierte Vermutung

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.