www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik 89C51AC2 UART Variable Baudrate 31.52kBaud


Autor: John (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Zusammen!

Ich habe folgendes problem mit dem UART des 89C51AC2:

Ich muss mithilfe des UART 8 Datenbits und ein Start- und Stoppbit auf 
eine MIDI Schnittstelle übertragen.
Die Baudrate des MIDI Standard ist 31.52kBaud (31520Bits/s).

Um die Variable Baudrate zu setzten muss ich somit den 8-bit UART mit 
Variabler Baudrate auswählen.

Wie verwende ich den Timer 1 (tf1) als Baudratengenerator?
Und wie berechne ich die Reloadwerte des Timers für die Baudrate von 
31.52kBaud?
Muss ich im Timer-Interrupt den Timer ständig nachladen?

Ich hoffe jemand kann mir mit meinem Anliegen helfen.
Danke im Voraus!

Autor: Bernd N (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: John (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nachtrag:
Oszillatorfrequenz ist 12.00MHz, kann aber auch ein 16.00MHz Quarz 
verwenden, wenn es weniger Abweichung geben würde.

Danke für die schnelle Antwort.

Laut dieser Berechnung von Keil würde dies einen Reloadwert von 0FEh und 
somit 31,250.00Baud geben, was weniger als 1% Abweichung ergeben würde.

Sehe ich das richtig, das ich TMOD auf 0x20 setzte und somit den
Mode 2: 8-bit auto-reload Timer/Counter (TL1). (1)
konfiguriere?

Wird diese Baudrate übernommen sobald ich den UART in den 8-bit Variable 
Mode setzte?

Autor: Es (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
MIDI ist 31250 baud das geht mit 12 Mhz Normalerweise genau.
BDMidi  EQU  0FFh    ;6Mhz
;BDMidi  EQU  0FEh    ;12Mhz
........

         MOV  PCON,#80h
  MOV     TMOD,#00100001b                    ;T0=TIMER T1=TIMER
         MOV     TH1,#BDMidi                        ;ZAEHLWERT FUER BAUDR.
         MOV     TL1,#BDMidi

  MOV     SCON,#01010000b                    ;8BIT, TXD READY-FLAG

  MOV  IE,#00h                    ;INTERR. AUSSCHALTEN

  SETB  ES             ;RS232 AN
  SETB  TR1             ;TIMER 1 EIN

         SETB    EA                                ;INTERR. ALLG. ERLAUBEN
  RET


Funktioniert seit min. 10 jahren so.

Autor: Bernd N (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>> Sehe ich das richtig, das ich TMOD auf 0x20 setzte und somit den
>> Mode 2: 8-bit auto-reload Timer/Counter (TL1). (1)
>> konfiguriere?

Ja

Wie wärs mit nem Baudratenquarz ? oder bist du auf die Frequenz 
festgelegt ?

Autor: John (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es schrieb:
> MIDI ist 31250 baud das geht mit 12 Mhz Normalerweise genau.

Stimmt, MIDI ist 31250 baud. In diesem Fall ginge das genau.

Auf der Seite von Keil kann man SMOD = 0 oder SMOD = 1 auswählen.
Beim AC2 aber kann man SMOD0 oder SMOD1 setzten, mit SMOD0 kann man 
"framing error detection" aktivieren und mit SMOD1 die Baudrate 
verdoppeln.
Welches SMOD ist auf der Keil Berechnung gemeint?

Wie muss ich das PCON register setzten?

SMOD0 = 1    Baudrate verdoppeln
SMOD1 = 0    SCON SM00

Autor: John (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bernd N schrieb:
> Wie wärs mit nem Baudratenquarz ? oder bist du auf die Frequenz
> festgelegt ?

Mit dem 12Mhz sollte es genau gehen. über 30Mhz wäre etwas schnell für 
den AC2.

Autor: Bernd N (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
PCON = 0x80; => Baudrate verdoppeln.

Nehm es mir nicht übel, ich habe deine Rechnung nicht nachvollzogen, der 
Einwand 1% Fehler kam von dir.

>> über 30Mhz wäre etwas schnell für den AC2.

Wie kommst du darauf das 30 MHz ein Baudratenquarz ist ?

Wie wärs wenn du mal dir Werte eingibst und es ausprobierst... ich habe 
keine entsprechende Hardware aber das Ganze ist doch in 3 Minuten 
ausgestanden.

Autor: John (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Rechnung mit der Abweichung ist auf die Baudrate von 31520 bezogen, 
was falsch ist. Mit 31250 ergibt es keine Abweichung.

Habe erst jetz gelesen was ein Baudratenquarz ist, da man aber mit 12MHz 
genau 31250 baud erreichen kann hat es sich sowieso erledigt.

Ich werde den UART bei Gelegenheit ausprobieren.

Autor: John (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe den das UART mit Annäherungsversuchen auf die gewünschten 31250 
baud gebracht. Reloadwert für Timer1 im Modus 2 ist 0xFE.

Der UART scheint nach dem Startbit das LSB zu senden.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
John schrieb:
> Ich habe den das UART mit Annäherungsversuchen auf die gewünschten 31250
> baud gebracht. Reloadwert für Timer1 im Modus 2 ist 0xFE.

Oh Gott, ist es denn wirklich so schwer, die Formel aus dem Datenblatt 
in den Taschenrechner einzutippen?

C-Programmierer sind selbst dazu zu faul, sie schreiben die Formel hin 
und lassen es den Compiler ausrechnen.

> Der UART scheint nach dem Startbit das LSB zu senden.

Das habe ausnamslos alle UARTs so an sich. Wenn nicht, dann wäre es 
keine UART.
Hätte man aber auch sofort im Datenblatt lesen können.


Peter

Autor: JackTheCoder (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Peter Dannegger schrieb:
> Oh Gott, ist es denn wirklich so schwer, die Formel aus dem Datenblatt
> in den Taschenrechner einzutippen?

Formel aus dem Datenblatt? Schön wärs. Wenn die Formel im Datenblatt des 
AT89C51AC2 wäre und der Zusammenhang zwischen Timer 1 und dem UART so 
schön erklärt wäre wie du denkst, dann wäre manche Posts in diesem Forum 
überflüssig.

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.