Forum: Mikrocontroller und Digitale Elektronik 8051: Oszillatorfrequenz und Maschinenzyklus


von Sebastian Barth (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

ich habe mich für mein Board für einen AT98C51ED2 entschieden
(Datasheet als Anhang).

In einem anderen Thread von mir habe ich mich über die beste Frequenz
des Quarzes erkundigt.
Wir sind auf den 11.0592 Mhz Quarz gekommen.

Jetzt meine Fragen:
Wie groß ist dabei ein Maschinenzyklus?

Ich möchte gerne einen runden Maschinenzyklus haben. Einen den man ohne
Kommawerte leicht hochrechnen kann. Z.B. 1µs oder 2µs, oder auch noch
kleiner.
Muss ich dazu einen anderen Quarz nehmen? Wäre kein Problem. Will aber
über UART programmieren und so wie ich das richtig mit bekommen habe,
gibt es da Probleme bei gewissen Frequenzen. Ich will die UART nur zum
Programmieren benutzen.


Ich bitte um eure Hilfe! :)

Mit freundlichen Grüßen,
Sebastian Barth

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Bei einfachen MCS51-Varianten ist ein Maschinenzyklus zwölf Takte lang,
bei einem 12 MHZ-Takt also 1 µsec.
Mit Deinem Quarz kommt 'ne ungerade Zahl heraus, halt etwas mehr als 1
µsec.

Das ist ein catch-22, entweder Du erhältst saubere Baudraten oder Du
hast eine leicht berechenbare Maschinenzykluslänge ...

von Sebastian Barth (Gast)


Lesenswert?

Hi,

Was genau bedeutet die Fehlerquote der UART?

10% heißt, dass jede 10. Information Müll wird?

Wird dann nicht die Nachricht nochmal gesendet / Merkt das der µC
nicht?

Es ist klar, dass die Fehlerqoute so klein wie möglich sein sollte.
Aber wie hoch darf sie sein?

Wieso ist das überhaupt so ein Problem?

Würde gerne einen Maschinenzyklus von 2µs haben, also 24Mhz Quarz
(Oder?). Wie hoch ist die Fehlerqoute? Vernachlässigbare Fehlerqoute?


Danke im Voraus .. Sebastian Barth

von Sebastian Barth (Gast)


Lesenswert?

Habe das Forum und andere Seiten nocheinmal durchsucht.
Leider keine Lösung gefunden.
Ich bitte euch, .. lasst euch herab und macht mich ein wenig klüger :)

von unbekannt (Gast)


Lesenswert?

Jetzt überleg nochmal, wenn die Frequwnz höher ist was passiert dann nit
der Zeit (Maschinenzyklus) ?

Fehler Qute heit z.B. 1 Bit muss 1ms Lang sein ist aber nur 0,9ms Lang.
Um die Behandlung von falsch empfangenen Bytes muss du dich selber per
Software kümmern.

von unbekannt (Gast)


Lesenswert?

Warum ist es für dich wichtig einen glatten Maschienenzyklus zu haben?

von Sebastian Barth (Gast)


Lesenswert?

Damit ich möglichst präzise zählen kann. Zeitlich gebunden am
Sekunden-Takt.

Da ich die UART nur zum Programmieren des Controllers benutze, kann ich
keine eigene Fehlerkorrektur machen. Würde das bedeuten, dass das
Programm, welches ich vom PC in den Controller übertrage, bei einer
Fehlerqoute >0% fehlerhaft übertragen wird?

So ganz verstehe ich das nicht. :)

von Yagan Ζ. D. (yagan)


Lesenswert?

Sebastian,

die UART des PCs toleriert normalerweise Fehler bis 2% problemlos,
oberhalb von 5% kann es kritisch werden.
24MHz Quarztakt bedeutet bei einem 'klassischen' 8051 0,5µs
Befehlszykluszeit.
Bei Verwendung des Timer 2 als Baudrategenerator sind die Abweichungen
ausreichend niedrig:

; Taktinformationen für CPU-Quarz 24.000000 MHz:

; Befehlszyklus      0.5000 µs.
; Timertakt Mode 0:  2.0000 MHz (TL),    16.00 µs / 62.50 kHz (TH).
; Timertakt Mode 1:  2.0000 MHz (TL),   128.00 µs / 7.8125 kHz (TH).
; Baudrate Timer 1:  2.0000 MHz / 16 =  125.000 kBd maximal.
; Baudrate Timer 2: 12.0000 MHz / 16 =  750.000 kBd.

