Hallo
Ich bin ein Anfänger in Sachen Mikrocontroller, und habe eine
Verständnisfrage!
Es geht um Zeit und Takt des Mikrocontroller. Wäre nett wenn mir einer
es verdeutlichen könnte!
Wenn ich einen Mikrocontroller nehme kann ich ein Quarz dran Schließen,
der gibt ja den Takt, und mit jedem Takt wird doch ein Befehl
abgearbeitet. Es würden dann bei 4MHz, 4Mio. Takte abgearbeitet oder?
Dann wäre doch die Aussage je Höher der Quarz desto besser, gibt es auch
Nachteile für einen höheren Quarz?
Wenn ich bei einer Übertragung 100us Bitzeiten habe und die flanken
Auswerte, kann ich doch mit einem Größeren Quarz mehr Daten zwischen den
Interrupts bearbeiten?
Lieben Gruß
Hallo,
mit einem schnelleren Takt kannst Du natürlich in der gleichen Zeit mehr
erledigen. Die Nachteile sind höherere Stromaufnahme und eine gegen
störungen empfindlichere Schaltung. Bei 4 MHz ist da aber noch Luft nach
ober ohne das Du Dir graue Haare wachsen lassen mußt.
Eckhard
Naja, kommt ganz auf den Mikrocontroller an.
Das mit 1Takt/1Befehl trifft z.B. auf viele Befehle der
AVR-Mikrocontroller zu. Bei anderen ist dann schon mal nen Teiler drin,
d.h. 4Takte/1Befehl.
Aber AVRs kann man schon auf 20MHz laufen lassen.
Simon wrote:
> Wenn ich einen Mikrocontroller nehme kann ich ein Quarz dran Schließen,> der gibt ja den Takt, und mit jedem Takt wird doch ein Befehl> abgearbeitet. Es würden dann bei 4MHz, 4Mio. Takte abgearbeitet oder?
Nicht ganz, denn die Anzahl der Befehle, die tatsächlich nur einen
Systemtakt benötigen, ist nichtmal die hälfte aller Befehle des ATmega.
Aber im Prinzip hast du recht.
> Dann wäre doch die Aussage je Höher der Quarz desto besser, gibt es auch> Nachteile für einen höheren Quarz?
Ja, je Hochfrequenter man arbeitet, desto mehr Strom braucht das System
(zumeist durch das häufigere be- und entladen der Feldeffekttransistoren
mit Ladungsträger). Mit der Stromaufnahme steigt dann meistens die
Wärmeentwicklung, die man u.U. dann ableiten muss.
Ein weiterer Nachteil sind die in der HF-Technik bekannten Effekte, die
mit steigender Frequenz an Ausprägung gewinnen und häufig nicht
gewünscht sind. (Übersprecher" von Signalleitungen, Flankensteilheit
usw....)
> Wenn ich bei einer Übertragung 100us Bitzeiten habe und die flanken> Auswerte, kann ich doch mit einem Größeren Quarz mehr Daten zwischen den> Interrupts bearbeiten?
Prinzipiell ja. Praktisch ist das System aber nicht nach oben offen....
HI
Danke allen für ihre Antworten,
Habe aber noch 2 Fragen, zu
Niels Hüsken wrote:
>..... zumeist durch das häufigere be- und entladen der Feldeffekttransistoren>mit Ladungsträger). ....
Ab wann sollte man den Mikrocontroller kühlen, gibt es da ne grenze MHz
oder erst wenn er richtig Warm wird?
und kann mir einer sagen was die 2 Kondensatoren, die zu dem Quarz
geschaltet werden, bewirken? Oder was für ein zweck haben!
LG
Simon wrote:
> HI>> Danke allen für ihre Antworten,>> Habe aber noch 2 Fragen, zu>> Niels Hüsken wrote:>>..... zumeist durch das häufigere be- und entladen der Feldeffekttransistoren>>mit Ladungsträger). ....>> Ab wann sollte man den Mikrocontroller kühlen, gibt es da ne grenze MHz> oder erst wenn er richtig Warm wird?
Grundsätzlich gibt der Hersteller vor, ab wann ein Controller wie
gekühlt werden muss. Bei den Avr Megas ist keine Kühlung vorgesehen. Bei
maximaler Taktung braucht der Kontroller noch keine Kühlung.
Nicht, das wir uns falsch verstehen: die maximale Taktung eines
Controllers oder generell einer CPU ist nicht von der maximalen
Temperaturbelastbarkeit bzw Kühlung des Systems abhängig. Die Kühlung
spielt da eigentlich eher eine untergeordnete Rolle.
> und kann mir einer sagen was die 2 Kondensatoren, die zu dem Quarz> geschaltet werden, bewirken? Oder was für ein zweck haben!
Das sind Ausgleichskondensatoren, die die kapazitive Wirkweise der Chip
internen Beschaltung ausgleichen soll.
Niels Hüsken wrote:
> Das sind Ausgleichskondensatoren, die die kapazitive Wirkweise der Chip> internen Beschaltung ausgleichen soll.
Aber warum wird eine kapazitive Wirkungsweise mit Kapazität
ausgeglichen? Ich denke jetzt nur an Kompensation.... Oder ist hier
wahrscheinlich etwas anderes gemeint?
MFG
Aha, danke. Denke mal da ist nun die gesamte Platine gemeint, und die
Last Cs werden nun genommen, damit der Quarz nicht induktiv oder
kapazitiv wirken beginnt.... Hatte mich nur wegen
"die kapazitive Wirkweise der Chip internen Beschaltung"
etwas gewundert, da die ja meines Erachtens nicht so relevant sein
kann...
Oder etwa doch?
Zum thema Takt hätt ich aber auch mal eine Frage:
Wie arbeitet eigentlich ein Mikrocontroller...
es heißt 1Takt=1Befehl.
Was macht er nun wenn eine If-Schleife kommt aber die Bedingung nicht
erfüllt ist. Er springt weiter, brauch er für die erkennung ebenfalls
ein Takt, oder könnt ich ruhig 10 If-Schleifen hintereinander
hängen(letzte soll nur true geben) und er ließt mit einem Takt nur die
die erfüllt ist aus?
MfG Axel
Und Du musstest für Deine Frage tatsächlich einen seit über einem Jahr
toten Thread reaktivieren? Und das, wo Deine Frage mit dem Thema des
Threads so rein gar nichts zu tun hat?
Eine "if-schleife" ist ein falsch benanntes Konstrukt einer Hochsprache,
das in Maschinenanweisungen übersetzt wird.
Und die Überprüfung einer Bedingung benötigt immer Zeit, egal, ob die
Bedingung nun zutrifft oder nicht.
Sieh Dir den Assemblercode an, den Dein Compiler aus einem if-Statement
erzeugt, je nach Komplexität der ausgewerteten Bedingung kann das ganz
schön viel Code werden.
Das hängt z.B. vom Datentyp von Variablen ab, die in der Bedingung
ausgewertet werden.
uint8_t b;
int i;
float f;
if (b == 1)
...
if (1 == 1)
...
if (f == 1.0)
...
Bereits die ersten beiden Varianten können unterschiedliche aufwendig
werden, wenn z.B. auf einem AVR ein 16-Bit-Wert nicht mit einem
Maschinenbefehl verarbeitet werden kann (da das eine 8-Bit-Architektur
ist).
Das dritte Beispiel ist dagegen richtig aufwendig, da hier
floating-Point-Arithmetik verwendet wird.
Die Anzahl der Taktzyklen, die die Ausführung von Maschinenanweisungen
benötigt, ist im Datenblatt/Programmierhandbuch des jeweiligen
Controllers beschrieben, die Verallgemeinerung "1Takt=1Befehl" ist im
allgemeinen falsch.
Übrigens gibt es keine "if-schleifen".
> es heißt 1Takt=1Befehl.
Noe, das heisst es nicht. Es gibt Befehle die sind so schnell,
andere wiederum sind langsamer. Im Datenblatt eines Controllers
steht genau drin welcher Befehl wieviele Takte braucht.
> ein Takt, oder könnt ich ruhig 10 If-Schleifen hintereinander
Wir wissen nicht von welchem Prozessor du sprichst. Ich kenne
keinen Prozessor der einen IF Befehl kennt. Ich kenne nur Hochsprachen
mit solchen Befehlen. Dort wird dieser Befehl wohlmoeglich in mehre
Maschienenbefehle umgesetzt.
Und gerade ein Sprungbefehl bei einem Prozessor gehoert normalerweise zu
den Befehlen die gerne mehr Takte brauchen, unter Umstaenden sogar
unterschiedlich viele, wenn der Sprung an Bedingungen geknuepft ist.
Oder auch abhaengig von der Sprungweite. (relativ, absolut, 16, 24 oder
32bit Adressierung)
Olaf
Erstens wird ein if in aller Regel zu mehreren Maschinenbefehlen
kompiliert, die jeweils mindestens einen Takt brauchen, und
zweitens werden bei langen if-else if...-Ketten alle nacheinander
abgeklappert, bis eine erfüllt ist.
Das ist eben der Vorteil eines switch, bei dem der Compiler
besseren Code ausspucken kann, dessen Laufzeit unabhängig
von der Position des Sprungziels ist.
> es heißt 1Takt=1Befehl.
Das ist so nicht richtig, siehe oben.
in Kürze:
1Takt=1Befehl: Das hängt allgemein vom µC ab, aber mit "Befehl" ist hier
ohnehin nich ein Befehl in C o.ä. gemeint, sondern 1 Befehl im Binären,
also sprich: Addiere a zu b, zum Beispiel. Hat man sowas in C wie
strval, also einen Befehl, so ist das eine Abarbeitung vieler einzelner
Schritte auf Prozessor/Hardwareebene. Das braucht dann mehrere Takte.
________________________________________________________________
Rechtschreibfehler wurden mit Liebe eingebaut.
Ich finde es lieb von dir, dass du dich des Themas annimmst.
Aber bitte nimm auch zur Kentniss, dass die Urfrage 2008 gestellt wurde,
die Ergänzung 2010.
Das alles ist lange her.
Und ehrlich gesagt, frage ich mich, auf welch krausem Weg du den Thread
wieder ausgegraben hast. So alte Threads machen im Regelfall nur eines:
sie verbrauchen Platz in der Datenbank auf dem Server.
Bitte lass so alte Kamellen einfach ruhen. Sie haben es sich verdient.