16 Bit Timer Problem

OP #2408023
Lesenswert?

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 #2408040
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren