Hallo, was will mir die nachfolgende Beschreibung aus dem Datenblatt sagen? "Double Speed Operation (U2Xn): The transfer rate can be doubled by setting the U2Xn bit in UCSRnA. Setting this bit only has effect for the asynchronous operation. Set this bit to zero when using synchronous operation. Setting this bit will reduce the divisor of the baud rate divider from 16 to 8, effectively doubling the transfer rate for asynchronous communication. Note however that the Receiver will in this case only use half the number of samples (reduced from 16 to 8) for data sampling and clock recovery, and therefore a more accurate baud rate setting and system clock are required when this mode is used. For the Transmitter, there are no downsides." Generell erreiche ich mit der Double Speed Option eine höhere Genauigkeit. Kann ich nun irgendwie bestimmen, bei welchem Baudratefehler welche Option die bessere ist. War es nicht generell so, das der Fehler 3% betragen darf? Wie ändert sich das, wenn ich die Double Speed Option nutze? Gibt es dazu irgendwelche Aussagen? Grüße, Bernd P.S. Bastel nämlich gerade einen Quellcode-Genereator der die idealen Einstellungen berechenen soll.
> Kann ich nun irgendwie bestimmen, bei welchem Baudratefehler welche Option > die bessere ist. Unter der Voraussetzung das beide Varianten gehen (im legalen Bereich sind) und ganz allgemein: Nein. Das ist eine Abwägung zwischen den Vor- und Nachteilen der beiden Modi. Manchmal liegt das Ergebnis auf der Hand (wenn 2x einen größeren Fehler als 1x hat), manchmal nicht (1x hat einen größeren Fehler, aber nicht extrem größer, gegenüber 2x). PS: Es würde mich nicht wundern, wenn es schon diverse Quellcodegeneratoren dafür gibt. Wobei man die nicht mal braucht. Ich mache das mit einer Reihe fieser Preprozessor-Makros.
Na ja, der Quelltext-Generator soll schon noch ein bischen mehr machen, als nur den Baudratenteiler berechnen. Er erzeugt auch den Code für alle benötigten Timings aus einem einzigen Timer+SW-PWM auf allen I/O-Pins und übernimmt das Handling der AD-Wanderabfrage inklusiv Interrupts und einem Messageloop für die allgemeinen Abläufe in der Anwendung. Nun bin ich halt dabei diesem Anwendungsgerüst die serielle Kommunikation beizubringen. Die Idee ist, am Ende mit ein paar Mouseklicks ein Grundgerüst zu erzeugen, dem man dann nurnoch spezielle Funktionen hinzufügen muss. Und damit das mit dem zusammenklicken der Anwendung funktionniert, müssen die Routinen halt wissen, welche Initiallisierung für die jeweilige Baudrate und den jeweiligen Prozessortakt im Optimalfall zu wählen ist. Der User soll nachher über die Hardwarebesonderheiten nicht mehr nachdenken müssen.
Im Datenblatt sind so Tabellen wo das beispielhaft gerechnet ist, da stehen auch die Formeln wie man den Fehler berechnet. Rechnest einmal mit einmal Ohne 2x Mode und nimmst das wo der kleinere Fehler rauskommt ;) Hab ich selbst schon verwendet funktioniert eigentlich ganz gut, ich wüßte jezt nicht welche Nachteile Hannes Jaeger meint?
Letztlich kann ich so ziemlich alle Baudraten der Variante mit einem Vorteiler von 16 auch mit einem Vorteiler von 8 erreichen. Bei einem Vorteiler von 8 komm ich mit den Baudraten höher und sie sind feiner in der Abstrufung. Nur bei sehr niedrigen Baudraten ist ein Vorteiler von 16 zwingend. Es macht aber unter Umständen einen Unterschied, ob ich ausgehend von 20MIPS, von 2,5MBaud oder von 1,25MBaud ausgehe, da ja wie gesagt bei dem geringeren Vorteiler weniger oft abgetastet wird, so dass man sagen kann, dass wenn ich die Baudrate auch mit einem Vorteiler von 16 erzeugen kann, dieses die bevorzugte sein sollte. Mich würde nun interessieren: Wie groß darf der prozentuale Fehler den sein, damit die Datenübertragung noch stabil gewährleistet ist. Ich habe öfter mal den Wert 3% gelesen. Ich würde jetzt allerdings erwarten, dass der maximal zulässige Fehler je nach Abtastfrequenz etwas schwanken müsste. Oder genauer: Wie groß darf die Frequenzabweichung bei einem Vorteiler von 16 und wie groß bei einem Vorteiler von 8 in Prozent sein. Grüße, Bernd
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.