Forum: Mikrocontroller und Digitale Elektronik Zeitliches Verhalten Attiny


von Frank (Gast)


Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

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

: Bearbeitet durch User
von Frank (Gast)


Lesenswert?

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

von der alte Hanns (Gast)


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

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)

von Karl H. (kbuchegg)


Lesenswert?

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.

: Bearbeitet durch User
von Frank (Gast)


Lesenswert?

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

von Bit_Schubser (Gast)


Lesenswert?

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?

von der alte Hanns (Gast)


Lesenswert?

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.

von Mike (Gast)


Lesenswert?

Bit_Schubser schrieb:
> Zu meinem Verständnis: Wo kommt die Zahl 65567 her?

Das musst du doch wissen. Im µC kommt der keine besondere Bedeutung zu.

von Karl H. (kbuchegg)


Lesenswert?

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

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.