Mit HyperTerminal usw. kann man ja per UART Zeichen auf dem PC darstellen. Die Baudrate ist bei diesen Programmen ja meistens auf 115'200 b/s begrenzt. Ich versuche aber zwei mikrocontroller per UART zu verbinden, die dann kommunizieren können. So denke ich , da kann ich die Baudrate doch beliebig einstellen? Zum Besipiel 200'000, 213'342, 350'0010 usw oder? Natürlich muss die Baudrate unter der maximalen Begrenzung liegen. Mein Problem ist jetzt, dass ich mit 115'200 wunderbar kommunizieren kann mit doppelter Baudrate(230'400) geht es auch, aber noch weiter kann ich die Baudrate nicht weiter hinaufschrauebn, denn dann gibt es Fehler. habe einen externen Resonator. Ist der Resontor für höhere Baudraten zu ungenau? Müssen Baudraten immer ein Vielfaches von 115'200 sein, damit es geht? Oder gibt es sonst noch was zu beachten?
Nun ja, vieleicht solltest Du den Artikel über Baudratenquarze mal lesen .... http://www.mikrocontroller.net/articles/Baudratenquarz > Ist der Resontor für höhere Baudraten zu ungenau? Ein Resonator ist eigentlich für alle Baudraten zu ungenau ....
Hi, bei Kommunikation mit einem PC musst du drauf achten, dass natürlich nur die "angebotenen" Baudraten verwendet werden. Desweiteren darf die Zeit, die du für ein BIT brauchst, nicht mehr als 3% abweichen, sonst kann sich der Empfänger nicht mehr synchronisieren. Zwischen zwei Controller darf die Baudrate beliebig gewählt werden, sofern beide Teilnehmer die gleiche verwenden. Auch hier wieder auf Timing achten. Da die Baudrate durch den Taktgeber generiert wird, ist die Toleranz des Resonators/Quarzes natürlich kritisch. Daher würde ich mal das Datenblatt des Resonators zur Hand nehmen, die Toleranz prüfen und mit der eines Quarzes der gleichen Frequenz vergleichen. Desweiteren ist es maßgeblich, welche Frequenz der Resonator/Quarz an sich hat. Du hast bestimmt schon die Quarzwerte 11.0592MHz oder 22.1184MHz gesehen. Das sind Frequenzen, die besonders für Baudratengenerierung geeignet sind (bedingt durch den internen Aufbau des UARTs). Wenn du eben einen 12.000MHz Quarz verwendest, dann hast du bedingt durch die Formel zur Berechnung der Baudrate schon Abweichungen im Timing. HTH Ralf
Zusaetzlich zur Baudrate die auf 2% genau uebereinstimmen muss, muss der Empfaenger auch Zeithaben, das UART zu lesen. Wenn der Empfaenger ueberschrieben wird gibt es einen Overrun fehler, den niemand mehr auswerted, und die Meldung wird nicht mehr richtig decodiert.
Also nun mal Butter bei die Fische: Wenn die Kommunikation bei 115200 funktioniert, aber 921600 Baud nicht, liegt es doch mit Sicherheit nicht an der Toleranz des Resonators. Im Übrigen beträgt die Genauigkeit eines Resonators ca. 0.5% und ist somit hervorragend für serielle Kommunikation geeignet. Ich würde zu aller erst prüfen, ob die Empfangsroutine der "Datenflut" gewachsen ist. Möglichweise addieren sich Interruptlatenz, Kontextswitch, Pufferverarbeitung usw. auf unerträglich lange Zeiten. Wir wollen Quelltext seh'n :-)
Wenn du 2 MC nimmst die miteinander kommunizieren sollen, ist die Bautrate völlig wurscht, und damit ist der Quarz/Resonator Wert auch völlig wurscht. Die Bautrate muss nur auf beiden MCs übereinstimmen. Bautratenquarze sind nicht nötig. (Ließt sich eigentlich keiner die Fragestellung durch???)
Habe herausgefunden, dass ich die Baudrate bis auf 250'00 b/s raufschrauben kann. 250'200 geht dann schon nicht mehr. was ist da los?
Ben wrote: > Habe herausgefunden, dass ich die Baudrate bis auf 250'00 b/s > raufschrauben kann. 250'200 geht dann schon nicht mehr. was ist da los? Was meinst Du mit "250'200", sollen das 250,2kBaud sein? Was fürn MC, was fürn Quarz, welcher Baudratenteiler? Beim AVR kannst Du bei 16MHz nur zwischen 250kBaud und 333kBaud wählen. Vielleicht hast Du im Baudratenmacro nen Fehlertest und Du kriegst gar kein Hexfile, was nicht geflasht wird und demzufolge nicht gehen kann. Schau mal ins Compiler-Log. Peter
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.