Forum: Mikrocontroller und Digitale Elektronik UART: Verschliffene Flanken - wann werden die Datenbits gesampelt?


von Third E. (third-eye)


Lesenswert?

Hallo zusammen,

stellt euch eine UART-Übertragung zwischen zwei Mikrocontrollern (z.B. 
STM32) vor, bei der wegen Kapazitäten die Signalflanken stark 
verschliffen sind, die Pegel high und low aber noch OK sind.
Wann sampelt der Receiver? Gibt es da einen Standard oder Quasi-Norm, zu 
welchem Zeitpunkt das jeweilige Bit gültig sein muss?
Da es ja keine Clock-Leitung gibt, müssen die Sampling-Zeitpunkte ja 
zwangsweise aus den "unschön aussehenden" Bits gewonnen werden. Wie 
läuft das ab?
Hintergrund ist, ich möchte generell nachvollziehen, was die 
kritischsten Einflüsse für UART-Kommunikation sind.

Grüße
Third-Eye

von Falk B. (falk)


Lesenswert?

Third E. schrieb:
> stellt euch eine UART-Übertragung zwischen zwei Mikrocontrollern (z.B.
> STM32) vor, bei der wegen Kapazitäten die Signalflanken stark
> verschliffen sind,

Warum? Wieviel m Kabel willst du denn mit wieviel Baud befeuern?
Zeig mal einen gescheiten Screenshot.

> die Pegel high und low aber noch OK sind.
> Wann sampelt der Receiver?

Meistens in der Mitte, ggf. auch dreimal und dann eine 
Mehrheitsentscheidung. Aber "Mitte" heißt auch, in Bezug auf die 
Schaltschwellen des Empfängers! Denn dort fängt der intern an zu zählen!

> Da es ja keine Clock-Leitung gibt, müssen die Sampling-Zeitpunkte ja
> zwangsweise aus den "unschön aussehenden" Bits gewonnen werden. Wie
> läuft das ab?

Die fallende Flane des Start-Bits ist er Startzeitpunkt für das GESAMTE 
Byte + Stop Bit. Dort wird dann mit x8 oder meist eher x16 fachem Takt 
abgetastet und entschieden.

> Hintergrund ist, ich möchte generell nachvollziehen, was die
> kritischsten Einflüsse für UART-Kommunikation sind.

von Harald K. (kirnbichler)


Lesenswert?

Third E. schrieb:
> Wann sampelt der Receiver?

Der sampelt ständig, mit dem acht- oder  16fachen der Baudrate, je nach 
Einstellung der UART, und trifft dann einen Mehrheitsentscheid.

von Falk B. (falk)


Lesenswert?

Harald K. schrieb:
>> Wann sampelt der Receiver?
>
> Der sampelt ständig, mit dem acht- oder  16fachen der Baudrate, je nach
> Einstellung der UART, und trifft dann einen Mehrheitsentscheid.

Stimmt, aber diese Aussage reicht nicht. Denn die meisten Samples werden 
nicht ausgewertet. ;-)

von Oliver S. (oliverso)


Lesenswert?

Falk B. schrieb:
> Meistens in der Mitte, ggf. auch dreimal und dann eine
> Mehrheitsentscheidung. Aber "Mitte" heißt auch, in Bezug auf die
> Schaltschwellen des Empfängers! Denn dort fängt der intern an zu zählen!

Oder auch in Bezug auf einen internen Referenztakt, der zum Ende des 
Bytes schon ordentlich zum Signal hin verschoben sein kann.
Genaueres dazu sollte, wie eigentlich immer, im Datenblatt des 
verwendeten Devices stehen.

Oliver

von Wendels B. (wendelsberg)


Lesenswert?

z.B. Atmega644P
16.9.2 Asynchronous Data Recovery
1
The decision of the logic level of the received bit is taken by doing a majority voting of the logic
2
value to the three samples in the center of the received bit.

Ob das bei Deinem Wunschprozessor auch so gemacht wird, musst Du dessen 
DB entnehmen.

: Bearbeitet durch User
von Jim M. (turboj)


Lesenswert?

