Forum: Mikrocontroller und Digitale Elektronik Timer2 Atmega32


von Tobias (Gast)


Lesenswert?

Hi,

ich verzweifle hier mit meinem ATMega32 Timer :(

Fuses bzgl. Quarz sollten Passen (mach ich z. B. _delay_ms(500)  und 
messe das mit dem Oszi an einem Ausgang) stimmt alles.

Hier mein Code (nur die relevanten Auszüge - ich will via CTC alle eine 
Sekunde die Var "xx" inkrementieren):

1
#define F_CPU 16e6
2
3
//INCLUDEs
4
#include <avr/io.h>
5
...
6
#include <avr/interrupt.h>
7
8
volatile uint32_t xx = 0;
9
uint8_t yy = 0;
10
11
...
12
13
int main (void)
14
{  
15
  //Timer2
16
  TCCR2 = (1<<WGM01); // CTC Modus
17
  TCCR2 |= (1<<CS02) | (1<<CS00); // Prescaler 1024
18
  OCR2 = 625-1;
19
  TIMSK |= (1<<OCIE2); //Compare Interrupt erlauben
20
  sei(); //global Interrupts aktivieren
21
22
  //Definition ein und Ausgänge
23
  ....
24
  
25
  while(1)
26
  {
27
    //hier toggelt ein Pin zum Test und Messen mit dem Oszi, nur leider viel zu schnell 
28
  }
29
}
30
31
ISR (TIMER2_COMP_vect)
32
{
33
  if (++yy == 25) 
34
  {
35
    yy = 0;
36
    if (++xx > 86399) //irgendwann von vorne beginnen
37
      xx = 0;
38
  }
39
}

Ich bekomme keine Fehlermeldung, nur stimmt das Timing leider nicht.

Ich rechne so:
16MHz / 1024 (Prescaler) = 15625Hz
Ich lasse jetzt bis 624 (625-1) zählen.
15625Hz / 625 = 25Hz  >> sollte die ISR also 25mal in der Sekunde 
aufrufen.
Nun noch die Hilfsschleife, die nur jeden 25sten durchlauf meine Var 
"xx" inkrementiert (und bei erreichen eines max. Wertes wieder NULL 
setzt)

Oder habe ich einen Denkfehler??
DANKE

von Peter (Gast)


Lesenswert?

Ich hab da jetzt keine Ahnung von C, aber
ist Timer2 nicht ein 8 bit Timer?

von g457 (Gast)


Lesenswert?

Wenn man Hardwaremodule umzieht sollte man auch ins Datenplatt schauen

>   //Timer2
           ^
>   TCCR2 = (1<<WGM01); // CTC Modus
        ^          ^
>   TCCR2 |= (1<<CS02) | (1<<CS00); // Prescaler 1024
        ^          ^           ^                 ^^^^
>   OCR2 = 625-1;
       ^   ^^^
>   TIMSK |= (1<<OCIE2); //Compare Interrupt erlauben

HTH

von Tobias (Gast)


Lesenswert?

Danke - ich war mir sicher mit Timer2 :(
Banaler Fehler.

von Peter (Gast)


Lesenswert?

Das ist für mich nachvollziehbar.

Hab mal einen Quarz gehabt der nicht wollte, ums verrecken nicht.

Hab da die Kerkos statt 22pF mit 22nF eingesetzt.

Hab dann erst mal Pause gemacht, dann gings wieder :-)

von Thomas E. (thomase)


Lesenswert?

Peter schrieb:
> Das ist für mich nachvollziehbar.
>
> Hab mal einen Quarz gehabt der nicht wollte, ums verrecken nicht.
>
> Hab da die Kerkos statt 22pF mit 22nF eingesetzt.
>
> Hab dann erst mal Pause gemacht, dann gings wieder :-)

Interessant. Und wer wollte das jetzt wissen?

mfg.

von Peter (Gast)


Lesenswert?

Thomas Eckmann schrieb:
> Interessant. Und wer wollte das jetzt wissen?

Du anscheinend nicht.

von c-hater (Gast)


Lesenswert?

Tobias schrieb:

> Danke - ich war mir sicher mit Timer2 :(

Wie kann man sich sicher sein, wenn man offensichtlich niemals auch 
nur andeutungsweise das zutreffende Datenblatt (oder auch nur irgendein 
AVR8-Datenblatt) gelesen hat?

Das soll wohl ein Insider-Witz eines gelernten Copy&Paste-Programmierers 
sein?

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.