Hallo, ich habe mir das Tutorial über PWM angeschaut und wollte mich jetzt mal erkundigen, wie nun die Berechnung für die PWM-Frequenz zustande kommt. Diese ist mir irgendwie noch nicht ganz klar. Also wenn ich das richtig verstanden habe, haben wir einen Timer mit 8 Bit Auflösung und nem Prescaler von 256. Daraus ergibt sich mir dann bei 4 Mhz Systemtakt ein Timer, der mit einer Frequenz von ca. 15 kHz (4.000.000 / 256) raufzählt. Der müsste dann mit einer Frequenz von 61 Hz (15.000 Hz / 256 Schritte) einen ISR auslöst. In dem ISR wiederum gibt es einen Counter der auch 255 Schritte hat. Also kann ich für die Frequenz, die dieser Counter hat, der gelöscht wird wenn er bei 255 ankommt. Also wieder 61 Hz / 256 = 0,23 Hz. Bei der Rechnung, wo ist da mein Fehler? Ich komm nie auf eine PWM-Frequenz von 127 Hz. Gruß S.T
Nein der Teiler ist bei 1
1 | ldi temp, 1<<CS00 ; CS00 setzen: Teiler 1 |
2 | out TCCR0, temp |
Damit gilt die Rechnung aus dem Tut: ( 4000000 / 256 ) / 127 = 123Hz Auflösung ist hier aber eben nur 7bit, nicht 8bit
1 | timer0_overflow: ; Timer 0 Overflow Handler |
2 | inc PWMCount ; den PWM Zähler von 0 bis |
3 | cpi PWMCount, 128 ; 127 zählen lassen |
4 | brne WorkPWM |
5 | clr PWMCount |
Hey, also gar kein Prescader? Weil ich verwirrt bin. Im Tutorial stand der ISR soll beim 256 fachem der PWM-Frequenz ausgelöst werden, ich bin verwirrt.
Matthias Keller schrieb: > Damit gilt die Rechnung aus dem Tut: > ( 4000000 / 256 ) Und diese 4 Mhz durch 256 irritieren mich dann auch, wenn der Teiler den 1 ist.
Matthias Keller schrieb: > Nein der Teiler ist bei 1 > ldi temp, 1<<CS00 ; CS00 setzen: Teiler 1 > out TCCR0, temp > > Damit gilt die Rechnung aus dem Tut: > ( 4000000 / 256 ) / 127 = 123Hz > > Auflösung ist hier aber eben nur 7bit, nicht 8bit > timer0_overflow: ; Timer 0 Overflow Handler > inc PWMCount ; den PWM Zähler von 0 bis > cpi PWMCount, 128 ; 127 zählen lassen > brne WorkPWM > clr PWMCount Und im Tutorial heißt es, ich zitiere: In der ISR wird ein weiterer Zähler betrieben (PWMCounter), der ständig von 0 bis 255 zählt. IN diesem Stück Code zählt er aber nur bis 128. Das widerspricht sich doch oO
> Und im Tutorial heißt es, ich zitiere: > In der ISR wird ein weiterer Zähler betrieben (PWMCounter), der ständig > von 0 bis 255 zählt. > In diesem Stück Code zählt er aber nur bis 128. Das widerspricht sich > doch oO Also auch wenn jetzt keiner was dazu sagt. Dann bitte den Text im Wiki korrigieren, der Zähler zählt bis 128 und nicht bis 255 (in der ISR).
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.