Atmega32 und Timer2

Gast #943217
Hallo!
Ich nutze die Timer 0 und 1 bereits und möchte Timer 2 gerne benutzen um 
Zeit zu messen. Um sicher zu gehen, dass bereits eine bestimmte Zeit 
(0.5 sekunden) verstrichen ist, habe ich eine Schleife eingefügt. 
Irgendwie funktioniert das nicht so wies soll. Systemtakt ist 4Mhz. Ich 
starte den Timer also mit dem höchsten Prescaler (1024) und erhalte 
4khz. Außerdem möchte ich einen Interrupt auslösen, sobald der Timer 
überläuft.

TCCR2 |= (1<< CS22) | (0<<CS21) | (1 << CS20);
TIMSK |= (1<<TOIE2);

Dies sollte 16 mal in der Sekunde geschehen. Den Interrupt fange ich wie 
folgt ab:

ISR(TIMER2_OVF_vect)
{
  systemtime++;
}

Systemtime ist halt ein Int.

Ich starte also den Timer, tue irgendwas, dann setze ich einen zweiten 
Integer starttimer=systemtime und messe. Ich will sichergehen, dass 
mindestens eine halbe Sekunde vergangen ist und tue dies hier:

  while((systemtime-starttime)<8)
    {
                            tuwas
                  }

Leider wartet der Mega keine halb Sekunde. Ich würde fast behaupten, er 
wartet gar nicht. Wird mir da etwas wegoptimiert oder habe ich mit 
Timer/Interrupt etwas falsch gemacht? Ich würde mich freuen, wenn ihr 
mir (mal wieder) helfen könntet.
Gast
So, ich lasse mir Systemtime gerade über ein Display ausgeben. Die 
Variable erhöht sich jede Sekunde um etwa 256 und nicht um 16. Ich will 
meinen, ich habe den Timer falsch initialisiert?
Grüße!
Gast
Hi,

> Ich starte den Timer also mit dem höchsten Prescaler (1024)
> und erhalte 4khz. Außerdem möchte ich einen Interrupt auslösen,
> sobald der Timer überläuft.
>     TCCR2 |= (1<< CS22) | (0<<CS21) | (1 << CS20);

1. Dein Code widerspricht Deinem Text: "(1<< CS22) | (1 << CS20)" 
entspricht einem Vorteiler von 128.
Teiler von 1024:
       TCCR2 |= (1<< CS22) | (1<<CS21) | (1 << CS20);

2. Bei dem von Dir laut Beschreibung angestrebten Teiler von 1024 dauert 
ein TimerCounter-Takt 0.256 ms, also f ~ 3,9 kHz.


Gruß

  risu

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 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.