Forum: Mikrocontroller und Digitale Elektronik Baudraten bei 12Mhz


von R2P2 (Gast)


Lesenswert?

Hallo,

ich habe ein 8051 kompatiblen µC von Atmel auf einem Testboard mit
einem 12Mhz Oszillator. Damit will ich unter Anderem einen Dialog zu
einem Terminal über serielle Schnittstelle implementieren.
Ich würde gerne variable Baudraten unterstützen, deshalb nehme ich den
Timer1 als 8Bit-Reload Timer/Counter. Das Problem ist aber, dass ich
nur Baudraten bis 4800baud hinbekomme, bei höheren Baudraten ist der
Reloadwert zu ungenau.
Gibt es da nicht einen Trick, damit ich Baudraten von 9600, 19200 oder
höher implementieren kann, ohne den Oszillator zu wechseln? Bei
11,0592Mhz funktionieren die ja wunderbar. Ich habe jedoch schon das
fertige Board und will keine Veränderungen mehr daran vornehmen.

Rob

von Gerhard Gunzelmann (Gast)


Lesenswert?

Hallo Rob

das ist wohl ein Thema das jeden mal trifft. Das Quarz-Thema ist
besonders unangenehm wenn Du gleichzeitig 9600 Baud und einen Timer mit
genau 1 Sekunde brauchst. Bei Deinem Problem kannste vielleicht über
die Anzahl der Stopp-Bits verhindern daß ein Fehler erzeugt wird
(Framingerror, Parity-Error). Aber nur wenn der Baudrate-Fehler kleiner
als 1 Baudrate-Takt - bezogen auf die Übertragung eines Zeichens -
ist, kann man mit dem Fehler leben. Eine Software-Korrektur oder wie
auch immer ist mir nicht bekannt, da man die internen UART-Abläufe
nicht beeinflussen kann.


Gerhard

von Peter D. (peda)


Lesenswert?

@Gerhard

"Das Quarz-Thema ist besonders unangenehm wenn Du gleichzeitig 9600
Baud und einen Timer mit genau 1 Sekunde brauchst."


Warum ?

Die Baudraten sind doch ganzzahlig.

Nimm einfach den richtigen Quarz für die Baudrate und berechne daraus
den Teiler für die 1 Sekunde.


Peter

von Gerhard Gunzelmann (Gast)


Lesenswert?

Hallo Peter

hast recht.Man muß bloß vorher schon mal rechnen. z.B. 2,4576 Mhz,
4,9152MHz... die gibts und da gehts auf.

Gerhard

von schneidertobi (Gast)


Lesenswert?

R2P2:
Welche einrichtungen hat denn deim MC um Baudraten zu erzeigen?
Es bibt ja Timer(0|1)(weis jezt garnicht welcher es eigendlich ist) und
bei den zu 8052 kompatieblen noch den geneuaren Timer2 und bei manchen
och den BaudrateGenerator(Benutze ich mit meinem AT89C51SND1).

Mit dem timer2 komme ich mit einem AT89S8252 bei 24MHZ genau(0.16% oder
so error) auf 57600Baud.

Auf der keil website gibt es ueberigens einen guten online rechner, mit
dem man baudraten und passende reloadwerte bestimmen kann.

Gruß Tobias

von Benedikt (Gast)


Lesenswert?

Oder nimm den AT89C51xC2
Der hat einen eigenen Baudraten Timer. Damit sind ebenfalls 57600 Baud
bei 24MHz möglich. (wenn man das X2 Bit setzt, wird der Takt
verdoppelt, und es sind sogar 115200 möglich)

von R2P2 (Gast)


Lesenswert?

Naja,

Danke für die Antworten, vorallem für den Tip mit dem Baudraten-Rechner
bei keil.com, aber geholfen hat mir das bisher noch nicht so richtig.
Ich will ein Programm für Kommunikation mit einem Terminal oder Modem
mit variabler Baudrate, also 300, 600, 1200, 2400, 4800, 9600, 19200,
38400 und 57600baud oder so, aber nur diese Standard-Baudraten, die
auch jedes Terminal versteht.
Dazu verwende ich, wie gesagt den Timer1 im Mode 2 als 8Bit-Reload
Timer.
Ich habe ein fertiges Board, was ich nicht verändern will, also auch
keinen Quarz wechseln. Mit dem 11,0592Mhz Standard-Oszillator gehen die
Baudraten ja alle, aber mit meinem 12Mhz-Quarz halt nicht. Das habe ich
selber ausgerechnet und getestet und der keil-Rechner bestätigt mein
Ergebnis auch noch mal. Selbst mit dem Timer2 bekomme ich nur Baudraten
bis 9600baud, laut keil-Rechner.
Da muss ich mich wohl mit dem Ergebnis zufrieden geben, das höhere
Baudraten so nicht funktionieren... das ist ja auch eine Erkenntnis

Also Danke nochmal

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.