Hallo zusammen, ich sammele gerade erste Erfahrungen mit PWM - habe mir den Artikel "AVR PWM" und das Datenblatt zum ATtiny13 angeschaut... klappt auch soweit, aber habe wohl ein Verständnisproblem mit "Phasenkorrekter PWM": Ich möchte eine LED mit einer bestimmten Frequenz an- und ausschalten, wobei die High- und Low-Phase jeweils gleich lang sein soll, also phasenkorrekter PWM (nennt man so, oder?). Hier mein Progrämmchen: <c> #include <avr/io.h> int main(void) { // PB0 als Ausgang DDRB = (1<<PB0); // OC0A --> PIN PB0 OCR0A = 20; // PWM Modus konfigurieren // Phasenkorrekter PWM & Toogle bei Compare-Match TCCR0A = (1<<COM0A0) | (1<<WGM02) | (1<<WGM00); // T/C-Vorteiler = Clock / 1024 TCCR0B = (1<<CS02) | (1<<CS00); while(1) { } }</c> Ergebnis ist, dass die LED ständig angeschaltet ist, unabhängig vom Wert für OCR0A. Meine Erwartung für das Verhalten war: - Zähler zählt von 0 bis OCR0A - Bei Zähler = OCR0A wird LED umgeschaltet (an > aus bzw. aus > an) - Zähler zählt rückwärts von OCR0A bis 0 - dann wieder zu Schritt 1 --> desto größer OCR0A, desto länger ist die Low- und High-Phase (wobei beide exakt gleich lang sind) Was habe ich da falsch verstanden? Wo ist der Denk- bzw. Programmfehler? Danke!!
> TCCR0A = (1<<COM0A0) | (1<<WGM02) | (1<<WGM00);
WGM02 liegt nicht in TCCR0A.
Ah, danke :-) jetzt blinkt's so, wie ich mir das vorgestellt habe
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.