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.
:
Bearbeitet durch User
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.