Verständnisfrage: Warten mit Timer

Gast #3761567
Lesenswert?

Hallo Leute,

ich habe hier einen Code, der meiner Meinung nach eine LED mit 10Hz 
toggeln sollte.
Das ganze soll mit Timer2 am Mega32 passieren.

Auf
http://rn-wissen.de/wiki/index.php/Timer/Counter_%28Avr%29
habe ich eine gutes Beispiel gefunden, welches ich gern so verwenden 
würde.
(Der erste Code im Abschnitt CTC)


Nach dem ich den Code komplett kopiert habe, stellte ich schnell fest 
das er sich nich kompilieren lässt. Der Grund dafür war schnell 
gefunden: Die Initialisierungsbefehle standen in keiner Funktion und 
deshalb kamen 7 Fehler.

Das habe ich geändert und der Code lief.

Dann habe ich die die Vorlade-Werte an meinen interen 8Mhz RC Oszillator 
angepasst. Code überspielt und siehe da, die LED an Portd.6 blinkt. 
Allerdings nicht mit 10Hz, sondern mit 1,59Hz (Gemessen mit DSO).
Die Frage ist nun, warum? Ich habe zur Berechnung der Vorlade-Werte das 
Programm KAVRCalc verwenden.

Das sagt mir, dass ich als OCR Wert 0x4F und als TCNT0 Wert 0xB0 nehmen 
soll.
Hab das alles ins Programm eingetragen, aber ich komme nicht auf die 
10Hz.

Wo könnte mein Fehler sein?

Viele Grüße
Jan
Angehängte Dateien:
#3761594
Lesenswert?

10Hz schrieb:
> Auf
> http://rn-wissen.de/wiki/index.php/Timer/Counter_%28Avr%29
> habe ich eine gutes Beispiel gefunden, welches ich gern so verwenden
> würde.
> (Der erste Code im Abschnitt CTC)
Das ist Müll. Das macht im Resultat nichts anderes als ein 
delay_ms(XXX). Dazu braucht man keinen Timer.

Arbeite die Tutorials hier im Forum zu Timern durch. Da lernst du was 
Vernünftiges.

mfg.
Gast #3761599
Lesenswert?

10Hz schrieb:
> Das sagt mir, dass ich als OCR Wert 0x4F und als TCNT0 Wert 0xB0 nehmen

> Wo könnte mein Fehler sein?

In deinem Programm initialisierst du Timer2, setzt aber TCNT0 auf 0xB0. 
Müßte TCNT2 sein. Rest hab ich nicht überprüft. (Warum Voraldewert im 
CTC Modus ...)
Gast #3761608
Lesenswert?

Außerdem läuft hier nicht der CTC-Modus, was man erheblich leichter 
bemerken würde, wenn man nicht so:
1
TCCR2 = 0b00100001;  // Prescaler von 1 | CTC-Modus (siehe unten für Beschreibung)

sondern so:
1
TCCR2 = (1<<COM21) | (1<<CS20);

arbeitet. Das ist das, was du oben geschrieben aber sicher nicht 
beabsichtigt hast.

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