hallo, beschäftige mich seit geringer zeit mit µC -> PC mit USART. jetzt ist mir hier im forum was aufgefallen und zwar von: Hubert, der schreibt: Thema: wahrscheinlich einfaches USART Problem Autor: Hubert Datum: 22.03.2005 Du hast dir sicher im Datenblatt die UBRR Settings angeschaut und dabei festgestellt das diese geraden Frequenzen nicht das ideale sind. Wenn dann die interne Frequenz auch noch daneben ist dann hast du rasch mehr als die 0,2% Fehlertoleranz. meine frage ist wie berechne und aus welchen parametern kann ich die fehlertoleranz bestimmen. mfg Peter
Das steht im Datenblatt an der Stelle, an der die Programmierung des Baudratenerzeugers beschrieben wird. Der Prozessortakt wird durch ganzzahlige Werte geteilt, um die Zielbaudrate zu erzeugen. Dabei wird zunächst ein fester Divisor von 16 angewandt, da eine UART zur korrekten Synchronisation den 16fachen Baudratentakt benötigt. (AVRs bieten auch einen "double speed"-Modus an, bei dem erhöhte Anforderungen an die Genauigkeit der Baudrate gestellt werden). Aus dem so aus 1 MHz resultierenden Maximalwert von 62500 (resp. 12500 im "double-speed"-Modus) lässt sich, wie Du unter Zuhilfenahme eines Taschenrechners leicht herausfinden kannst, der Wert 9600 nicht genau erzeugen. Eigentlich wäre ein Divisor von 6.51 erforderlich, möglich sind aber nur 6 oder 7, was in 57600 bzw 67200 resultiert. Der erste Wert ist etwa 8% kleiner, der zweite Wert hingegen etwa 7% größer als der gewünschte Wert. (Im "double-speed"-Modus sieht die Angelegenheit mit einem Soll-Divisor von 13.02 schon deutlich besser aus, mit einem tatsächlichen Divisor von 13 liegt der erzielte Wert etwa 0.2% unter dem gewünschten). Der Begriff "Fehlertoleranz" ist etwas irreführend, weil er das Tolerieren eines Fehlers suggeriert. Ab einer gewissen Abweichung vom Soll (==Fehler) wird diese nicht mehr toleriert, d.h. eine gewisse Toleranz wird überschritten. Welche Toleranzen beim Empfangen von Daten mit der UART des AVR akzeptiert werden, siehst Du auf Seite 158 des Mega16-Datenblattes beschrieben. Die Toleranz hängt hier auch von der verwendeten Wortlänge ab. Auf Seite 166 des gleichen Datenblattes sind für einige Prozessortaktfrequenzen die erzielbaren Baudraten inklusive der resultierenden Fehler angegeben.
hallo, erstmal danke für die antwort. habe gerade nach dem datenblatt für ein mega 16 gesucht und komischer weise nirgendswo etwas gefunden, auf die schnelle, wenn jemand den link hat her damit. also wenn ich richtig verstanden habe soll der prozessortakt 16 mal grösser sein als die baudrate damit man die schnittstelle ideal synchronisieren kann. Rufus T. Firefly schrieb: Aus dem so aus 1 MHz (TAKTFREQUENZ) resultierenden Maximalwert von 62500 (resp. 12500 im "double-speed"-Modus) lässt sich, wie Du unter Zuhilfenahme eines Taschenrechners leicht herausfinden kannst, der Wert 9600 nicht genau erzeugen. wie und wieso komme ich auf 12500 im "double-speed"-Modus? 62500/5 aber wieso??? Rufus T. Firefly schrieb: Eigentlich wäre ein Divisor von 6.51 erforderlich, möglich sind aber nur 6 oder 7, was in 57600 bzw 67200 resultiert. Der erste Wert ist etwa 8% kleiner, der zweite Wert hingegen etwa 7% größer als der gewünschte Wert. wieso teilt man jetzt weiter das verstehe ich überhaupt nicht. und was hat ein weiterer devisor zu sagen??? teilt man weiter damit man auf 9600 boud kommt, die gängige übertragungsboudrate (bestimmt?!?) aber was hat dan die 6 oder 7 zusagen?? bzw der weitere devisor???? Rufus T. Firefly schrieb: (Im "double-speed"-Modus sieht die Angelegenheit mit einem Soll-Divisor von 13.02 schon deutlich besser aus, mit einem tatsächlichen Divisor von 13 liegt der erzielte Wert etwa 0.2% unter dem gewünschten). wie komme ich auf die 13 ??? 62500/13=4808 danke jetzt schon für die hilfe, bin schon ganz gespannt wieso das so ist??? mfg Peter
Hallo Peter Hast du dir schon mal die Mühe gemacht das Datenblatt zu lesen? Unter www.atmel.com/products findest du alles was du braucht. Dann list du mal den Abschnitt USART genau durch. Unter Clock Generation findest du die genaue Beschreibung. Am Ende des Abschnitts sind auch Example of Baudrate Settings. Dort siehst du im Überblick die geeignetsten Taktfrequenzen.
Datenblätter der von Atmel hergestellten Prozessoren findet man bei Atmel. Im Satz "Aus dem so aus 1 MHz resultierenden Maximalwert von 62500 (resp. 12500 im "double-speed"-Modus)" verschwand eine Null. Richtig ist: "Aus dem so aus 1 MHz resultierenden Maximalwert von 62500 (resp. 125000 im "double-speed"-Modus)" Deine Konfusion rührt wohl in erster Linie daher, daß Du Dich vom "double-speed"-Modus ins sprichwörtliche Bockshorn jagen ließest. Ersetze also die fehlende Null und lies' Dir mein Elaborat einfach nochmal durch.
hallo, habe mir mir das datenblatt durchgelesen und es sind paar sachen klarer geworden.schreibe es mal nieder ob es wirklich so ist??? also der erste devisor ist immer 16, zur idealen synchroniesierung. so und dann kommt es drauf an ob speed modus (asynchron) oder synchron modus. man sucht einen ganzzahligen devisor der so nah wie möglich an der gewünschten boudrate liegt, und dieser devisor ist das UBRR (UBRR-Register [0-4095]). da mein englisch nicht so gut ist, habe ich nicht verstanden was das UBRR genau ist bzw. bedeutet. bischen verwirrend für mich mit den registern. kann mir das jemand erklären??? danke für eure hilfe, hoffe das ich kein misst erzähle. mfg Peter frohe ostern!!!
UBRR ist genau dieses Register aus dem der Kontroller in zusammenhang mit der Taktfrequenz entnimmt welche Baudrate du willst. Der Divisor steht also im UBRR-Register
Der erste Divisor ist im "high-speed-Modus" 8, daher die veränderten Werte. Davon abgesehen hast Du das soweit richtig verstanden. Pedanterie: Es heisst Baud. Und Divisor.
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.