Third E. schrieb:
> Wann sampelt der Receiver? Gibt es da einen Standard oder Quasi-Norm, zu
> welchem Zeitpunkt das jeweilige Bit gültig sein muss?

Datenblatt/Manual lesen. Gute Receiver samplen in der Mitte des Bits, 
d.h. wo der Pegel am stabilsten sein sollte. Hat aber auch was mit 
möglichen Differenzen in der Baudrate zu tun, insbesondere wenn man 
keine Quarz Taktquelle nutzt.

Genaueres musst Du im Handbuch nachlesen, denn das kann u.U. auch von 
den konkreten Einstellungen am Uart Peripherial abhängen. Manche µC 
unterstützen verschiedene Oversamplings.

von Falk B. (falk)


Lesenswert?

Oliver S. schrieb:
>> Meistens in der Mitte, ggf. auch dreimal und dann eine
>> Mehrheitsentscheidung. Aber "Mitte" heißt auch, in Bezug auf die
>> Schaltschwellen des Empfängers! Denn dort fängt der intern an zu zählen!
>
> Oder auch in Bezug auf einen internen Referenztakt, der zum Ende des
> Bytes schon ordentlich zum Signal hin verschoben sein kann.

Nö. Wenn er das ist, ist die Baudrate im Sender oder Empfänger falsch 
eingestellt. Im Normalfall sollte der Frequenzfehler <1% sein.

von Max M. (jens2001)


Lesenswert?

Falk B. schrieb:
> Die fallende Flane des Start-Bits ist er Startzeitpunkt für das GESAMTE
> Byte + Stop Bit

Falsch.
Die STEIGENDE Flanke des Startbits ist der Startzeitpunkt.
Wenn das 1. Datenbit high/0 ist gibt es nach dem Starbit keine fallende 
Flanke.

: Bearbeitet durch User
von Norbert (der_norbert)


Lesenswert?

Max M. schrieb:
> Falsch.
> Die STEIGENDE Flanke des Startbits ist der Startzeitpunkt.

Hmmm, die fallende Flanke - also der Beginn des Startbits - ist 
garantiert immer vorhanden.
Eine steigende Flanke hingegen ist optional und nur gewährleistet wenn 
das erste Datenbit (LSB) ›1‹ ist.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Third E. schrieb:
> Wann sampelt der Receiver? Gibt es da einen Standard
Nein. Deshalb: welcher Receiver?

Max M. schrieb:
> Die STEIGENDE Flanke des Startbits ist der Startzeitpunkt
Bei 5V TTL ist der Ruhepegel "high". Da gilt die fallende Flanke.

Bei V24/RS232 ist der Ruhepegel unter 0V. Da gilt dann die steigende 
Flanke.

Kurz: die erste Flanke nach dem Ruhepegel ist de bBeginn des Startbits.

von Clemens L. (c_l)


Lesenswert?

Max M. schrieb:
> Die STEIGENDE Flanke des Startbits ist der Startzeitpunkt.

Das mag bei RS-232 so sein. Aber nicht bei den Logik-Signalen, die der 
Mikrocontroller versteht (Mark = VCC, Space = GND).

von Rudi (experte)


Lesenswert?

Norbert schrieb:
> Max M. schrieb:
>> Falsch.
>> Die STEIGENDE Flanke des Startbits ist der Startzeitpunkt.
>
> Hmmm, die fallende Flanke - also der Beginn des Startbits - ist
> garantiert immer vorhanden.
> Eine steigende Flanke hingegen ist optional und nur gewährleistet wenn
> das erste Datenbit (LSB) ›1‹ ist.

Jein, kommt immer drauf an, ob man vor oder nach dem Levelshifter misst, 
da der Levelshifter invertiert. Kann also fallend oder steigend sein, je 
nach Messort.

von Clemens L. (c_l)


Angehängte Dateien:

Lesenswert?

Third E. schrieb:
> Wann sampelt der Receiver? Gibt es da einen Standard oder Quasi-Norm, zu
> welchem Zeitpunkt das jeweilige Bit gültig sein muss?

