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! ;-)
Gast
#2408030
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!
Gast
#2408040
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.
Super danke! Der Tipp mit dem TCNT1 war goldrichtig.
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.