www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Timer springt nach sei sofort in die Timerschleife


Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Hab da ein kleines Problem. Naja, Problem kann man nicht sagen, mich 
würde eher interessieren, was ich falsch mache.

Ich initialisiere meinen Timer so:

ldi     temp1, (1 << wgm21) | (1 << cs21)
out    tccr2,temp1
ldi      temp1, 150
out    ocr2,temp1
ldi   temp1, (1 << ocie2)
out    timsk,temp1

Wenn das AVR Studio zum dritten Befehl springt (ldi temp1,150), dann 
wird im TIFR schon das OCF2 Flag gesetzt. Das hat dann zufolge, daß nach 
dem SEI, das Programm sofort in die Timerschleife springt. Ist das 
normal oder mache ich da irgendeinen Fehler?

Gruß Andi

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Erst ocr setzen, dann Timer einschalten. Denn sonst ist 0 ja schon ein 
Compare-Ereignis.

Alternativ vor Freigabe des Interrupts die Flags in tifr löschen (1 
reinschreiben, nicht 0).

...

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du hast einen Denkfehler.

Wenn du den Timer startest (durch setzen von CS21), welchen
Wert hat dann das OCR2 Register zu diesem Zeitpunkt?

Genau. Es ist 0

Wie gross ist der Timerwert?

Richtig. Der ist ebenfalls 0

Und was sagt das WGM21 Bit?
Es sagt, wenn Timerwert und OCR Wert übereinstimmen,
löse eine Aktion aus. Und die Aktion ist das Setzen
des OCF2 Flags.

Das OCF2 Flag wird immer gesetzt,
um anzuzeigen, dass die Bedingung eingetroffen ist. Ob
es dann tatsächlich zu einem Interrupt kommt, hängt davon
ab, ob die Interrupt Freigaben richtig stehen.

Moral: erst den Timer vollständig konfigurieren und
dann erst los laufen lassen. Ein Timer läuft, sobald ein
Vorteiler gesetzt ist.

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank für Eure Antworten, jetzt ist es mir klar.

Gruß Andi

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.