Timer Counter zu schnell?

OP #2379631
Lesenswert?

Hi,

hab da mal eine Frage, habe folgendes in meinen µC geladen :
1
#define F_CPU 16000000      //Frequency = 16 MHz
2

3
#include <avr/io.h>
4
#include <util/delay.h>
5
#include <avr/interrupt.h>
6

7
//volatile uint8_t keystate = 0;        
8

9
int main(void)
10
{
11
  TCNT0 = 0x00;    // Timer counter mit 0 initialisieren
12
  OCR0 = 0x00;    // beim ersten overflow interrupt
13
  TIMSK |= (1<<OCIE0);    // Timer compare enabled
14
  DDRA = 0x00;        // Port A Input
15
  DDRB = 0xFF;        // Port B Output
16
  DDRC = 0xFF;        // Port C Output
17
  PORTA = 0xFF;        // Pullups an A an
18
  
19
  sei();
20
  
21
  TCCR0 = ((1<<WGM01) | (1<<COM00) | (1<<CS02)|(1<<CS00));    // Toggle Mode on , Prescaler 1024
22

23
  
24
    while(1)
25
    {
26
       
27
    }
28
  return 1;
29
}
30

31
ISR (TIMER0_COMP_vect)
32
{
33
  PORTC^=0X0F;  // Toggle Port C
34
}

meinen Berechnungen zufolge sollte nun alle 16.384 ms der Port toggeln 
(16000000/1024 , Ans/256 , 1/Ans;; durch 1024 wegen prescaler durch 256 
wegen den Steps bis zum timer counter overflow , kehrwert um von Hz auf 
s zu kommen ..)
Wie allerdings auf dem Screenshot von dem Scope zu sehen ist passiert 
das ganze allerdings alle 62 µs ,also fehlt mir der Faktor 256 .
Kann mir jemand sagen wo der Gedannkenfehler ist ???

Target MCU ist n Mega32 mit 16 MHz clock .

Vielen Dank schonmal
Angehängte Dateien:
Gast #2379659
Lesenswert?

Der Gedankenfehler ist die Zeile

>  OCR0 = 0x00;    // beim ersten overflow interrupt

Dort setzt du den tatsächlichen Vergleichswert.

Die Schlussfolgerung 8-Bit = Faktor 256 ist für den gewählten Modus 2 
CTC (WGM01 gesetzt) nicht richtig. Schau dir an, was dort als TOP 
genommen wird.
OP #2379676
Lesenswert?

Ahh ok , super dankeschön :)

Das erklärt natürlich einiges, bin davon ausgegangen das er pauschal bis 
256 zählt und ich zusätlich mit OCR0 die Abläufe wie oft er bis 256 
zählen soll festlegen kann .

Naja dann wohl doch der 16 bit timer :)


Danke nochmal für die schnelle Antwort,

grüße Stefan

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