Hallo.
Ich hätte eine Frage bezüglicher der Baudraten des Arduino Megas. Und
zwar verrät mir das Datenblatt, dass eine eingestellt Baudrate von
115,2k und verwendeten CPU Frequenz von 16 Mhz mit einem "erheblichen"
Fehler belegt sind. Ich habe den UART auch selber mit der genannten
Baudrate angesprochen und es wurden nur fehlerhafte Daten übertragen.
Mich würde interessieren, wie das ganze so problemlos mit den Arduino
Bibliotheken und dem Befehl Serial.print funktioniert.
Eine weitere Frage, die sich mir stellt ist, warum ich bei höheren
Baudraten (250k, 0,5M und 1M) keine Fehler mehr habe.
Viele Grüße.
Gaat12 schrieb:> Eine weitere Frage, die sich mir stellt ist, warum ich bei höheren> Baudraten (250k, 0,5M und 1M) keine Fehler mehr habe.
Schau ins Datenblatt unter USART/Example of Baud Rate Settings, dort
siehst du die Errorrate.
Die 16Mhz werden intern geradzahlig geteilt, um auf Deine Baudrate zu
kommen. dadurch kommst Du nicht exakt auf die 115200Baud, wohl aber auf
1Mbaud.
Gruß, Stefan
Sieh Dir mal an, wie die Übertragungsrate bei den AtMegas eingestellt
wird: es gibt nur ganzzahlige Teiler.
Kleine Übersicht: http://wormfood.net/avrbaudcalc.php
Gaat12 schrieb:> zwar verrät mir das Datenblatt, dass eine eingestellt Baudrate von> 115,2k und verwendeten CPU Frequenz von 16 Mhz mit einem "erheblichen"> Fehler belegt sind.
Definiere "erheblich". IIRC kann man trotzdem eine korrekte Übertragung
erwarten, UART erlaubt so ca. 5% Abweichung.
> Ich habe den UART auch selber mit der genannten> Baudrate angesprochen und es wurden nur fehlerhafte Daten übertragen.
Welche Gegenstelle, welche Abweichung in % war das?
Fieserweise muss man dabei die Abweichung beider Seiten
berücksichtigen.
Übliche USB2UART Chips haben <1% Abweichung bei 115200 Baud.
Gaat12 schrieb:> Eine weitere Frage, die sich mir stellt ist, warum ich bei höheren> Baudraten (250k, 0,5M und 1M) keine Fehler mehr habe.
Die 16000000 Hz werden halt durch eine ganze Zahl geteilt. Im Datenblatt
steht auch drin wie der Teiler genau funktioniert, der Rest ist nur
Mathe. Da hätte man im Unterricht vielleicht mal aufpassen müssen.
Wie man das am besten macht kann man am Baudraten Calculator
herausfinden..
Ich hatte letztens einen eigenen Arduino Bootloader kompiliert.. Da muss
man sich vorher Gedanken über den Quarz und Uart machen.
Zb. hatte ich angepeilt unter 12Mhz für 3,3V zu bleiben und den Upload
über 115K Serial zu realisieren. Zuerst erschien mir 11,0592 Mhz für
230,4K Maxbaud unterhalb von 12Mhz Perfekt..
Mit 11,0592 kann man bis 230,4K Standard Baudrate immer ohne Rest
Teilen.
Dann dreht sich aber gerade beim Arduino ein Problem um, denn
Microsekunden und Millisekunden benötigen im Core einen Quarz mit 6
nullen am Ende um ohne einen Rest Ganzzahlig zu zählen..
Hab dann nach dem Baudrate Calculator 12Mhz mit 115,2K Upload genommen..
geh mal unter "Arduino-Pfad"/hardware/tools
dann gib "mode" ein und schaue welche Einstellungen dein Port hat.
Ich hatte schon 7 Datenbits, 0 Baudrate etc. als Standart geladen.
GRuß J
Ich habe Arduino Nano Clones aus China mit 16Mhz Keramikoszillator und
CH340 Chip problemlos mit 115200 Baud verwenden können.
Das Datenblatt des AVR empfiehlt in diesem Fall einen anderen Quarz
(z.B. 14,7Mhz) um die Abweichung gering zu halten.
5% Abweichung sind noch Ok. Aber wenn das Gerät am anderen Ende des
Kabel auch 5% (in die andere Richtung) abweicht, dann geht ganz sicher
nichts mehr.
Stefan U. schrieb:> Ich habe Arduino Nano Clones aus China mit 16Mhz Keramikoszillator und> CH340 Chip problemlos mit 115200 Baud verwenden können.
Man glaubt es fast nicht, aber die funktionieren scheinbar "besser"
als die Arduinos mit ATMega16U2 als seriell USB Interface.
(Einzelerfahrung aus Arduino Mega2560)
Hallo,
kurz und knapp. µC Takt und Baudrate sollten in einem Ganzzahlen
Teilerverhältnis stehen. Also nimm mit 16MHz zum Bsp. eine Baudrate von
250k und freu dich.