Forum: Compiler & IDEs ATtiny45 Timer 0 Comp. Modus


von Michael N. (elektroniker)


Lesenswert?

Hallo,

folgenden Code:
1
ISR (SIG_OUTPUT_COMPARE0A) // Zeit für ganzes Protukoll
2
{
3
PORTB |= (1<<PB4) ;
4
}
5
6
7
TCCR0B = (1<<CS10); //setzt den Prescaler 1 --> keine Teilung
8
OCR0A = 200;      //setzt den Vergleichswert
9
TIMSK = 1<<OCIE0A;  //Compare-Int aktivieren
10
11
12
13
  while(1)
14
  {
15
      asm("nop");
16
      PORTB &= ~(1<<PB4); //reset
17
  }

Die ISR wird immer in gleichen Abständen aufgerufen.
Unabhängig vom Wert im Vergleichsregister.

Habe ich noch irgendwas vergessen?

von amateur (Gast)


Lesenswert?

Schon allein die Struktur ist mittelprächtig.

In der Hauptschleife wird ständig der Pin auf low gesetzt und in der 
Unterbrechung einmalig kurz auf high.
Da bekommt man ja selbst mit dem Oszi, Probleme beim Hingucken.

Eine Kontrolle eines total zerrissenen Programms auf Richtigkeit ist 
nicht möglich. So sehe ich z.B. nirgendwo, ob Du die Unterbrechungen 
überhaupt eingeschaltet hast.

Funktioniert "SIG_OUTPUT_COMPARE0A" überhaupt noch - soweit ich weiß 
heißen die jetzt anders.

von Michael N. (elektroniker)


Lesenswert?

Danke für die Antwort.
Habe meinen Fehler gefunden.

Der Zähler des Timers muss in der ISR zurückgesetzt werden.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Michael Neumann schrieb:
> Der Zähler des Timers muss in der ISR zurückgesetzt werden.

Dann solltest du dir mal ansehen, wie man den CTC-Modus einschaltet
(clear timer on compare match).

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
Noch kein Account? Hier anmelden.