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
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 ...
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
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 :)
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.
Warum ist es für dich wichtig einen glatten Maschienenzyklus zu haben?
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. :)
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
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? :)
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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.