; Baudratetakt (Timer 1, Mode 2, SMOD=1, -SMOD=0 ):
;   Sollwert    Timer   Istwert     Fehler
;   0.110 kB     256-    0.244      109.7 %
;   0.150 kB     256-    0.244       62.8 %
;   0.300 kB     208-    0.300        0.2 %
;   0.600 kB     208     0.600        0.2 %
;   1.200 kB     104     1.202        0.2 %
;   2.400 kB      52     2.404        0.2 %
;   4.800 kB      26     4.808        0.2 %
;   9.600 kB      13     9.615        0.2 %
;  14.400 kB       9    13.889       -3.5 %
;  19.200 kB       7    17.857       -7.0 %
;  19.200 kB       6    20.833        8.5 %
;  28.800 kB       5    25.000      -13.2 %
;  28.800 kB       4    31.250        8.5 %
;  31.250 kB       4    31.250        0.0 %
;  38.400 kB       3    41.667        8.5 %
;  57.600 kB       2    62.500        8.5 %
;  62.500 kB       2    62.500        0.0 %
;  76.800 kB       2    62.500      -18.6 %
; 115.200 kB       1   125.000        8.5 %
; 125.000 kB       1   125.000        0.0 %

; Baudratetakt ( Timer 2 ):
;   Sollwert    Timer   Istwert     Fehler
;   0.110 kB     6818    0.110        0.0 %
;   0.150 kB     5000    0.150        0.0 %
;   0.300 kB     2500    0.300        0.0 %
;   0.600 kB     1250    0.600        0.0 %
;   1.200 kB      625    1.200        0.0 %
;   2.400 kB      312    2.404        0.2 %
;   4.800 kB      156    4.808        0.2 %
;   9.600 kB       78    9.615        0.2 %
;  14.400 kB       52   14.423        0.2 %
;  19.200 kB       39   19.231        0.2 %
;  28.800 kB       26   28.846        0.2 %
;  31.250 kB       24   31.250        0.0 %
;  38.400 kB       20   37.500       -2.3 %
;  38.400 kB       19   39.474        2.8 %
;  57.600 kB       13   57.692        0.2 %
;  62.500 kB       12   62.500        0.0 %
;  76.800 kB       10   75.000       -2.3 %
; 115.200 kB        7  107.142       -7.0 %
; 125.000 kB        6  125.000        0.0 %

Ciao, Yagan

von Sebastian Barth (Gast)


Lesenswert?

Super, Danke!
Wie bist du an diese Daten gekommen? :/

Würde selbiges gerne für 11,05920Mhz und 12Mhz wissen.

Wärest du so lieb? :)

von Yagan Ζ. D. (yagan)


Lesenswert?

Sebastian,

die Werte stammen aus meiner 8051-Library, lassen sich aber leicht
berechnen.

Hier die Angaben für 11,0592 und 12 MHz:

; Taktinformationen für CPU-Quarz 11.059200 MHz:

; Befehlszyklus      1.0851 µs.
; Timertakt Mode 0:  0.9216 MHz (TL),    34.72 µs / 28.80 kHz (TH).
; Timertakt Mode 1:  0.9216 MHz (TL),   277.78 µs / 3.6000 kHz (TH).
; Baudrate Timer 1:  0.9216 MHz / 16 =   57.600 kBd maximal.
; Baudrate Timer 2:  5.5296 MHz / 16 =  345.600 kBd maximal.

; Baudratetakt (Timer 1, Mode 2, SMOD=1, -SMOD=0 ):
;   Sollwert    Timer   Istwert     Fehler
;   0.110 kB     256-    0.113        2.3 %
;   0.150 kB     192-    0.150        0.0 %
;   0.300 kB     192     0.300        0.0 %
;   0.600 kB      96     0.600        0.0 %
;   1.200 kB      48     1.200        0.0 %
;   2.400 kB      24     2.400        0.0 %
;   4.800 kB      12     4.800        0.0 %
;   9.600 kB       6     9.600        0.0 %
;  14.400 kB       4    14.400        0.0 %
;  19.200 kB       3    19.200        0.0 %
;  28.800 kB       2    28.800        0.0 %
;  31.250 kB       2    28.800       -7.8 %
;  38.400 kB       2    28.800      -25.0 %
;  57.600 kB       1    57.600        0.0 %
;  62.500 kB       1    57.600       -7.8 %
;  76.800 kB       1    57.600      -25.0 %
; 115.200 kB       1    57.600      -50.0 %
; 125.000 kB       1    57.600      -53.9 %

