Klar ist das schon vielZitat von RCO
nur gibt es ja keinen Standartwert für die PWM-Frequenz und viel ist relativ. Also hab ich da schon ein bisschen rumgespielt...
"(255-217=38 ): 1000000/38 = 26315,78 Hz"
passt nicht ganz 256-217=39 -> 1000000 / 39 = 25641 Hz (Interrupt) und => 25641 / 2 = 12820,5 Hz (Signal/Rechteck).
Allerdings darfst du nicht die Interruptfrequenz mit der Signalfrequenz verwechseln! Interrupts pro Sekunde != Signalfrequenz.
Hatte ich schon mal im Zusammenhang mit Franks Rnavr-Programm zum Timer berechnen.
Soll heißen, es wird zwar z.B. 50mal pro Sekunde ein Interrupt ausgelöst, allerdings brauchst du für eine Signalperiode 2 Interrupts (Rechteck). Du musst ja einmal einschalten und einmal ausschalten. Also ist für Rechteck die Signalfrequenz die Interruptfrequenz / 2.
Jetzt kommt noch dazu das bei jedem Interrupt einmal hochgezählt wird, von 0 - 255 und wieder von Vorne. Damit erreiche ich die unterschiedliche Pulsbreite für die PWM.
pwmr und pwml ist das Maß für die Pulsbreite. Bei Zählerstand 0 wird eingeschaltet bei Zählerstand pwml o. pwmr wird ausgeschaltet. Soweit klar?
Also ist eine Periode des PWM-Signals immer 256 Interrupts lang, also ist die PWM-Frequenz = Interruptfrequenz / 256 = 25641Hz / 256 = ca. 100Hz
Oh Mann wenn da jetzt irgendwo ein Fehler drinn ist, ist mir der Spot sicherAber ich bin auch AVR-Anfänger...
EDIT: Für 1KHz PWM ist die Einstellung Timer0 übrigens Prescaler = 1 und Timervorgabe = 225...
Gruß, Sonic
Lesezeichen