Forum: Mikrocontroller und Digitale Elektronik AutoBaud für UART


von Peter (Gast)


Lesenswert?

hallo an alle!
hat schon jemand für die atmega8/16-uart eine automatische 
baudratenerkennung in c geschrieben?
vielleicht kann mir jemand weiterhelfen, wie ich diese thema angehen 
soll. alle bisherigen versuche sind eher im sande verlaufen!
peter

von crazy horse (Gast)


Lesenswert?

geht eigentlich nur, wenn man ein Zeichen vereinbart, welches als erstes 
empfangen wird, üblich sind 0x20 oder 0x00. Einfach den seriellen 
Eingang pollen und mit einem Timer die Bitzeiten messen, daraus dann die 
Baudrate berechnen.

von Peter (Gast)


Lesenswert?

ich dachte eher an die überprüfung des frame-flags (FR).
z.b. könnte ich es doch 50x prüfen, und wenn dann noch immer keine 
fehlerfreie übertragung gegeben ist, auf die nächst höhere 
übertragungsrate umschalten.
nur die frage ist, kann ohne besondere vorkehrungen einfach das UBRR und 
UBRRHI neu beschrieben werden?

von Peter D. (peda)


Lesenswert?

Das frame-flags sagt Dir nur, daß das Stop-Bit falsch ist, mit der 
Baudrate hat es also überhaupt nichts zu tun.


Wie schon gesagt wurde, muß der Sender ein bestimmtes vereinbartes 
Zeichen senden und danach auch eine längere Pause lassen, damit der 
Empfänger die Baudrate erkennen und sich darauf einstellen kann.


Hier mal ein Beispiel in C:

http://www.specs.de/users/danni/appl/soft/c51/abaud/abaud.c51


Peter

von Tobias F. (Gast)


Lesenswert?

Hallo,

da dieser Thread schon älter ist und der oben angegebene Link nicht mehr 
funktioniert nochmal dieselbe Frage:

Hat schon jemand für den atmega128 (o.Ä.) -uart eine automatische
baudratenerkennung, möglichst in c, geschrieben?

Ich möchte ein Gerät anschließen, welches u.A. NMEA-Daten liefert und 
mit 4 unterschiedlichen Baudraten betrieben werden kann. Gibt es eine 
Möglichkeit ohne vorher vereinbartes Zeichen ? Ich habe daran gedacht 
nach dem häufig vorkommenden Zeichen '$' oder LF zu suchen. Eventuell 
auch nach der Kombination CR,LF um eine höhere Sicherheit zu bekommen.

Tobias

von Zacc (Gast)


Lesenswert?

Ja, sicher. Baudrate einstellen und horchen. Die Fehler notieren. Falls 
zuviele Fehler auftreten, die Baudrate aendern.

Z

von Benedikt K. (benedikt)


Lesenswert?

Es geht auch mit (fast) jedem Zeichen: Die kürzeste Bitdauer suchen, das 
wird dann die Baudrate sein. Man muss halt überprüfen ob der Wert 
plausibel ist, oder ob es nur ein Spike war. Man muss halt mehrmals 
messen, damit man wirklich 1 einzelne Bitdauer bekommt.

von 1. Rahul nach Moiré (Gast)


Lesenswert?

> Hat schon jemand für den atmega128 (o.Ä.) -uart eine automatische
> baudratenerkennung, möglichst in c, geschrieben?

Leider nicht, war bisher nie notwendig.

von Peter D. (peda)


Lesenswert?

Tobias F. wrote:
> Hallo,
>
> da dieser Thread schon älter ist und der oben angegebene Link nicht mehr
> funktioniert nochmal dieselbe Frage:


http://home.tiscali.de/peterd/appl/soft/c51/abaud/abaud.c51


Peter

von Tobias F. (Gast)


Lesenswert?

Vielen Dank für die vielen schnellen Antworten. Ihr habt mir wirklich 
sehr geholfen.

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.