; Baudratetakt ( Timer 2 ):
;   Sollwert    Timer   Istwert     Fehler
;   0.110 kB     3142    0.110        0.0 %
;   0.150 kB     2304    0.150        0.0 %
;   0.300 kB     1152    0.300        0.0 %
;   0.600 kB      576    0.600        0.0 %
;   1.200 kB      288    1.200        0.0 %
;   2.400 kB      144    2.400        0.0 %
;   4.800 kB       72    4.800        0.0 %
;   9.600 kB       36    9.600        0.0 %
;  14.400 kB       24   14.400        0.0 %
;  19.200 kB       18   19.200        0.0 %
;  28.800 kB       12   28.800        0.0 %
;  31.250 kB       11   31.418        0.5 %
;  38.400 kB        9   38.400        0.0 %
;  57.600 kB        6   57.600        0.0 %
;  62.500 kB        6   57.600       -7.8 %
;  76.800 kB        5   69.120      -10.0 %
; 115.200 kB        3  115.200        0.0 %
; 125.000 kB        3  115.200       -7.8 %

---------------------------------------------

; Taktinformationen für CPU-Quarz 12.000000 MHz:

; Befehlszyklus      1.0000 µs.
; Timertakt Mode 0:  1.0000 MHz (TL),    32.00 µs / 31.25 kHz (TH).
; Timertakt Mode 1:  1.0000 MHz (TL),   256.00 µs / 3.9063 kHz (TH).
; Baudrate Timer 1:  1.0000 MHz / 16 =   62.500 kBd maximal.
; Baudrate Timer 2:  6.0000 MHz / 16 =  375.000 kBd maximal.

; Baudratetakt ( Timer 1, Mode 2, SMOD=1, -SMOD=0 ):
;   Sollwert    Timer   Istwert     Fehler
;   0.110 kB     256-    0.122       11.0 %
;   0.150 kB     208-    0.150        0.2 %
;   0.300 kB     208     0.300        0.2 %
;   0.600 kB     104     0.601        0.2 %
;   1.200 kB      52     1.202        0.2 %
;   2.400 kB      26     2.404        0.2 %
;   4.800 kB      13     4.808        0.2 %
;   9.600 kB       7     8.929       -7.0 %
;   9.600 kB       6    10.417        8.5 %
;  14.400 kB       4    15.625        8.5 %
;  19.200 kB       3    20.833        8.5 %
;  28.800 kB       2    31.250        8.5 %
;  31.250 kB       2    31.250        0.0 %
;  38.400 kB       2    31.250      -25.0 %
;  57.600 kB       1    62.500        8.5 %
;  62.500 kB       1    62.500        0.0 %
;  76.800 kB       1    62.500      -18.6 %
; 115.200 kB       1    62.500      -45.7 %
; 125.000 kB       1    62.500      -50.0 %

; Baudratetakt ( Timer 2 ):
;   Sollwert    Timer   Istwert     Fehler
;   0.110 kB     3409    0.110        0.0 %
;   0.150 kB     2500    0.150        0.0 %
;   0.300 kB     1250    0.300        0.0 %
;   0.600 kB      625    0.600        0.0 %
;   1.200 kB      312    1.202        0.2 %
;   2.400 kB      156    2.404        0.2 %
;   4.800 kB       78    4.808        0.2 %
;   9.600 kB       39    9.615        0.2 %
;  14.400 kB       26   14.423        0.2 %
;  19.200 kB       20   18.750       -2.3 %
;  28.800 kB       13   28.846        0.2 %
;  31.250 kB       12   31.250        0.0 %
;  38.400 kB       10   37.500       -2.3 %
;  57.600 kB        7   53.571       -7.0 %
;  57.600 kB        6   62.500        8.5 %
;  62.500 kB        6   62.500        0.0 %
;  76.800 kB        5   75.000       -2.3 %
; 115.200 kB        3  125.000        8.5 %
; 125.000 kB        3  125.000        0.0 %

Ciao, Yagan

von unbekannt (Gast)


Lesenswert?

Wenn du den 11,05920M Quarz verwendest, dann wird dieser Takt erst durch
12 geteilt = 921600Hz dann per software est dur 1024 teil ergibt 900 und
dann durch 900 teilen und schon hast du 1 Hz.

von unbekannt (Gast)


Lesenswert?

Da habe ich wohl ein bissl schnell getippt und ein paar Buchstaben
verschluckt.
est = erst
dur = durch
teil = teilen

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.