Forum: Mikrocontroller und Digitale Elektronik mehrere Timer, kollidieren ??


von Hans-Peter (Gast)


Lesenswert?

Hallo,

ich betreibe einen ATMega8 mit einem 3,6468 MHz Quarz.
Einen Timer teile ich durch 256 vor. Mit passenem Reloadwert kommt dann
ein Überlauf, passend für eine Stoppuhr, von 0,01sec raus.
Parallel zu dieser laufenden "Stoppuhr" möchte ich ein immer
konstantes PWM-Signal ausgeben.
Die Routinen dür das PWM-Signal dürfen natürlich den Timer für die
Stoppuhr nicht beeinflussen.

Auf was muss ich achten ??
Können sich die Interrupts in die Quere kommen ??

Lieben Dank an euch !!
HPK

von Anton W. (antonwert)


Lesenswert?

Also falls der PWM-Timer Interrupt-Code benötigt "können" sie sich
schon in die Quere kommen, aber bei drei Komma irgendwas Megaherz
hast du ca. 1 Million Befehle pro Sekunde, wenn die Codes in den
Interrupts entsprechend schlank sind --> kein Problem!

von peter dannegger (Gast)


Lesenswert?

Der Mega8 hat doch 3 Timer, da kannst Du ruhig den T1 für die PWMs
reservieren. Und mit T0 oder T2 machst Du dann Deine Stopuhr.


Genau genommen hat man sogar 5 Timer, wenn man die UART und den ADC
nicht braucht (Baudrategenerator, ADC-Prescaler).


Peter

von Hannes L. (hannes)


Lesenswert?

> Genau genommen hat man sogar 5 Timer, wenn man die UART und den ADC
> nicht braucht (Baudrategenerator, ADC-Prescaler).

Danke, wieder was gelernt... ;-)

...

von Hans-Peter (Gast)


Lesenswert?

Vielen Dank Peter,

wie ist das denn, wenn Timer0 zeitgleich mit Timer1 seinen Interrupt
auslöst? Kann das passieren ??

HPK

von Hannes L. (hannes)


Lesenswert?

> wie ist das denn, wenn Timer0 zeitgleich mit Timer1 seinen Interrupt
> auslöst? Kann das passieren ??

Ja, das kann passieren.

Man kann die Fehler aber kompensieren.

In der Timer0-ISR kann man den Reload auf den aktuellen Timerstand
addieren, dann ist es kein Problem, wenn die ISR etwas verzögert
aufgerufen wird.

Den Timer1 lässt man möglichst frei durchlaufen, dann kann man beide
Compare-Interrupts und den ICP-Interrupt nutzen.
In den Compare-ISRs liest man das Compare-Register (nicht den Timer
selbst!) ein, addiert das Intervall dazu und schreibt es zurück. Dann
entsteht kein Fehler, wenn die ISR etwas verspätet aufgerufen wird.

Die ISRs sind dabei möglichst kurz zu halten, aber das ist ja sowiso
eine Selbstverständlichkeit.

...

von Thomas Pototschnig (Gast)


Lesenswert?

Der Interrupt wird in bestimmten I/O-Registern zwischengespeichert und
wenn dein Interrupt fertig behandelt ist, wird der nächste ausgeführt.

Entweder du konfigurierst einen Timer gleich als PWM, oder du
aktivierst die Interrupts in der Interruptbehandlungsroutine - dann
kann dein Timer-Interrupt von einem zweiten Interrupt unterbrochen
werden. Das ist nicht ganz gefährlich, wenn die Interrupts sehr lange
dauern - dann kann sich ein Timer immer wieder selbst unterbrechen.
Wenn man sich aber daran hält, dass man in die Interruptroutinen eh
fast nichts steht, gibts auch keine Probleme.

von Hans-Peter (Gast)


Lesenswert?

Vielen Dank Leute !!
Es klappt !!
HPK

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.