mikrocontroller.net

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


Autor: Hans-Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Anton Wert (antonwert)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: peter dannegger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Hannes Lux (hannes)
Datum:

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

Danke, wieder was gelernt... ;-)

...

Autor: Hans-Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank Peter,

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

HPK

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht 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.

...

Autor: Thomas Pototschnig (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Hans-Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank Leute !!
Es klappt !!
HPK

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.