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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.