Frage:
Dekodieren / Analysieren Sie die folgenden UART-Signale
user405714
2020-05-25 21:15:41 UTC
view on stackexchange narkive permalink

Ich habe mit UART eine 2 und eine 9 gesendet.Die Baudrate beträgt 9600, es gibt keine Parität und es gibt 8 Datenbits.

Wie wir wissen, wird 9 binär als 1001 dargestellt.Dies ist jedoch das, was ich von meinem UART-Signal erhalte:

enter image description here

Eine 2 wird als 0010 dargestellt, aber das bekomme ich von meinem UART-Signal: enter image description here Ich weiß, dass ich auf das Startbit achten muss, aber ansonsten fällt es mir schwer, die Logik in diesem Signal zu erkennen.

NOTE:

Das Signal funktioniert, aber ich brauche nur Hilfe bei der Analyse.

Ohne die Wellenform zu betrachten, können Sie Binärzahlen und ASCII-Zeichencodes verwechseln, z. B. den numerischen Wert 2 mit dem Zeichen '2' mit dem ASCII-Code 0x32.Bitte verwenden Sie auch keine zufälligen Tags. Tags sind für das, worum es bei einer Frage * geht *, was tangential involviert war, aber in Ihrem Beitrag keine Rolle spielt.
Ihr Oszilloskop sieht modern genug aus, um eine UART-Dekodierung zu erhalten, obwohl es möglicherweise auch neu genug ist, dass Sie für das Privileg bezahlen müssen.
Fünf antworten:
Michael Karas
2020-05-25 21:37:18 UTC
view on stackexchange narkive permalink

Lassen Sie uns Ihre erste Scope-Aufnahme kommentieren.Wenn wir dies tun, beachten Sie, dass das Bit niedrigster Ordnung des Binärwerts zuerst übertragen wird.Herkömmliche Notation in diesem Feld besteht darin, die Bits in einem Byte wie folgt zu ordnen:

[Bit 7] [Bit 6] [Bit 5] [Bit 4] [Bit 3] [Bit 2] [Bit 1] [Bit 0]

Wenn ich also annotiere und dann auswerte, werden die Bitpositionen von den Positionen gespiegelt, die auf den kommentierten Scope-Aufnahmen angezeigt werden.

enter image description here

Das dort dargestellte Bitmuster ist 0b00111001.

Das ist dasselbe wie 0x39.

0x39 ist der ASCII-Code für ein '9'-Zeichen.

Machen wir dasselbe für Ihre zweite Scope-Aufnahme.

enter image description here

Hier wird das Bitmuster als 0b00110010 dargestellt.

Das ist dasselbe wie 0x32.

0x32 ist der ASCII-Code für das Zeichen '2'.

Die ASCII-Erklärung ist irgendwie sinnvoll, aber ich verstehe nicht, warum Bit 0 übersprungen wird.
Für das Zeichen 9 schreiben Sie nur 0b00111001, aber wenn wir Bit 0 einschließen, wäre es 0b100111001
Startbits sind immer ein Nullpegelbit und haben die gleiche Breite.Die roten Linien Ihres zweiten Bildes markieren tatsächlich Bit 1. Bit 0 wird nicht übersprungen.
Stoppbits sind immer ein einstufiges Bit und haben die gleiche Breite.Das Stoppbit ist nicht Teil der UART 8-Bit-Daten.
Wollen Sie damit sagen, dass Bit 0 das Startbit ist?
Nein. Das Startbit ist in meinen Anmerkungen deutlich markiert und nicht Bit 0.
Aber warum nehmen wir es nicht in das Bitmuster auf, das Sie damals aufgeschrieben haben?
Besonders wenn Bit 0 eine '1' wie im ersten Bild ist.
Ich habe die Bitmuster nur für den 8-Bit-Datenteil der UART-Übertragung geschrieben.Ich habe die Start- und Stoppbits nicht eingeschlossen.
Wie erhält man dann eine '1' am Ende von 0b00111001, wenn das letzte Bit im Bild vor dem Stoppbit eine '0' ist?Ich spreche in diesem Fall über das erste Bild.
Ich sage, dass die Bitmuster, die Sie aufschreiben, nicht wie die Bitmuster aussehen, die ich auf den Bildern sehe.
Sie lesen sie rückwärts.LSB bedeutet, dass das niedrigstwertige Bit an erster Stelle steht.Sie müssen sie von links nach rechts invertieren.
Ich habe die Bitnummern in den Bildern angegeben.In dieser Disziplin ist Bit 0 das niedrigstwertige Bit.
Mattman944
2020-05-25 21:27:51 UTC
view on stackexchange narkive permalink

Sie haben wahrscheinlich eine ASCII 9 gesendet, keine binäre 9. ASCII 9 ist 0x39.Bits werden zuerst mit LSbit gesendet.

0011 1001 umgekehrt ist 1001 1100

enter image description here

Andy aka
2020-05-25 21:26:34 UTC
view on stackexchange narkive permalink

UARTs senden normalerweise zuerst das niedrigstwertige Bit, daher erhalten Sie dieses für 9 und niedriger für 2: -

enter image description here

UART-Zeichenrahmen: -

enter image description here

Oh Elend, eine Abwertung - fühlt sich jemand menschlich genug, um sich dem anzuschließen?
Ich habe nicht abgelehnt, aber Ihre Antwort ist die einzige, in der ASCII nicht erwähnt wird.
Justme
2020-05-25 21:27:15 UTC
view on stackexchange narkive permalink

Zunächst einmal sind dies nicht die Zahlen 9 und 2, sondern die ASCII-Zeichensymbole '9' und '2', die 0x39 und 0x32 entsprechen.

Die Bits werden auch zuerst LSB gesendet.Aus diesem Grund sehen Sie ein führendes 0-Startbit und dann 10011100 für '9' und 01001100 für '2'.

aMike
2020-05-25 21:24:17 UTC
view on stackexchange narkive permalink

Der von Ihnen gesendete 2 ist tatsächlich das -Zeichen zwei, nicht der Dezimalwert von 2. Der ASCII-Code für 2 lautet 0x32 oder 0b00110010 und entspricht einem Ihrer ZeichenBilder.Außerdem werden die Bits von LSB an MSB gesendet, sodass die im Bereich angezeigten Pegel von links nach rechts 0,1,0,0,1,1,0,0 betragen.



Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 4.0-Lizenz, unter der er vertrieben wird.
Loading...