Forum: Mikrocontroller und Digitale Elektronik Phasenkorrekter PWM (ATtiny13)


von Mike (Gast)


Lesenswert?

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!!

von holger (Gast)


Lesenswert?

> TCCR0A = (1<<COM0A0) | (1<<WGM02) | (1<<WGM00);

WGM02 liegt nicht in TCCR0A.

von Mike (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.