Hey! Folgende Aufgabe: Bei Antasten soll der Timer im CTC Modus anlaufen, bei erreichen des Wertes in OCR1A den ISR auslösen und dann was abschalten. Im nächsten Durchlauf soll er aber ja wieder bei 0 loslaufen. Ich habe es so versucht aber es kommen unterschiedliche Zeiten bei rum... ISR (TIMER1_COMPA_vect) { TCCR1B &= ~(1 << CS12); TCCR1B &= ~(1 << CS10); Zeit = 0; } int main() { sei(); OCR1A= 15000; if (...) { TCCR1B = (1 << CS12) | (1 << CS10); // Prescaler: 1/1024 while (Zeit) { PORTB|= (1<<PB1); } PORTB &= ~(1<<PB1); Zeit=1; } } Bitte helft mir! ;-)
Es fehlen wichtige Teile der Timer-Initialisierung u.a. das Enable und die Moduseinstellung. Wundert mich dass du irgendeinen Effekt hast.
Mal wieder etwas schnell abgeschickt, sry! Die folgenden Sachen sind drin: TCCR1B = (1 << WGM12); TIMSK |= (1 << OCIE1A); OCR1A = 15000; Wollte nicht zu viel Code reinpacken wegen der Übersichtlichkeit, aber im Anhang ist das ganze Ding zu finden. Danke schonmal für die Hilfe!
Zwei Auffälligkeiten: > Im nächsten Durchlauf soll er aber ja wieder bei 0 loslaufen. Vor dem Restart des Timers durch Anschalten des Taktes würde ich den Timerzähler TCNTx auf 0 setzen. > TCCR1B = (1 << CS12) | (1 << CS10); // Prescaler: 1/1024 Zerstört die Einstellung des Timermodus (TCCR1B = (1 << WGM12);) In die Schalterlogik, d.h. den eigentlichen Programmablauf habe ich mich nicht reingefuxt.
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.