Hallo,
beim Datenaustausch über eine asynchron arbeitende UART werden manche
µCs schon einmal leicht überfordert. Die UART wird deshalb auch häufig
in Errata-Sheets genannt.
Speziell beim Empfang von Daten mit nur einem Stopp-Bit treten
gelegentlich Probleme auf. Deshalb kann ja wohl auch fast immer zwischen
einem und zwei Stopp-Bits gewählt werden.
Hat jemand beim ATtiny841 auch schon einmal Probleme mit einem Stopp-Bit
gehabt, die durch Verwendung von zwei Stopp-Bits eliminiert wurden?
Fanny schrieb:> Hat jemand beim ATtiny841 auch schon einmal Probleme mit einem Stopp-Bit> gehabt, die durch Verwendung von zwei Stopp-Bits eliminiert wurden?
Welche Probleme hast denn du damit derzeit? Oder tritt das Problem etwa
gar nicht bei dir auf?
Das Problem kann auftreten, wenn der Sender-Takt etwas höher ist als der
des Empfängers. Dann ist der Empfänger noch nicht fertig wenn der Sender
schon das nächste Zeichen sendet.
Hier können 2 Stopbits beim Sender helfen. Der Empfänger, eingestellt
auf 1 Stopbit, wertet das 2. Bit nicht aus und ist dann eher bereit für
das folgende Startbit.
Das hat also nichts mit dem µC-Typ zu tun, sondern mit der Genauigkeit
von Takt und Baudrateneinstellung.
Aber unabhängig von dem "Reparaturversuch" mit 2 Stopbits ist bei einem
zu großem Taktfehler die Übertragungsicherheit sowieso gefährdet.
Ergänzung:
Unabhängig von HW und Takt kann die SW auch Probleme verursachen, wenn
sie nach Empfang eines Zeichens zu lange mit der Bearbeitung
"herummacht" und das nächste Zeichen verpasst.
Bei einem Baudratenfehler sind 2 Stopbits noch problematischer, da ja
nun 11 Bits synchron sein müssen. Ist der Empfänger zu langsam, kann er
das nächste Startbit verlieren, wärend er noch auf das 2. Stopbit
wartet.
Nimm für Sender und Empfänger ein Baudratenquarz und gut.
Dietrich L. schrieb:> Hier können 2 Stopbits beim Sender helfen. Der Empfänger, eingestellt> auf 1 Stopbit, wertet das 2. Bit nicht aus und ist dann eher bereit für> das folgende Startbit.
Das erfordert dann aber zwingend Halb-Duplex, d.h. für jede Richtung
müssen sich Sender und Empfänger jedesmal umkonfigurieren.
Hi
>Ist der Empfänger zu langsam, kann er>das nächste Startbit verlieren, wärend er noch auf das 2. Stopbit>wartet.
Bei AVRs werden die für RX die eingestellten Stop-Bits > 1 ignoriert.
MfG Spess
Peter D. schrieb:> Nimm für Sender und Empfänger ein Baudratenquarz und gut.Peter D. schrieb:> Das erfordert dann aber zwingend Halb-Duplex, d.h. für jede Richtung> müssen sich Sender und Empfänger jedesmal umkonfigurieren.
Da hast Du völlig recht! Die Bastelei mit den Stopbits ist wirklich
keine tolle Lösung - oder einfach nur Murks.
Dietrich L. schrieb:> Hier können 2 Stopbits beim Sender helfen. Der Empfänger, eingestellt> auf 1 Stopbit, wertet das 2. Bit nicht aus und ist dann eher bereit für> das folgende Startbit.
Nicht wirklich. Das letzte Daten Bit ist dann mit hoher
Wahrscheinlichkeit auch schon kaputt.
Jim M. schrieb:> Nicht wirklich. Das letzte Daten Bit ist dann mit hoher> Wahrscheinlichkeit auch schon kaputt.Dietrich L. schrieb:> Aber unabhängig von dem "Reparaturversuch" mit 2 Stopbits ist bei einem> zu großem Taktfehler die Übertragungsicherheit sowieso gefährdet.
;-))
Peter D. schrieb:> Bei einem Baudratenfehler sind 2 Stopbits noch problematischer, da ja> nun 11 Bits synchron sein müssen. Ist der Empfänger zu langsam, kann er> das nächste Startbit verlieren, wärend er noch auf das 2. Stopbit> wartet.
Ganz so ist das nicht. Das Stopbit stellt keine Information im
eigentlichen Sinne bereit und muss auch nicht gelesen werden. Es schadet
aber nicht das erste Stopbit zu lesen, um den Frame zu prüfen.
Das Stopbit ist schlicht die Pause zwischen den übertragenen Zeichen.
Mit dem Stopbit stellt man die kleinste Pause beim Senden ein. Darüber
hinaus kann die Pause beliebig lang sein. Ein zweites Stopbit beim
Senden kann sinnvoll sein, wenn der Empfänger nicht der schnellste ist
und mehr Zeit für die Verarbeitung braucht. Gelesen oder geprüft wird
das zweite Stopbit nicht.
Uwe K. schrieb:> Das Stopbit ist schlicht die Pause zwischen den übertragenen Zeichen.
Und genau diese Pause wird benötigt, damit sich die interne µC-Hardware
für den Empfang des nächsten Start-Bits (und der nachfolgenden
Datenbits) vorbereiten kann. Dem µC ist dabei die reale Datenrate
absolut egal, ihn interessiert nur die eigene Datenrate und die damit
verbundenen Abtastzeitpunkte (oft drei pro Bit) für den Datenstrom. In
vielen Protokollen darf die Pause vor dem Startbit auch beliebig lang
gemacht werden, Hauptsache die Mindestzeit (meist 1 Bitzeit = 1
Stoppbit) wird nicht unterschritten.
Natürlich sind Stoppbits nur im SENDER!
Mit 1 Stoppbit darf die Baudrate (bei perfekten Signalen) etwa 3%
abweichen. Mit 2 Stoppbit etwa 4%. (Anmerkung: Die Differenz ist etwas
kleiner als 1%) Dazu reichen schon 1.5Stopbits, darum gibt es die auch.
Ein weitere Vorteil von 2 Stoppbits ist die schnellere
Neu-Synchronisiation bei einem Back-To-Back-Datenstrom. Gedankenspiel:
Bei 10 Stoppbits ist man spätestens im 2ten Byte syncronisiert.
Jim M. schrieb:> Nicht wirklich. Das letzte Daten Bit ist dann mit hoher> Wahrscheinlichkeit auch schon kaputt.
nicht wirklich. Wenn jeweils beim 7ten, 8ten und 9ten von 16 Takten
abgetastet wird, dann darf das letzte Bit 1ns nach dem 8ten Takt zuende
sein. Das Stoppbit hingegen darf erst mit dem 9ten Takt zuende sein
(sonst verschiebt sich das nächste Startbit) , zudem ist das Stoppbit
ein Bit später, was nochmal 10% ausmacht (~1.6 Takte).
Bei 10 Bit + 2 Stoppbit (Start, Daten, Parity) darf der Sender also 8
Takte auf 160 schneller sein (1/20=0.05*)
Bei 10 Bit + 1 Stoppbit nur 6 Takte auf 176 (1/30 = 0.034)
*) hier gibt allerdings in der Gegenrichtung probleme, da das Stoppbit
das Parity-Bit zerstört.
Zwei Stoppbits helfen dem Empfänger auch, sich schneller neu zu
synchronisieren, wenn er mal durcheinander gekommen ist und fortlaufend
Daten übertragen werden.
Peter D. schrieb:> Ist der Empfänger zu langsam, kann er> das nächste Startbit verlieren, wärend er noch auf das 2. Stopbit> wartet.
Also wer einen UART konstruiert der allen ernstes bei RX auf das zweite
Stopbit wartet der gehört mal für ne Weile in die Ohrfeigenmaschine
eingespannt.
Peter D. schrieb:> Bei einem Baudratenfehler sind 2 Stopbits noch problematischer, da ja> nun 11 Bits synchron sein müssen. Ist der Empfänger zu langsam, kann er> das nächste Startbit verlieren, wärend er noch auf das 2. Stopbit> wartet.
Da kann man die Daten mit zwei Stopbits senden und den Empfänger auf ein
Stopbit konfigurieren. Das gibt dem Empfänger ein ganzes Bit mehr Zeit,
so dass er früher für das nächste Startbit bereit ist.
spess53 schrieb:> Bei AVRs werden die für RX die eingestellten Stop-Bits > 1 ignoriert.
Damit sollte wohl klargestellt sein, daß ich mir nie den Mode mit 2
Stopbits näher angeschaut, noch ihn benutzt habe.
Es ist also überflüssig, darauf noch weiter rumzureiten.
Im 16550 Datenblatt heißt es: "1 1/2-, or 2-Stop Bit Generation".
Damit ist klar, es betrifft nur den Sender.
Das hätte man im AVR-Datenblatt besser auch so schreiben können.
Hi
peda Schrieb
>Das hätte man im AVR-Datenblatt besser auch so schreiben können.
Steht eigentlich in jedem Datenblatt (hier mal ATMega16):
• Bit 3 – USBS: Stop Bit Select
This bit selects the number of Stop Bits to be inserted by the
Transmitter. The Receiver ignores this setting.
MfG Spess
spess53 schrieb:> Steht eigentlich in jedem Datenblatt
Einen Receiver, der beim Fehlen des 2. Stopbits einen Framing Error
meldet, habe ich in den letzten 40 Jahren nicht gesehen - die
Einstellung gilt immer nur für den Transmitter. Mögliche Ausnahmen
könnte es bei selbstgebastelten Software-UARTs geben.
Georg
Fanny schrieb:> beim Datenaustausch über eine asynchron arbeitende UART werden manche> µCs schon einmal leicht überfordert.
Nach meiner Erfahrung sitzt die Überforderung in den meisten Fällen VOR
dem Monitor.
Uarts sind mega robust wenn man weiß was man tut.
Auch lese ich häufig Erratas und in den seltensten Fällen waren die
Uarts ein Problem.