Forum: Mikrocontroller und Digitale Elektronik ATmega 328p PWM


von Jonas Wühr (Gast)


Angehängte Dateien:

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

von M. K. (sylaina)


Lesenswert?

Jonas Wühr schrieb:
> Auf dem PD6 (OCR0A) haut es hin, auf dem PD5 (OCR0B)
> nicht.

Was haut hin und was nicht? Anderes gefragt: Was erwartest du wann? 
Reduziere dein Programm mal ausschließlich auf die PWM und schaue ob es 
wirklich nicht klappt.

von Jonas (Gast)


Lesenswert?

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

von Martin S. (led_martin)


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

von M. K. (sylaina)


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. ;)

von Jonas Wühr (Gast)


Lesenswert?

Oh mann, danke für die schnelle Hilfe.

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.