Forum: Mikrocontroller und Digitale Elektronik Bitte um Hilfe zur AVR-Timerberechnung


von SueBlue (Gast)


Lesenswert?

Hallo Forum

Ich bin beim AVR-Timer noch nicht so fit, vielleicht kann mir jemand 
helfen.
Hier sind meine Angaben und Fragen:

Ein AVR läuft mit 8Mhz.
Er hat nur 8-Bit Timer (Atiny).
Etwa 8000x/sec soll ein Timer-Interupt kommen. Muss nicht so genau sein.
Innerhalb des Timer-Int werden im Durchschnitt ca. 50 Befehle 
ausgeführt.

Fragen:
1) Wie berechne ich nun die Werte für den Vorteiler und den Vorladewert 
des Timers?

2) Wieviel Prozent der Zeit verbringt der AVR dann etwa im Int?


Vielen Dank
Susanne

von Vorname N. (logout-name)


Lesenswert?

Was heisst etwa?
Ein 8 bit Timer läuft nach 256 Schritten über. Ohne Vorteiler sind dies 
dann 8'000'000 / 256 gibt etwa 32'000 Überläufe pro Sekunde. Wenn du 
also Vorteiler 4 einstellen kannst, dann hauts etwa hin.

von Vorname N. (logout-name)


Lesenswert?

Zur zweiten Frage:
Du hast 50 Befehle. Sind dies ASM-Befehle? Wenn ja, dann schau nach wie 
viel Takte die jeweils brauchen. Bei Branchbefehlen sind die Anzahl 
Taktzyklen meist abhängig davon ob verzweig wird oder nicht, dann kannst 
du einen worst-case berechnen.
Angenommen jeder Befehl braucht 1 Zyklus, dann hast du 8000 mal pro sek 
50 Befehle, das sind 400'000 Befehle pro sek, das entspricht etwa 5% 
Auslastung.

von Falk B. (falk)


Lesenswert?

@ SueBlue (Gast)

>Ich bin beim AVR-Timer noch nicht so fit, vielleicht kann mir jemand
>helfen.

Helfen ja, aber "nur" Hilfe zur Selbsthilfe.

>Ein AVR läuft mit 8Mhz.
>Er hat nur 8-Bit Timer (Atiny).
>Etwa 8000x/sec soll ein Timer-Interupt kommen. Muss nicht so genau sein.

>Innerhalb des Timer-Int werden im Durchschnitt ca. 50 Befehle
>ausgeführt.

>Fragen:
>1) Wie berechne ich nun die Werte für den Vorteiler und den Vorladewert
>des Timers?

Na bei 8 Mhz und 8000 Interrupts pro Sekunde kann man das auch ohne 
Taschenrechner ausrechnen, oder?

8.0000.000 Hz / 8000 = 1000

Passt nicht in einen 8 Bit Zähler. Aber wenn man mit Vorteiler 8 
arbeitet braucht man nur 1000/8=125, dass passt wieder. Vorladewert ist 
eigentlich passe, dafür gibt es den CTC Modus.

>2) Wieviel Prozent der Zeit verbringt der AVR dann etwa im Int?

Kommt auf den Int würde ich sagen. Was sind 50 Befehle? 
Assemblerbefehle? Die dauern meist nur 1 Takt. C-"Befehle"? Kann man 
schwer abschätzen.

MFG
Falk

von Paul Baumann (Gast)


Lesenswert?

Hier ist ein Link:
http://www.roboternetz.de/phpBB2/dload.php?action=file&file_id=169

Mit diesem Programm kann man ein wenig "spielen" und sich die Werte 
errechnen lassen. 50 Befehle im Interrupt?? Wie lange die brauchen, 
hängt natürlich davon ab, welche Befehle es sind, denn die dauern 
nicht immer gleich lang.


MfG Paul

von AVRFan (Gast)


Lesenswert?

Das ist ja nun keine so schwierige Rechnung.

>Ein AVR läuft mit 8Mhz.
>Etwa 8000x/sec soll ein Timer-Interupt kommen.

8 MHz/(8000/s) = 8000000/8000 = 1000

==> Der Timerinterrupt muss alle 1000 Taktzyklen auftreten.

CTC-Modus mit Prescaler 8 und OC0A = 125 leistet das Verlangte, denn 8 * 
125 = 1000.

>Innerhalb des Timer-Int werden im Durchschnitt ca. 50 Befehle ausgeführt.
>Wieviel Prozent der Zeit verbringt der AVR dann etwa im Int?

50 Assemblerbefehle brauchen irgendwas zwischen 50 und 100 Taktzyklen 
(je nachdem welche Befehle).  Der zu erwartende Interrupt-Zeitanteil 
beläuft sich somit auf 50/1000 bis 100/1000, oder in Prozent ausgedrückt 
5 % bis 10 %.

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.