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
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.
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?
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
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
Ja, sicher. Baudrate einstellen und horchen. Die Fehler notieren. Falls zuviele Fehler auftreten, die Baudrate aendern. Z
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.
> Hat schon jemand für den atmega128 (o.Ä.) -uart eine automatische > baudratenerkennung, möglichst in c, geschrieben? Leider nicht, war bisher nie notwendig.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.