ATmega 328p PWM

Gast #4039103
Lesenswert?

Hi,
ich habe folgendes Problem. Ich will den timer0 des atmega328 als pwm 
initialisieren. Auf dem PD6 (OCR0A) haut es hin, auf dem PD5 (OCR0B) 
nicht.
Ich finde leider nicht heraus, was ich vergessen habe.
Vielen Dank,
Jonas
Angehängte Dateien:
#4039134
Lesenswert?

Mit:

OCR0A=255;
OCR0B=255;

wirst Du von der PWM nichts sehen, damit ist PD6 dauernd '1' und PD5 
dauernd '0', da Du ja invertierte PWM-Ausgabe gewählt hast. Setzt da mal 
128 rein, dann sollte man eine PWM sehen. Bei einem 8 Bit Zaehler gibt 
es, für eine PWM, eigentlich 257 Möglichkeiten für die Impulslänge, mit 
einem 8 Bit Wert kann man aber nur 256 darstellen. Atmel hat das so 
gelöst, daß der Wert 0 einen Impuls von einem Timer-Taktzyklus Länge bei 
Zählerstand 0 ergibt, bei 255 werden keine Pegelwechsel ausgegeben.

Mit freundlichen Grüßen - Martin
#4039138
Lesenswert?

Jonas schrieb:
> Hab ich ja mittlerweile auch schon reduziert. Ich bekomme am PD5 immer
> noch kein PWM -Signal, er ist einfach auf low.

Ja, genau das macht dein Code.

Du setzt COM0B1 und COM0B0 auf 1, das heißt bei erreichen des Zählwertes 
(Timerzählregister) von OCR0B soll PD5 auf 1 gesetzt werden, bei 
Erreichen von 0 des Zählwertes wird PD5 auf 0 gesetzt. Dein Problem: 
Timer 0 kann ja nur bis 254 zählen und du hast OCR0B auf 255 gesetzt. Er 
kommt also nie in Verlegenheit PD5 auf 1 zu setzen. ;)

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