mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Baudrate exakt einstellen


Autor: Chris Dorner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
Ich arbeite für die Schule an einem Projekt, wo unter anderem Daten vom 
Microcontroller (AT89S8252) über die serielle Schnittstelle an den PC 
übertragen werden (eigene PC-Software [C++], bzw. Hyperterminal zum 
testen).
folgendes Problem:
Ich programmiere den MC mit Keil uVision mit assembler. Der Debugger 
dort zeigt mir bei gesetztem BD eine Baudrate von 8012 an. Da man am PC 
nicht so wirklich solche krummen Raten einstellen kann, führt dies zu 
einer verfälschung bei der Datenübertragung.
Frage: wie kann ich jetzt die Baudrate am Microcontroller so genau 
einstellen, damit ich gängige Werte erreichen kann (9600, 4800, ...)

Vielen Dank schonmal für die antworten

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
geht nur exakt, wenn du auch den passenden Quarz verwendest. Die 
Baudrate wird aus der Quarzfrequenz über (einstellbare) Teiler erzeugt, 
und das geht nunmal nur mit ganzen Zahlen.
Bist du an die Quarzfrequenz gebunden, hilft nur: runter mit der 
Baudrate, da findet man dann meist einen passenden Teilerwert. Schreib 
mal, welchen Quarz du hast.

Autor: Chris Dorner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das ist ein 12 Mhz-Quarz...

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
4800 baud bekommt man mit dem 12MHz-Quarz noch gut hin (TH1=-13)-> 
Baudrate=Quarz/16/12/13=4807) das passt. Ansonsten einen 11.094MHz-Quarz 
verwenden, dann kannst du alle gängigen Baudraten benutzen.

Autor: Peter Dannegger (peda)
Datum:
Angehängte Dateien:
  • 12m2_5 (816 Bytes, 139 Downloads)

Bewertung
0 lesenswert
nicht lesenswert
Einen Fehler bis max 2,5% verträgt die RS-232, wenn man nicht gerade 
super lange Leitungen verwendet.

Anbei die Liste der möglichen Baudraten und Teilerfaktoren bei 
Verwendung von T1 bzw. T2 für die UART.


Peter

Autor: Chris Dorner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok gut, und wie programmier ich das dann?

einfaches beispiel: (sendet '1' über serielle schnittstelle)
---------------------------------------------------
$nomod51
$include(reg515.inc)


start:     mov SCON,#01000000b  ;Serielle Schnittstelle auf Mode 1 
setzen

    setb BD

bla:    mov A,#31H
    clr TI
    mov SBUF,A
    jnb TI,$

end
------------------------------------------------------

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
oh, lange nichts mehr mit 51er in Assembler gemacht, es fehlt aber noch 
die Baudrateneinstellung.
Laufzeitmässig ist es aber besser, das TI-Flag vor dem Schreiben nach 
SBUF zu prüfen. Mit deinem Programm wartest du die ganze Zeit, bis das 
Zeichen auch raus ist.
also:
jnb TI, §
clr TI
mov SBUF, A
Damit kannst du die Zeit, während die UART sendet, für andere Aufgaben 
nutzen.

Autor: Chris Dorner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok, vielen dank schonmal..
jetzt brauch ich nur noch die baudrateneinstellung...
ich hab leider keine ahnung wie ich das jetzt programmier..

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das kann aber voll ins Auge gehen, wenn Du den AT89S8252 verwendest, 
aber den

$include(reg515.inc)

als Zielprozessor definierst.
Wie man den T1 oder T2 als Baudratengenerator verwendet findest Du im 
AT89S8252 Datenblatt.


Peter

Autor: Chris Dorner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok, habs hingekriegt, wie das geht... aber irgendwie sendet der immer 
noch müll...

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.