www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Baudraten bei 12Mhz


Autor: R2P2 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Gerhard Gunzelmann (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Gerhard Gunzelmann (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: schneidertobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Benedikt (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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)

Autor: R2P2 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.