Phasenkorrekter PWM (ATtiny13)

Gast #3013200
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!!

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