Forum: Mikrocontroller und Digitale Elektronik Verständnisfrage: Warten mit Timer


von 10Hz (Gast)


Angehängte Dateien:

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

von Thomas E. (thomase)


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.

von Purzel (Gast)


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 ...)

von Fritz (Gast)


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.

von Amateur (Gast)


Lesenswert?

Es ist möglich, dass Dir die Sicherung "Div8" einen Streich spielt.

Ein schönes Beispiel dafür, dass der Spruch:
"Kopieren geht über Studieren"
doch den einen oder anderen Haken hat.

von Purzel (Gast)


Lesenswert?

Amateur schrieb:
> Es ist möglich, dass Dir die Sicherung "Div8" einen Streich spielt.
>
> Ein schönes Beispiel dafür, dass der Spruch:
> "Kopieren geht über Studieren"
> doch den einen oder anderen Haken hat.

Wie wahr, wie wahr mit dem "Div8" am Mega32.

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.