[AtMega32] Timer Geschwindigkeit falsch

Gast #1660380
Lesenswert?
• ▲
▼
Hallo zusammen,

ich probiere gerade den Timer an meinem AtMega32 korrekt zu verwenden.
Ich habe einen Systemtakt von 16MHz. Entspricht das dem clkI/O, der für 
den Timertakt verwendet wird? Im Datenblatt finde ich dazu keine 
definitive Aussage...

Die wichtigen Code-Teile:
1
int main(void)
2
{  
3
  // Timer konfigurieren
4
  TCCR1A = (1<<WGM12); // CTC Modus
5
  TCCR1B |= (1<<CS11) | (1<<CS10); // Prescaler 64
6

7
  // ((16000000/64)/1000) = 250
8
  OCR1A = 250-1; // Aufruf alle 1ms
9

10
  // Compare Interrupt erlauben
11
  TIMSK |= (1<<OCIE1A);
12

13
  // Global Interrupts aktivieren
14
  sei();
15
    while(1)
16
    {
17
        char lcdBuffer[20];
18
        for (int i=0; i<20; i++)
19
            lcdBuffer[i] = ' ';
20
        sprintf(lcdBuffer, "Zeit: %02d.%03d", sekunde, millisekunden); 
21
        lcd_line(lcdBuffer);
22
    }
23
}
24

25
ISR (TIMER1_COMPA_vect)
26
{
27
  millisekunden++;
28
  if(millisekunden == 1000)
29
  {
30
    sekunde++;
31
    millisekunden = 0;
32
  }
33
}

Normalerweise sollten die Sekunden/Millisekunden Angaben nun korrekt 
hochlaufen, sie tun dies allerdings viel zu langsam. (geschätzt Faktor 
800 oder so)

Wo mache ich einen Fehler? Ich habe mich schon mehrmals durchs 
Datenblatt gewühlt, kann aber nix finden...

Viele Grüße,
Daniel
Gast #1660399
Lesenswert?
• ▲
▼
Daniel schrieb:
> du musst den Timer in der Interruptroutine neu laden..

Nein, das macht der Controller selbst ;)

spess53 schrieb:
>> TCCR1A = (1<<WGM12); // CTC Modus
>
> WGM12 befindet sich im Register TCCR1B

Genau daran lags, vielen Dank! Dämlicher Fehler, da hätt ich noch ewig 
dran gesucht.

Grrrr schrieb:
> Bitte kompilierbaren Code posten.

Werde ich demnächst machen.

Antwort schreiben

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