Hallo,
ich hab da mal ne Frage, bezüglich der Geschwindigkeit eines Controllers
(Attiny45). Wenn der Controller mit 8Mhz läuft, heisst das, dass der
0,125us für einen Befehl benötigt (also 1/8Mhz)? Ist der so schnell?
Eine andere Frage ist bezüglich eines Timers, wenn man jetzt Prescaler
von 1024 benutze, wird alle 0,032 sekunden die Routine aufgerufen. Was
würde passieren, wenn ich jetzt keinen Prescaler nehmen würde? Dann
würde die Routine ja im prinzip alle 32us aufgerufen werden. Ist das
richtig?
Was würde passieren (jetzt nicht mit diesem Zahlenbeispiel), wenn ich
gerade in der Routine bin und es zu einem erneuten aufruf kommen würde?
Frank
Frank schrieb:> Hallo,> ich hab da mal ne Frage, bezüglich der Geschwindigkeit eines Controllers> (Attiny45). Wenn der Controller mit 8Mhz läuft, heisst das, dass der> 0,125us für einen Befehl benötigt
Es kommt zar auf den Befehl an, aber für die meisten Befehle gilt: ja,
sie werden in 1 Takt abgearbeitet. Es gibt ein paar, die 2 Takte
benötigen.
> (also 1/8Mhz)? Ist der so schnell?
Ja. Was wundert sich das?
Ein mit 8Mhz getakteter Tiny oder Mega macht (einen vernünftigen
praxisbezogenen Befehlsmix zugrunde gelegt) so ca. 6 Millionen Befehle
in der Sekunde.
> Eine andere Frage ist bezüglich eines Timers, wenn man jetzt Prescaler> von 1024 benutze, wird alle 0,032 sekunden die Routine aufgerufen. Was> würde passieren, wenn ich jetzt keinen Prescaler nehmen würde?
Wenn du tatsächlich keinen Prescaler benutzt, dann läuft der Timer
nicht. AChtung: ein Prescaler von 1 ist etwas anderes als 'kein
Prescaler'.
> würde die Routine ja im prinzip alle 32us aufgerufen werden. Ist das> richtig?
Ich habs nicht nachgerechnet, aber ich geh mal davon aus, dass du
65567/8000000 in den Taschenrechner eintippen kannst. (*)
> Was würde passieren (jetzt nicht mit diesem Zahlenbeispiel), wenn ich> gerade in der Routine bin und es zu einem erneuten aufruf kommen würde?
Es kommt nicht zu einem erneuten Aufruf.
Das ein Interruptereignis eingetreten ist, wird zunächst mal in einem
Bit vermerkt. Und erst wenn nach der Abarbeitung der ISR festgestellt
wird, dass das auslösende Bit schon wieder gesetzt ist, erst dann wird
die ISR erneut angesprungen.
Ohne weitere Vorkehrungen kann auf einem AVR ein Interrupt also eine
gerade laufende ISR nicht unterbrechen.
Abgesehen davon: Wenn die INterrupts schneller anfallen, als sie
abgearbeitet werden können ... was denkst du wird dann passieren? Wenn
dir dein Chef alle 10 Minuten eine Akte auf den Schreibtisch legt, du
aber 20 Minuten zur Bearbeitung einer Akte brauchst, was passiert dann?
edit:
(*) bei einem 16 Bit Timer.
Bei einem 8 Bit Timer sind es dann 256/8000000
Wow,
bedankt für die Antwort.
Ein bisschen hat es mich gewundert, da es ja so saumäßig schnell ist und
ich mir das zeitlich einfach nicht vorstellen kann.
Eine kurze Nachfrage, hätte ich bezüglich der Berechnung, ich habe
8000000/1/256 gerechnet und davon den Kehrwert genommen, wodurch ich
dann auf 32us komme. wie kommst du auf 65567/8000000? (davon den
Kehrwert komme ich auf 122)
Frank
Tja, das alte Sprichwort: Das Gegenteil von 'gut' ist 'gut gemeint'. Das
Feature 'bearbeiten' war sicher gut gemeint, nur - man schaut kurz weg,
und plötzlich steht etwas anderes da, man kommt sich vor wie in Orwells
1984.
Frank schrieb:> Wow,> bedankt für die Antwort.> Ein bisschen hat es mich gewundert, da es ja so saumäßig schnell ist und> ich mir das zeitlich einfach nicht vorstellen kann.
Dein Problem ist das der meisten :-)
Ein PC macht 2Ghz. D.h. rein von der CPU her ist so ein PC rund 250 mal
schneller als dein Tiny.
Du hast aber nicht das Gefühl, dass dein PC derartig schnell ist. Bzw.
umgekehrt, wenn du dir deinen PC 250 mal langsamer vorstellst, dann
läuft es dir kalt den Rücken runter.
Das liegt daran, dass zwischen nacktem Silizium und dem Benutzer
unzählige Softwareschichten liegen und die CPU viele Dinge nebenher
machen muss.
Auf einem Tiny bist du aber am nackten Silizium. Das was du
programmierst, das läuft auch auf dem Prozessor. Und sonst nichts
anderes.
Und im übrigen: 8Mhz sind jetzt nicht wirklich schnell. Andere µC wie zb
ARM laufen auch mit 700Mhz, haben also rund die 100 fache
Leistungsfähigkeit wie dein Tiny.
(für die Experten: Ja ich weiss, das hinkt ein wenig. Man kann das nicht
nur an der Taktfrequenz festmachen. Da spielen auch andere Faktoren noch
gewaltig rein)
Frank schrieb:> 8000000/1/256 gerechnet und davon den Kehrwert genommen, wodurch ich> dann auf 32us komme. wie kommst du auf 65567/8000000? (davon den> Kehrwert komme ich auf 122)
weil ich zuerst von einem 16 Bit Timer ausgegangen bin. Als ich dann
dich nachgerechnet habe, habe ich gemerkt, dass du für einen 8 Bit Timer
gerechnet hast. Und da du korrekt gerechnet hast, hab ich meine Zahl
korrigiert.
JA, 2GHz kann ich gar nicht vorstellen, dass so viele sachen in so
kurzer zeit gemacht werden. Ich denke, ich sollte meinen Computer öfters
loben, dass er so schnell sachen erledigt ;)
Alle fragen beantwortet, was will ich mehr.
Recht herzlichen Dank euch allen.
Frank
Karl Heinz schrieb:> weil ich zuerst von einem 16 Bit Timer ausgegangen bin. Als ich dann> dich nachgerechnet habe, habe ich gemerkt, dass du für einen 8 Bit Timer> gerechnet hast. Und da du korrekt gerechnet hast, hab ich meine Zahl> korrigiert.
Hallo!
Zu meinem Verständnis: Wo kommt die Zahl 65567 her?
Ist 2 hoch 16 nicht 65536?
Da gibt es nichts zu verstehen, Moderator schreibt schneller als er
denkt, und muss folglich ständig nachbessern, bis man als aufmerksamer
Beobachter am eigenen Verstand zu zweifeln beginnt.
Bit_Schubser schrieb:> Karl Heinz schrieb:>> weil ich zuerst von einem 16 Bit Timer ausgegangen bin. Als ich dann>> dich nachgerechnet habe, habe ich gemerkt, dass du für einen 8 Bit Timer>> gerechnet hast. Und da du korrekt gerechnet hast, hab ich meine Zahl>> korrigiert.>> Hallo!> Zu meinem Verständnis: Wo kommt die Zahl 65567 her?> Ist 2 hoch 16 nicht 65536?
Ähm. ja klar.
Ziffernsturz