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
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.
Hab ich ja mittlerweile auch schon reduziert. Ich bekomme am PD5 immer noch kein PWM -Signal, er ist einfach auf low.
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
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. ;)
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.