Software PWM

Gast #2277076
Lesenswert?

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
#2277161
Lesenswert?

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
Gast #2277232
Lesenswert?

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
Gast #2277827
Lesenswert?

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

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