mikrocontroller.net

Forum: Compiler & IDEs AVR Timer2 - gibt es den?


Autor: Lars (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: OliverSo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Datenblatt gelesen? ...

Timer 2 ist beim Mega16 nur 8 bit breit, da braucht es keine A's und 
B's. Folglich heisst das dann TCCR2, usw.

Oliver

Autor: Lars (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Au, danke :-)

Autor: Lars (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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? :-(

Autor: Lars (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe mal mit einem Multimeter die Spannung am Ausgangspin (OC2 = D7) 
gemssen. Das sind immer konstant 23mV (Wechselspannung), egal welchen 
Prescaler/OCR Wert ich benutze...

Autor: Andreas Paulin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was ist mit dem DDR-Register? LED-Port auch auf 'AUSGANG' geschaltet?

PWM-Ports werden afaik nämlich nicht automatisch beim einschalten der 
PWM auf Ausgang geschaltet..

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Andreas Paulin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
aha... probier mal
DDRD |= 0x80; // D7 auf Ausgang

Autor: Lars (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lars wrote:

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

Ja:
 TCCR2 |= (1<<WGM20);
 TCCR2 |= (1<<COM21);
 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...

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So müsste es gehen:

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

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gast wrote:

> So müsste es gehen:

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.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.