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!
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
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? :-(
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...
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..
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.
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...
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...
So müsste es gehen: TCCR2 |= (1<<WGM20); TCCR2 |= (1<<COM21); TCCR2 |= (1<<CS22) | (1<<CS20);
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:
1 | TCCR2 = (1<<WGM20) | (1<<COM21) | (1<<CS22) | (1<<CS20); |
sind es nur zwei CPU-Befehle.
>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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.