mega32 - TCNT0 zu schnell

Gast #2777480
hi,

hab eine MEGA32(L) mit 1.843200MHz laufen und möchte jede millisekunde 
einen overflow-int.
1
void InitTimer0 (void)
2
{
3
  TCCR0 = 0x02;            // prescale clock by 8 -> 1.8432MHz / 8
4
  TCNT0 = 0xFF - 230;
5
  OCR0  = 0xFF - 230 - 2;  // to prevent output-compare-int-flag
6
}
1
int i=0;
2
SIGNAL(SIG_OVERFLOW0)
3
{
4
  TCNT0 = 0xFF - 230;         // reload time for 1ms timetick
5
  if(TIFR & 0x02)             // overflow pending
6
    TIFR |= 0x02;
7

8
  if(i++>999)
9
  {
10
    LedToggle();              // led toggle jede sekunde
11
    i=0;
12
  }
13
}


... das ganze funktioniert auch soweit ganz gut, nur blinkt meine led um 
etwa 4x so schnell. mit dem scope kann ich die 1.8432MHz am XTAL gut 
messen ...


bin irgendwie ratlos?!


danke für jede konstruktive idee,
Neubi
>  TCNT0 = 0xFF - 230;         // reload time for 1ms timetick

Deine Taktfrequenz ist 1843200 Hz
Mit einem Vorteiler von 8, zählt der Timer in 1 Sekunden also bis 
230400. D.h. würdest du 230400 Timerinkrements zählen, wäre 1 Sekunde 
vergangen.

Da du Millisekunden willst, brauchst du 1 Tausendstel davon. Also 230.

D.h. du willst mit dem Timer jeweils 230 Zählvorgänge abzählen, ehe dir 
dann ein Interrupt mitteilt: 1 Tausendstel Sekunde vergangen.

Von daher ist deine Berechnung soweit ok (gut, über +-1 streite ich 
jetzt nicht rum).

Wenn also die effektive Zeit am Pin nicht stimmt, gibts in der ganze 
Rechnerei nur 2 Dinge, die nicht stimmen können:

* die 1843200Hz entsprechen nicht der Realität
* das hier
  TCCR0 = 0x02;
  ist kein Teilerfaktor 8

wenn diese beiden Punkte gegeben sind, dann muss sich daraus zwangsweise 
1 Sekunde an der LED ergeben. Denn eines können wir ausschliessen: Der 
Timer verzählt sich nicht.

Antwort schreiben

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