Timer Probleme

Gast #4601579
Hallo,
ich habe einen Problem mit meinem Timer. Dieser dauer doppelt so lange 
wie der eigentlich sollte

1
...
2
// Timer 0
3
  TCCR0A = (1<<WGM01); // CTC Modus
4
  TCCR0B |= (1 << CS01); // prescaler 8
5
  OCR0A = 250-1;
6

7
  // Overflow Interrupt allow
8
  TIMSK |= (1 << OCIE0A);
9

10
  // Global Interrupts activate
11
  sei();
12

13
...
14

15
ISR (TIMER0_COMPA_vect){
16
  static unsigned int millisekunde = 0;
17
  static unsigned int sekunde = 0;
18
  
19
  millisekunde++;
20

21
  if(millisekunde == 1000){
22
    millisekunde = 0;
23
    sekunde++;
24
    PORTD ^= (1<<PD5);
25
    
26
    if(sekunde == 60){
27
      sekunde = 0;
28
    }
29
  }
30
}

Am Controller habe ich einen Quarz mit 8MHZ und die FUSES habe ich auf
L: 0x6C
H: 0x9F
E: 0xFF
gesetzt.

eigentlich sollte der Interrupt genau jede millisekunde ausgelöst 
werden, sodass PD5 im sekundentakt toggelt. Dieses dauert aber fast 2 
Sekunden (an PD5 ist eine LED angeschlossen).

8Mhz/4/prescaler = 250.000khz
-> 1 Takt = 0.004ms
OCR0A = 250 -> 250*0.004ms = 1ms
(Firma: matzetronics)
Hmm, wie kommst du bei 8Mhz Takt und einem 8er Prescaler auf eine 
Millisekunde ISR Rate?
1
// Timer 0
2
  TCCR0A = (1<<WGM01); // CTC Modus
3
  TCCR0B |= (1 << CS01); // prescaler 8
4
  OCR0A = 250-1;
Für mich kommt da eine Rate von
8.000.000 / 8 = 1.000.000 und dann durch 250
1.000.000 / 250 = 4000 Hz raus, das sind 0,25 ms.
Besser ist also ein Prescaler von 64 (Taktfrequenz des Timers sind dann 
125kHz) und ein OCR0A von 125-1.

Lukas H. schrieb:
> 8Mhz/4/prescaler = 250.000khz

Wo kommt die 4 her?
Gast
Lukas H. schrieb:
> 8Mhz/4/prescaler = 250.000khz
> -> 1 Takt = 0.004ms
> OCR0A = 250 -> 250*0.004ms = 1ms

8Mhz Quarz
CKDIV8 Fuse teilt durch 8 -> 1Mhz
Prescale = 8 -> 125000Hz
OCR0A: (1/125000) * 250 = 2ms !!!

Fehler: CKDIV8 teilt bei dir noch und der seltsame /4 Teiler in der 
Rechnung
Gast
mh, ich dachte, das stand so im Datenblatt. Es ist aber nur für eine 
external clock bei UART.
da ich dieses später benutzen möchte, hatte ich da schon einmal 
reingeguckt.
Aber dann passt ja doch alles.

Ich danke euch für eure Hilfe

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.