Forum: Mikrocontroller und Digitale Elektronik Atmega32U2, 1MHz, UART 19200 Baud geht nicht


von ebtschi (Gast)


Lesenswert?

Hallo Leute,

ich versuche seit einiger Zeit auf einem Atmega32U2 mit 1MHz den UART 
mit 19200 Baud in Betrieb zu nehmen. Leider scheint die 
Einstellmöglichkeit beim Register UBRR zu ungenau zu sein. 6 ist zu 
langsam, 5 ist zu schnell. 5,5 wäre sehr nahe am Ideal von 5,51.

Ich habe das U2X Bit schon auf True gesetzt, und damit die Baudrate 
verdoppelt. Mit UBRR==12 funktioniert alles wunderbar mit 9600 Baud.

Laut http://wormfood.net/avrbaudcalc.php habe ich bei meiner 19200er 
Einstellung einen Fehler von 7,5%. Das scheint zu hoch zu sein.

Lösungs-Ideen die ich leider nicht einsetzen kann:

1) Baudraten-Quarz: Wäre schön, aber ich brauche die 8 MHz für USB. 
Platz für einen zweiten Quarz ist auf dem Board nie und nimmer, ich bin 
sehr froh dass sich der eine irgendwie ausgegangen ist.

2) Andere Baudrate verwenden: Soll nach Möglichkeit kompatibel mit einer 
bereits vorhandenen Schnittstelle sein. Das zu ändern würde gehen, wäre 
aber sehr umständlich.

3) ATmega mit 8 MHz betreiben: Batteriebetriebene Anwendung, halbwegs 
Low Power. Der ATmega muss aber trotzdem quasi-staendig was tun.

Danke im Voraus für eure Ideen.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

ebtschi schrieb:
> ich versuche seit einiger Zeit auf einem Atmega32U2 mit 1MHz den UART
> mit 19200 Baud in Betrieb zu nehmen.

Geht nicht.

Brauchst du USB und RS-232 zeitgleich?  Ansonsten könntest du den
8-MHz-Quarz nur während des USB-Betriebs nehmen und ansonsten den
RC-Oszillator auf 7,3xxx MHz kalibrieren, sodass sich immer eine
baudratenfreundliche Frequenz ergibt.  Dem ATmega*U2 kann man ja
die Taktquelle im Betrieb umschalten (d. h. ohne Programmieren
einer Fuse).

Ansonsten bliebe wirklich nur der Betrieb mit 8 MHz unter Ausnutzung
aller Möglichkeiten, ihn zwischenzeitlich schlafen zu legen (nach
Möglichkeit im standby-Mode).

von spess53 (Gast)


Lesenswert?

Hi

Nimm den 8MHz Quarz. Bei 19200Bd hast du einen erträglichen Fehler 0,2%. 
Fertig.

MfG Spess

von ebtschi (Gast)


Lesenswert?

Danke für die Antwort.

Jörg Wunsch schrieb:
> Brauchst du USB und RS-232 zeitgleich?

Leider ja.

Jörg Wunsch schrieb:
> ansonsten den
> RC-Oszillator auf 7,3xxx MHz kalibrieren

Ich bin mir nicht sicher ob der USB-Teil auf den selben Takt zugreift 
wie der Prozessor, ich glaube nämlich nicht. Der USB-Teil braucht afaik 
nur den Quarz, egal ob ihn der Prozessor nutzt oder nicht.
Das mit dem RC-Oszillator sehe ich mir mal an, gibt wahrscheinlich eh 
ein Tutorial.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

spess53 schrieb:

> Nimm den 8MHz Quarz.

Den hat er doch schon, aber er möchte gern mit einem clock prescaler
von 8 arbeiten, damit die CPU weniger Strom braucht.

Was mir noch einfällt: mit einem clock prescaler von 4 brauchst du
zwar trotzdem doppelt so viel Strom wie bei 1 MHz, jedoch bist du
baudratenmäßig aus dem Schneider (mit U2X-Bit).

von ebtschi (Gast)


Lesenswert?

Jörg Wunsch schrieb:
> Was mir noch einfällt: mit einem clock prescaler von 4 brauchst du
> zwar trotzdem doppelt so viel Strom wie bei 1 MHz, jedoch bist du
> baudratenmäßig aus dem Schneider (mit U2X-Bit).


Ich habe das jetzt genau so gemacht, und funktioniert. Das sollte eine 
akzeptable Kompromisslösung sein.

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.