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
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). ...
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.
Vielen Dank für Eure Antworten, jetzt ist es mir klar. Gruß Andi
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.