Forum: Mikrocontroller und Digitale Elektronik UART Baudrate 460800 Atmel328P / Arduino Uno


von Zolfo D. (zolfo)


Lesenswert?

Hallo,

ich möchte mein Arduino Uno mit einer Baudrate von genau 460800 
betreiben. Serial.begin() lässt zwar Werte bis 2.000.000 zu, jedoch ist 
die tatsächliche Baudrate bei 500.000, wenn man Serial.being(460800) 
angibt. Kennt hier jemand eine Lösung oder weiss, was ich falsch mache?

Danke!

von M. K. (sylaina)


Lesenswert?

Welchen UBBR-wert bräuchtest du denn für 460800 BD? Ja, damit bist du 
außerhalb den zulässigen Fehlerbereichs von 1% mit den 16 MHz mit denen 
der Arduino Uno läuft.
500000 würde dafür gehen.

von Karl M. (Gast)


Lesenswert?

Hallo,

was steht im Datenblatt eines atmega328p ?
Warum fragst Du dich nicht selbst ?

Richtig geht nicht !

16Mhz/16/2 = 500.000 Bit/s
16Mhz/8/4 = 500.000 Bit/s
16Mhz/8/5 = 400.000 Bit/s

von Sebastian S. (amateur)


Lesenswert?

Da es den Arduino, soweit mir bekannt, nicht mit Baudratenquarzen gibt, 
würde ich mir (vorher) ganz genau überlegen, und auch im Handbuch 
nachschlagen, was da machbar ist.
Bei niedrigen Übertragungsraten ist das oft kein Problem. Aber an den 
Grenzen muss man den Fehler, der bei der Teilung entsteht, im Auge 
behalten.

von Sebastian S. (amateur)


Lesenswert?

Ich vergaß:
Unter Umständen kann es nicht schaden, festzustellen, ob der Kerl das 
Futter auch schlucken kann.
Will sagen: Da kaum Speicher vorhanden ist, müssen die Daten auch mit 
Eingangsgeschwindigkeit verarbeitet werden.

von Peter D. (peda)


Lesenswert?

460800 Baud kannst Du mit den üblichen Baudratenquarzen erzeugen, z.B. 
mit 14,7456MHz.
In 8051 Schaltungen hat man daher häufig 11,0592MHz als CPU Takt 
verwendet.
Quarze mit ganzzahligen MHz-Werten nimmt man vorzugsweise für den 
CAN-Bus.
Allen anderen Anwendungen ist die Quarzfrequenz völlig schnurz.

von Zolfo D. (zolfo)


Lesenswert?

Danke für die schnelle Antwort.
Es sollen nur 8 ASCII Zeichen übertragen werden, evtl. geht es daher mit 
einer höheren Fehlerrate.
Wäre die richtige Herangehensweise den Quarz am Uno gegen einen anderen 
zu wechseln, um auf die 460800 zu kommen? Oder was sollte ich am besten 
machen?

von Zolfo D. (zolfo)


Lesenswert?

Merci, da waren die Antworten jetzt schneller als meine Frage / Beitrag. 
Ich versuchs dann mit einem anderen Quarz :D

Wenn ich mir den 14,7456MHz Quarz draufklatsch, gibts dann Probleme beim 
Flashen mit der Arduino IDE?

von Peter D. (peda)


Lesenswert?

Zolfo D. schrieb:
> Wenn ich mir den 14,7456MHz Quarz draufklatsch, gibts dann Probleme beim
> Flashen mit der Arduino IDE?

Vermutlich ja. Du müstest dem Bootloader und den Systemroutinen auch die 
neue Frequenz bekannt machen.
Meistens gibt es dazu das Define F_CPU.

von asd (Gast)


Lesenswert?

Vermutlich gibt es keine Probleme. Allerdings musst du bedenken dass 
alles was genaue Zeiten braucht etwas langsamer läuft 
(Software-Verzögerungen, UART-Baudrate, u.ä.), denn die Arduino-IDE 
denkt es wäre ein 16MHz Quarz angeschlossen.

von Stefan F. (Gast)


Lesenswert?

Wenn du den Quarz änderst, funktioniert der bootloade nicht mehr. Dann 
musst du per ISP Schnittstelle programmieren.

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.