www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ATmega644: UART und Double Speed Operation (U2Xn)


Autor: Be Mi (bemi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Hannes Jaeger (pnuebergang)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 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.

Autor: Be Mi (bemi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Be Mi (bemi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.