Fast alle Receiver sampeln dreimal in der Mitte des Bits, mit 8× oder 
16× Oversampling. Hier der MSP430.

von Oliver S. (oliverso)


Lesenswert?

Falk B. schrieb:
> Nö. Wenn er das ist, ist die Baudrate im Sender oder Empfänger falsch
> eingestellt. Im Normalfall sollte der Frequenzfehler <1% sein.

Hätte, müsste, sollte, könnte, …, zählt aber in der Realität nicht.
Oliver

von Max M. (jens2001)


Lesenswert?

Rudi schrieb:
> kommt immer drauf an,

Ja, es kommt immer drauf an.

Also können wir uns drauf einigen?- die Flanke von Ruhepegel zu 
Startbit.

von Norbert (der_norbert)


Lesenswert?

Lothar M. schrieb:
> Bei 5V TTL ist der Ruhepegel "high". Da gilt die fallende Flanke.
> Bei V24/RS232 ist der Ruhepegel unter 0V. Da gilt dann die steigende
> Flanke.

Eröffnungsbeitrag:
Third E. schrieb:
> Hallo zusammen,
> stellt euch eine UART-Übertragung zwischen zwei Mikrocontrollern …

Vor allem jedoch der Titel:
Wann werden die Datenbits gesampelt…

von Rainer W. (rawi)


Lesenswert?

Jim M. schrieb:
> Gute Receiver samplen in der Mitte des Bits,
> d.h. wo der Pegel am stabilsten sein sollte.

Schreibst du einem übertragenen Datenbit prophetische Fähigkeiten zu?
Woher soll der Pegel im Voraus wissen, wann das Bit zu Ende ist und 
möglicherweise instabil werden?

Der Grund für eine Abtastung in der Mitte ist bestmögliche Resistenz 
gegen Abweichungen der Symbolrate zwischen Sender- und Empfänger-UART.

von Stefan F. (Gast)


Lesenswert?

Lothar M. schrieb:
> Bei V24/RS232 ist der Ruhepegel unter 0V. Da gilt dann die steigende
> Flanke.

Eher -12V

von Norbert (der_norbert)


Lesenswert?

Stefan F. schrieb:
> Eher -12V

Noch eher -3 … -15 Volt. ;-)

von Ralf K. (kurtx)


Lesenswert?

Wir reden hier von hw-programmierten Serial Interfaces von µCs.
Dort wird die 8- (high-speed), oder 16-fache Datenrate (Baudrate) 
vorgegeben, dazu die Bitzahl pro Byte, Parity, Anzahl der Stoppbits etc.

Nach der -wie auch immer verschliffenen- Anfangsflanke des Startbits 
wird
jedes rechnerisch mögliche Byte per Abtastung zur Bit-Mitte und 
Mitte+/-1 Takt erfasst. Der Bit-Wert wird mit 2-aus-3-Auswertung 
ermittelt.

Die Abtastrate sollte besser 2% zur Baudrate passen. Bei 8N1 ist dann 
die Mitte des Stoppbits noch auf <20% genau. Der Vorteil von 16-facher 
Abtastung gegenüber 8-facher Abtastung ist ein Messwert, sonst eher 
gering.

Bei halbwegs linearem Tiefpassverhalten des Übertragungsweges sollten 
die Abtastfehler bis zu Fg >> Fbps auch nicht zu groß werden.

Richtig gefährlich kann eine DC-Unterdrückung werden. (Ein Kondensator 
im Daten-Pfad).
Folgen viele gleiche Bits aufeinander, verschiebt sich der mittlere 
Pegel und damit auch der Referenz-Zeitpunkt der erkannten Anfangsflanke 
des Startbits. Dagegen helfen nur Codes, die bei etwas erhöhter 
Datenrate zu mehr Pegelwechseln und damit geringer Verschiebung des 
mittleren Pegels führen.

Kostet etwas mehr Kodier- / Dekodier-Aufwand, ist aber kein Hexenwerk.
Umsonst gibt es nun mal nichts...

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Norbert schrieb:
> Wann werden die Datenbits gesampelt…
Die Antwort habe ich auch geschrieben: implemetierungsabhängig.

