www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik 16 Bit Timer (beide Kanäle) - Interrupt


Autor: Christian Z. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Zusammen,

mit Hilfe der 2 Kanäle des 16 Bit Timers des ATMEGA644 möchte ich in 
bestimmten Zeitintervallen Interrupts auslösen. Dazu habe ich in beide 
OCR Register A und B jeweils einen anderen Vergleichswert geladen.
Der Interrupt des jeweiligen Kanals wird jeweils über OCIE1A/B 
aktiviert. Interrupts sind global natürlich aktiv.
Nun zu dem Problem: Interrupt für Kanal A fünktioniert aber wenn ich für 
den Kanal A die Interrupts deaktiviere und Kanal B aktiviere wird zwar 
ein Interrupt ausgelöst aber für den Vergleichswert der in OCR1A steht.

Hat irgendjemand eine Idee wo mein Fehler liegt? Danke im Voraus.

MfG Christian

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie stellst Du Dir das vor? Ich vermute mal, Du hast den Timer im 
CTC-Modus laufen. Dann wird er zurückgesetzt, wenn OCR1A erreicht ist. 
OCR1B wird dann nie erreicht. Auch wenn OCR1B kleiner ist als OCR1A, 
sind die Abstände zwischen den Interrupt-Ereignissen vermutlich nicht 
so, wie Du Dir das vorstellst, weil jeder Interrupt nur einmal pro 
Timerdurchlauf auftritt.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn Du 2 verschiedene Intervalle erreichen willst, mußt Du den Zähler 
frei durchlaufen lassen und in dem jeweiligen Interrupt die 
Intervalldauer zu OCR1A bzw. OCR1B addieren.


Peter

Autor: Christian Z. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Johannes

CTC Mode ist richtig. Also wenn ich jetzt noch mal im Datenblatt 
nachschaue und dich richtig verstanden habe wird der Timer stets bei 
erreichen von OCR1A zurückgesetzt. Dann ist es mir klar. Mein OCR1B Wert 
war nämlich größer und ich Esel habe gedacht OCIE1A aktiv & OCIE1B 
inaktiv -> reset bei OCR1A und OCIE1B aktiv & OCIE1A inaktiv -> reset 
bei OCR1B.

@Peter

So werde ich das machen.



Besten Dank

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aber denk dran: Der Timer muss dazu im Normal-Modus laufen (kein CTC und 
keine PWM)...

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.