Hallo,
ich bin mir bei den Begriffen aus der MC-Welt noch nicht so ganz sicher,
ob ich aller richtig verstanden habe. Wir arbeiten im Studium mit einem
MC8051, die Fragen sind aber eher allgemeiner Natur. Ich geb mir meine
Antworte teilweise mal gleich selber, vielleicht kann mir jemand sagen,
ob ich es richtig verstanden habe ;)
Quarztakt/Zyklen
-----------------
Der 8051 arbeitet mit einem Quarztakt von 11.0592 MHz und hat pro
Quarztakt 12 Zyklen, dh 11059200/12 = 921600 Zyklen pro Sekunde
Was mir noch nicht so ganz klar ist, ist der Begriff Zyklus. Ist ein
Zyklis die Pegeländerung von Low auf High oder ist ein Zyklus von
low->high->low
BAUD/BAUD-Rate
----------------
Mir ist noch nicht ganz klar, was in diesem Zusammenhang mit Symbol
gemeint ist:
1 Baud ist die Geschwindigkeit, wenn 1 Symbol pro Sekunde übertragen
wird
Soweit ich verstanden habe, kann ein Symbol aus x Bits bestehen. Aber wo
ist festgelegt, wie viele Bits das sind?
Ein einfaches Beispiel wäre ja die Übertragung von ASCII-Codes (7 Bit)
mit einem Prüfbit (Odd Parity) sind dann diese 7 bit oder 8 bit das
Symbol?
In unserem Beispiel haben wir über Timer1 eine Baudrate von 1200Bd
generiert. Da ist mir auch noch nicht ganz klar, welche Bedeutung der
Timer für die Serielle Schnittstelle hat. wird beim Timerüberlauf
automatisch der Interrupt für die Schnittstelle ausgelöst? Oder gibt
diese der Schnittstelle einen Takt vor, wann er ein anliegendes Signal
in den nächsten Buffer-Platz legen soll
Fragen über Fragen ;)
Vielen Dank erstmal.
Sascha wrote:
> BAUD/BAUD-Rate> ---------------->> Mir ist noch nicht ganz klar, was in diesem Zusammenhang mit Symbol> gemeint ist:> 1 Baud ist die Geschwindigkeit, wenn 1 Symbol pro Sekunde übertragen> wird>> Soweit ich verstanden habe, kann ein Symbol aus x Bits bestehen. Aber wo> ist festgelegt, wie viele Bits das sind?
Im Protokoll.
Schau mal in der Wikipedia nach RS-232, da wird beschrieben, dass es
zwei Pegel gibt. Der eine steht für 1, der andere für 0.
Bei GBit-Ethernet ist das anders. Aber das steht immer im jeweiligen
Standard.
> Ein einfaches Beispiel wäre ja die Übertragung von ASCII-Codes (7 Bit)> mit einem Prüfbit (Odd Parity) sind dann diese 7 bit oder 8 bit das> Symbol?
Symbol != Buchstabe.
Ein Symbol ist die kleinste Information:
Beim RS-232 ist also ein Symbol ein Bit.
Zusätzlich zur Parity kommen noch Start- und Stopbit hinzu. Oft brauchst
du also 11 Bit pro Charakter, den du übertragen willst.
Beim GBit können mehrere Bit pro Symbol übertragen werden, siehe WP.
Ok, also kommt es auf die schnittstelle bzw das jeweilige Protokoll an,
aus wie vielen wie Bits (High-Pegel) ein Symbol besteht. Bei der RS-232
also 1 Bit / Signal, d.h. mit Start- und Stoppbit brauche ich 11 Symbole
um einen ASCII-Zeichen / s übertragen zu können. Bei 1200Bd wären das
also 1200/11 = 109 Zeichen / s
Und der Timer? Gibt der an, in welchen Zyklen nach wie viel Zyklen das
nächste BIT gelesen wird?
Achja, und da war noch die Frage nach dem Zyklus ;)
Danke!!
Bei dem "Zyklus" bin ich mir nicht sicher.
Aber da schau doch einfach mal genau ins Datenblatt deines Prozessors.
Oft steht da, für welche Maschinenbefehle wieviele Zyklen benutzt
werden.
Sascha wrote:
> Und der Timer? Gibt der an, in welchen Zyklen nach wie viel Zyklen das> nächste BIT gelesen wird?
Bei den UARTS wird oft sogar mit einem Vielfachen der Geschwindigkeit
gemessen.
Z.B. pro Bit dreimal abgetastet. Wenn wenigstens zweimal eine 1 gemeldet
wird, wirds wohl eine gewesen sein.
Bei RS-232 sind Sende und Empfänger ja nicht synchron.
Bei Synchronen Protokollen reicht auch einmal messen.
Die Mikroprozessoren haben UARTS als Peripherie; wie die genau intern
arbeiten, weiß ich nicht.
Aber um die Timer brauch man sich ja auch nicht zu kümmern. Man stellt
die Einstellung richtig ein und gut ist.
Ab dann bekommt man fertige Chars raus.
Zyklus:
1 Befehlszyklus = 12 Oszillator- oder Maschinen-Zyklen
Ein Zyklus ist eine sich wiederholende Abfolge, d.h. in diesem Fall von
dem Moment an, ab der das Signal low wird bis es wieder low wird:
LLHHLLHHLL
^ ^
Du kannst auch sagen, dass es die Periodendauer einer Frequenz ist, also
so, wie man es in der Schule gelernt hat :)
Mittlerweile gibt es natürlich neue Technologien, so dass die
12er-Teilung bei neueren 8051-Derivaten nicht mehr gegeben ist, sondern
eine 6er, 4er und bisweilen sogar eine 1er-Teilung möglich ist!
Der Timer gibt den Takt für den UART vor, wobei der Takt normalerweise
das 16-fache der Baudrate ist.
Wie weiter oben bereits gesagt wurde, wird eine 2-aus-3 Auswertung
vorgenommen, um Störeinflüsse zu ver(h/m)indern.
Somit stimmt es also nicht, dass pro Timer-Überlauf 1 Bit gelesen wird!
Guck mal in den Anhang, da steht alles beschrieben, auch die Zyklen
usw., und wenn noch Fragen sind, kannst ja nochmal schreiben.
Ralf
> Wir arbeiten im Studium mit einem MC8051...
Und das Skript wird auf Steintafeln gemeißelt... ;-)
> Was mir noch nicht so ganz klar ist, ist der Begriff Zyklus.
Ein Zyklus ist ein kompletter, nicht unterbrechbarer Durchlauf der
internen Statemachine. Bestehend aus Befehl holen, Befehl
interpretieren, Befehl ausführen, Ergebnis ablegen. Damit kann ein
"Elementarbefehl" (z.B. Akku löschen) ausgeführt werden. Wenn aber
Operanden aus bestimmten Speicherbereichen (z.B. RAM) benötigt werden,
sind zusätzliche Zyklen nötig.
Ok, dann danke ich erstmal soweit und danke für die Datei, werd mir das
auf jeden Fall mal durchlesen !
[quote]Und das Skript wird auf Steintafeln gemeißelt... ;-)[/quote]
Nein, das Skript ist an und für sich auch ganz gut, aber das stand halt
nicht drin.
Manchmal ist es so, dass die Profs Dinge stillschweigend voraussetzen
oder nur in der Vorlesung kurz erwähnen. Leider habe ich aus
gesundheitlichen Gründen aber die ersten beiden Vorlesungen zu dem Thema
verpasst und stieß im Rahmen der Prüfungsvorbereitung wieder darauf.
Vielleicht ist es für die Prüfung auch eher nicht wirklich wichtig, weil
man im Prinzip wirklich nur den Timer einstellen muss und die Baud-Rate
im Falle einer entsprechenden Aufgabe gegeben hat.Aber ich versuche
lieber die Dinge auch halbwegs zu verstehen ;)