Ralf K. schrieb:
> Nach der Anfangsflanke des Startbits wird
> jedes rechnerisch mögliche Byte per Abtastung zur Bit-Mitte und
> Mitte+/-1 Takt erfasst. Der Bit-Wert wird mit 2-aus-3-Auswertung
> ermittelt.
Es gibt sehr viele Implementierungen, die einfach nur den Pegel sn der 
Bitmitte einlesen.

> Richtig gefährlich kann eine DC-Unterdrückung werden
Normale asynchrone serielle Schnittstellen, die eine RS232 Codierung 
verwenden, sind nicht gleichspannungsfrei und können dedhalb nicht 
einfach über Kondensatoren oder Trafos galvanisch getrennt werden.

Wenn man sowas braucht, dann muss z.B. eine NRZ Codierung verwendet 
verwendet werden. Dort steckt die Information nicht im Pegel, sondern im 
Zeitpunkt der Pegelwechsel/Flanken.

Norbert schrieb:
> Stefan F. schrieb:
>> Eher -12V
> Noch eher -3 … -15 Volt. ;-)
Soweit die normierte Theorie.
Bei allen meinen PCs und USB-Schnittstellenwandlern reicht aber statt 
der geforderten min. -3V ein Ruhepegel (logisch '1') von 0V und ein 
Aktivpegel ('0') von 3V.

von Norbert (der_norbert)


Lesenswert?

Lothar M. schrieb:
> Die Antwort habe ich auch geschrieben: implemetierungsabhängig.

Lothar, damit wollte ich zum Ausdruck bringen das dieser Vorgang im µC 
stattfindet. Die Anzahl Microconcoller welche an einem UART Eingangspin 
-15V … +15V erwarten geht zumindest meiner Erfahrung nach asymptotisch 
gegen NULL.
Daher ist es völlig irrelevant wie die physikalische Schnittstelle 
irgendwo in der Wildnis aussieht, der Microconcoller sieht die 
pegelangepasste Spannung. Und die ist nun mal Ruhe '1', Aktiv '0'.

Somit ist auch der irgendwo vorgebrachte Einwand mit den positiven und 
negativen Flanken des Startbits bei RS232 vs. µC völlig irrelevant.

Aber wenn wir uns dann schon über diese externen Schnittstellen 
unterhalten, dann sollten wir über die relevanten Pegel und nicht unser 
Bauchgefühl, die erlebte Wirklichkeit oder sonst etwas unterhalten. 
Jeder hat schon mal Dinge gesehen, oder von Dingen gehört, die außerhalb 
der Spezifikation funktionieren. Das ändert nichts an der selbigen.

von Joe L. (joelisa)


Lesenswert?

Norbert schrieb:
> Lothar M. schrieb:
>> Die Antwort habe ich auch geschrieben: implemetierungsabhängig.
>
> Lothar, damit wollte ich zum Ausdruck bringen das dieser Vorgang im µC
> stattfindet. Die Anzahl Microconcoller welche an einem UART Eingangspin
> -15V … +15V erwarten geht zumindest meiner Erfahrung nach asymptotisch
> gegen NULL.
> Daher ist es völlig irrelevant wie die physikalische Schnittstelle
> irgendwo in der Wildnis aussieht, der Microconcoller sieht die
> pegelangepasste Spannung. Und die ist nun mal Ruhe '1', Aktiv '0'.

Man tut gut daran, hier strikt zwischen Negativ- und Positiv-Logik zu 
unterscheiden, und Begriffe wie "log. 1" und "log. 0" nicht mit 
'Pegel-Angaben' wie "H/high" und "L/low" zu vermischen.

RS-232 ist eine Spannungsschnittstelle. Für die Datenleitungen (TxD und 
RxD) wird negative Logik verwendet, wobei eine Spannung zwischen −3V 
und −15V (also "low") eine "log. 1" und eine Spannung zwischen +3V und 
+15V (also "high") eine "log. 0" darstellt.

