Timer und Vergleichswert

Gast #740850
Lesenswert?

Hallo
Ich habe einen Timer 0 (mega16) und möchte, das er nach 5 Flanken an T0 
Pin OC0 aktiviert. Macht er eigentlich auch - aber erst nach 6 Flanken. 
Warum nur?
1
int main()
2
{
3
  DDRB |= (1 << DDB3);  // PORT PB3   
4
  PORTB &= ~(1 << PB3);  // T0 aus
5

6
  OCR0 = 5;  // Vergleichswert einstellen
7
  TCCR0 |= (1 << COM00) | (1 << COM01);  // OC0 ein bei Vergleichwert
8
  TCCR0 |= (1 << CS00) | (1 << CS01) | (1 << CS02);  // External Clock an T0, steigende Flanke
9

10
  while (1);
11
  return 0;
12
}
Gast #740892
Lesenswert?

>Das sind halt 6 ...

Ja, aber der Counter steht ja schon auf 0:
0 - Takt - 1 - Takt - 2 - Takt - 3 - Takt - 4 - Takt - 5
Das sind 5 Takte bis 5 im Counter (=Vergleichswert) steht


>Weil das Compare-Flag erst beim jeweils folgenden Timertakt gesetzt wird
>(s. Datenblatt). Wenn es schon bei Übereinstimmung der Werte gesetzt
>würde, gäbe es bei OCR = 0 gewisse Probleme...

Das habe ich mir auch irgendwie gedacht, aber im Datenblatt nirgends 
gefunden. Kannst Du mir das aufzeigen? Ich lese nur "The Output Compare 
Registers contain a 8-bit value that is continuously compared with the 
counter value." Das klingt für mich nicht nach nächster Flanke...

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