Guten Tag, Ich beschäftige mich gerade mit Interrupts ein bisschen und bin gerade am überlegen, wie der Mikrocontroller eigentlich einen Zähler hochzählt und ob es bei folgenden zwei Szenarien einen Unterschied gibt. 1. Ich starte TIMER0, der OHNE Prescaler bis 800 zählt und dann einen Interrupt auslöst oder 2. Ich starte TIMER0 der mit Prescaler 8 bis 100 zählt und den Interrupt auslöst. Da der Mikrocontroller das TIMER-Register unabhängig von den sonstigen Aufgaben hochzählt, dürfte es doch keinen Unterschied geben, oder? Das einzige, was eine "Verzögerung" bringen könnte, wäre der interne Vergleich des aktuellen Zählerstands mit dem Compare-Register. Bei 1. müsste ich den 800 mal vergleichen, bei 2. nur 100 mal. Aber ich gehe davon aus, dass das auch intern passiert. (Ist nur ein Gefühl!) Weiß da jemand genaueres? Grüße PS: Das sind theorethische Überlegungen. Da steckt kein konkreter Code hinter.
Unterschiede schrieb: > Das einzige, was eine "Verzögerung" bringen könnte, wäre der interne > Vergleich des aktuellen Zählerstands mit dem Compare-Register. Bei 1. > müsste ich den 800 mal vergleichen, bei 2. nur 100 mal. Aber ich gehe > davon aus, dass das auch intern passiert. (Ist nur ein Gefühl!) Ist schon richtig. Da dieser Vergleich aber von Hardware nebenher gemacht wird, merkt dein Programm nichts davon.
> Da der Mikrocontroller das TIMER-Register unabhängig von den sonstigen > Aufgaben hochzählt, dürfte es doch keinen Unterschied geben, oder? Einen Unterschied macht es eigentlich nur dann, wenn zusätzlich zum Interrupt bei Gleichheit auch noch der Interrupt beim Überlauf genutzt werden soll (natürlich vorausgetzt, der Zähler-Reset bei Gleichheit wird abgeschaltet). Für Dein Programm dürfte es darüber hinaus keinerlei Bedeutung haben, einzig denkbar wäre noch, dass es ggf. einen Unterschied im Stromverbrauch macht.
Unterschiede schrieb: > ob es bei folgenden zwei Szenarien einen Unterschied gibt. > Ich starte TIMER0, der OHNE Prescaler bis 800 zählt und dann einen > Interrupt auslöst Wenn es ein Avr ist, ist der Unterschied, daß es mit Prescaler funktioniert und ohne nicht, weil Timer0 ein 8-Bit-Timer ist, der nur bis 255 zählen kann. Aber mit Timer1 würde es gehen. Da ist der Unterschied die Auflösung. Wenn du z.B. Zeiten messen willst, zählt er ohne Prescaler bei 1 MHz in µs-Schritten, 1, 2, 3... Mit Prescaler in 8µs-Schritten. 8, 16, 24... Denn der Zählwert muss mit 8 multipliziert werden, damit die korrekte Zeit ermittelt wird. Das spielt beim Eierkochen natürlich keine große Rolle. mfg.
Prescaler und Timer sind Hardware, kosten also 0 CPU-Zyklen. Den Prescaler wählt man so klein, daß der Timer bei dem gewünschten Zeitintervall noch nicht überläuft. Peter
Was die Hardware so alles nebenbei machen kann... ;-) Meine Frage hat sich damit dann ja geklärt. Danke an alle!
Gibt's da eventuell Unterschiede hinsichtlich der Leistungsaufnahme?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.