Als physikalische Schnittstelle am UART/uC verwendet _positive Logik_: 
klassisch TTL-Pegel mit Spannungen zwischen 2V und 5V ("high") 
entsprechen einer "log. 1", Spannungen zwischen 0V und 0.8V ("low") 
entsprechen einer "log. 0".

Startcondition:
Die inaktive Datenleitung (idle, verlängertes Stopbit) liegt auf "log. 
1", wechselt dann auf "log. 0" (Startbit) - entsprechend einer 
"1->0"-Flanke. Physikalisch entspricht dies auf RS232-Ebene einer 
"L->H"-Flanke, auf TTL-Ebene aber einer "H->L"-Flanke.

von Norbert (der_norbert)


Lesenswert?

Joe L. schrieb:
> Man tut gut daran, hier strikt zwischen Negativ- und Positiv-Logik zu
> unterscheiden, und Begriffe wie "log. 1" und "log. 0" nicht mit
> 'Pegel-Angaben' wie "H/high" und "L/low" zu vermischen.

Joe, wir reden hier eindeutig von dem, was ein Mikrocontroller an seinem 
Eingangspin "sieht" und an seinem Ausgangspin liefert.

Da braucht es keine Deutungshoheit.
Da braucht es keine Positiv/Negativ-Logik.
Wenn der Pegel tendenziell eher an der positiven Versorgungsspannung 
liegt, ist das nun einmal der UART-Ruhepegel. Wenn man das allen Erstes 
als ›0‹ ansehen möchte, ja dann…

Man kann aber - wie hier in diesem Thread mal wieder unschwer zu 
erkennen ist - gerne alle möglichen Probleme herbei reden und diesen 
Zombie künstlich am Leben erhalten.

von Vanye R. (vanye_rijan)


Lesenswert?

> Datenblatt/Manual lesen. Gute Receiver samplen in der Mitte des Bits,
> d.h. wo der Pegel am stabilsten sein sollte.

Ihr muesst noch daruber diskutieren wo denn die Mitte ist, also
worauf ein Controller genau synchronisiert. Vermutlich eher nicht auf
die Flanke sondern mit dem Takt einsynchronisiert.
Und bei verschliffenen Flanken (siehe Subject) auch noch an welcher
Stelle er High/Low bei welcher Temperatur unterscheidet.

Und dann gibt es noch bizarre Sonderfaelle. Silabs hat teilweise
Usart mit einem fractionalen Teiler fuer Taktfrequenzen aus denen
sich uebliche Baudraten nicht ohne Rundungsfehler ableiten lassen.
Dann ist ein Bit etwas kuerzer wie das benachbarte damit in
Summe die Baudrate wieder stimmt.

Wie immer muss man also Datenblatt lesen.

Vanye

von Purzel H. (hacky)


Lesenswert?

>Datenblatt/Manual lesen. Gute Receiver samplen in der Mitte des Bits,
d.h. wo der Pegel am stabilsten sein sollte. Hat aber auch was mit
möglichen Differenzen in der Baudrate zu tun, insbesondere wenn man
keine Quarz Taktquelle nutzt.

Nur gibt es keine Mitte des Bits. Wo soll die Mitte sein ? Das Ganze 
nennt sich asynchron. Es wird 4, 8 oder 16 fach gesampelt. Die 
Funktionalitaet beginnt, wenn die Mehrheit der Samples zu einem Zustand 
(0/1) passt. Fuer ein Byte muessen also Startbit, Stopbit, und die 
Bitmehrheiten passen, sonst ist nichts.

von Norbert (der_norbert)


Lesenswert?

Purzel H. schrieb:
> Nur gibt es keine Mitte des Bits. Wo soll die Mitte sein ?

Nun will ich mich hier nicht all zu weit aus dem Fenster lehnen, aber 
bei gegebener Baud-Rate würde ich die Möglichkeit der Bestimmung der 
Bitbreite ab negativer Flanke auch nicht kategorisch ausschließen 
wollen.
Es ist - zugegebenermaßen - mathematisch recht anspruchsvoll, doch wurde 
mir gelegentlich zugetragen, das eine solche Berechnung von Erfolg 
gekrönt sein soll.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.