Timer Zeitbasis für Atiny461

Gast #6326011
Lesenswert?

Guten Abend,
Ich möchte 1ms Timer Interrupt haben.
Leider klappt es nicht
1
OCR0A = (int16_t)((F_CPU / 64 * 10e-4 + 0.5));  // preload for 1ms
2
  TCCR0B |= (1<<CS01)|(1<<CS00);          // divide by 64
3
  TIMSK |= (1<<OCIE0A);                    // enable timer Compare A Interrupt
4

5

6

7
ISR(TIMER0_COMPA_vect)  //_evry 1ms Interrupt
8
{
9
  PORTA ^= (1<<OUT_RUNLED)  
10
}

Wenn ich das wackeln des Pins mit dem Oszi anschaue ist es irgendwie 
90ms.
Wie kann das sein?
Gast #6326071
Lesenswert?

kölsch schrieb:

> Ich möchte 1ms Timer Interrupt haben.
> Leider klappt es nicht

Ja, da mußt du halt mal das DB lesen. Dieser Timer ist ein recht 
spezieller. Er kann nämlich ein 8Bit-Timer oder auch ein 16Bit-Timer 
sein. Und er verhält sich in diesen beiden Fällen doch ziemlich 
verschieden.

Mit einer Raubkopie von Code für "normale" AVR8-Timer kommst du hier 
nicht weiter (und zwar weder mit Code für "normale" 8Bit-Timer noch mit 
welchem für "normale" 16Bit-Timer).
Gast #6326135
Lesenswert?

Nun ja, der Timer0 läuft eben vollständig durch, 8-bit, ergibt bei z.B. 
8 MHz eine Interruptzeit von rund 2 ms, unabhängig davon, was in OCR0A 
steht. Aber es werden keine 90 ms daraus, wie man es auch dreht und 
wendet - deshalb meine Frage nach dem kompletten Programm.

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