AVR Timer2 - gibt es den?

Gast #677426
Lesenswert?

Hallo!
Versuche bei meinem ATMega16 den zweiten Timer in Betrieb zu nehmen. 
Leider meckert der Compiler über Wörter wie "TCCR2A" oder "OCR2A" (die 
Äquivalente dazu mit einer 1 gibt es alle).
Heißen die beim zweiten Timer anders? Oder brauchts dafür einen 
speziellen Header?

thx!
Gast #677470
Lesenswert?

Mh, ich würde Timer2 jetzt gerne benutzen um per PWM eine LED leuchten 
zu lassen. Dazu habe ich folgenden Code benutzt (quasi aus dem GCC 
Tutorial):

TCCR2 |= (1<<WGM10);
TCCR2 |= (1<<COM1A1);
TCCR2 = (1<<CS12) | (1<<CS10);
OCR2 = 0x10;

Leider tut sich garnix, die LED bleibt dunkel. Mach ich was falsch? :-(
#677501
Lesenswert?

Du solltest dir angewöhnen, wenn du Code an einen anderen
Timer anpasst, im Datenblatt deines Controllers zu überprüfen,
* ob der Timer das auch alles kann, was du willst
* ob die Bitnamen auch stimmen
* ob die Registernamen stimmen

Wenn du das machst, dann stellst du fest, dass zwar die
Registe rso heissen, dass du aber Bitnummern verwendest,
die mit denen im Datenblatt nichts zu tun haben.
Gast #677550
Lesenswert?

OK, nachdem ich ins Datenblatt geschaut habe bin ich zu folgendem Code 
gekommen, der nun eigentlich funktionieren sollte (Port D ist Ausgang):

TCCR2 |= (1<<WGM20);
TCCR2 |= (1<<COM21);
TCCR2 = (1<<CS22) | (1<<CS20);
OCR2 = 0x10;

Aber egal wie ich's einstelle: jetzt leuchtet die LED immer mit voller 
Helligkeit. Irgendwas hab ich wohl übersehen...
Moderator Persönliche Seite #677673
Lesenswert?

Lars wrote:

> Aber egal wie ich's einstelle: jetzt leuchtet die LED immer mit voller
> Helligkeit. Irgendwas hab ich wohl übersehen...

Ja:
1
 TCCR2 |= (1<<WGM20);
2
 TCCR2 |= (1<<COM21);
3
 TCCR2 = (1<<CS22) | (1<<CS20);

Preisfrage: Welchen Wert hat TCCR2 nach diesen drei Zeilen?

Vielleicht schreibst du ja alles doch gleich in eine einzige 
Zuweisung...
Gast #680065
Lesenswert?

>Ja, aber was zum Geier[tm] soll der Quatsch?  Das generiert 12
>CPU-Befehle.  Wenn man es so schreibt:

>TCCR2 = (1<<WGM20) | (1<<COM21) | (1<<CS22) | (1<<CS20);

>sind es nur zwei CPU-Befehle.

Ja, das stimmt schon!

Aber es sollte nur zeigen, wie es prinzipiell geht, damit Lars zu einem 
Ergebnis kommt.

MfG Tobi

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