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

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.