Forum: Mikrocontroller und Digitale Elektronik Frage zu "Soft-PWM" Artikel


von FlorianV (Gast)


Lesenswert?

Nabend,

Ich hab mich grade mal mit dem Soft-PWM Artikel befasst und hab da 
mal ne bescheidene Frage:
Bei Versuch1 und Versuch2 wird in der Interrupt-Routine ständig das 
Register OCR1A mit
1
 OCR1A += (uint16_t)T_PWM;
Aufaddiert. Warum?
Warum nicht einfach durchlaufen lassen? Verlängert sich dadurch nicht 
ständig die Periodendauer oder verstehe ich da was falsch?
Ich hoffe ihr könnt mir die Weisheit bringen :)
Gruss,
Flo

von Timmo H. (masterfx)


Lesenswert?

#define T_PWM (F_CPU/(F_PWM*PWM_STEPS)) // Systemtakte pro PWM-Takt

von Karl H. (kbuchegg)


Lesenswert?

FlorianV schrieb:

> Bei Versuch1 und Versuch2 wird in der Interrupt-Routine ständig das
> Register OCR1A mit
>
1
 OCR1A += (uint16_t)T_PWM;
> Aufaddiert. Warum?

Das ist ein verkappter CTC Modus, der benutzt wurde, weil im letzten 
Beispiel dann eben nicht mehr mit einem konstanten Increment gearbeitet 
wird, sondern dieses variabel gestaltet wird.

Letzten Endes geht es darum, die ISR alle x Taktzyklen aufrufen zu 
lassen, wobei x nicht von den Vorteilern des Timers bzw seiner Bitbreite 
abhängen soll.

> Warum nicht einfach durchlaufen lassen? Verlängert sich dadurch nicht
> ständig die Periodendauer oder verstehe ich da was falsch?

Es geht gar nicht im die Periodendauer des Timers. Es geht darum, mit 
dem Timer x Takte abzählen zu lassen und dann wieder in der ISR zu 
landen.

von FlorianV (Gast)


Lesenswert?

Hallo Peter,
Wiedermal ne top Antwort, danke dafür.

>Das ist ein verkappter CTC Modus,...

Dachte ich auch, das hatte mich verwirrt. Ist es aber nicht, CTC Mode 
ist nicht aktiv. Macht so aber auch mehr Sinn, habs jetzt kapiert :) So 
wird alle x couter-takte der Interrupt ausgelöst (bei mir ca. 300).
Aber bei T_PWM ~ 300 würde der OCR1A nach 218 Interrups ja überlaufen 
und wieder bei 0 anfangen oder addiert sich der Rest dann drauf?

Ist nur ne verständnis Frage, würde man ja am Ausgang kaum bemerken :) 
Ich werds mal aufbauen und mit dem Osziloskop nachmessen obs nicht doch 
einen Sprung in der Pulsdauer gibt...
Elektronik macht Spaß :D

Gruss,
Flo

von Falk B. (falk)


Lesenswert?

@  FlorianV (Gast)

>Aber bei T_PWM ~ 300 würde der OCR1A nach 218 Interrups ja überlaufen

Ja

>und wieder bei 0 anfangen

nein.

>oder addiert sich der Rest dann drauf?

Ja, ist ja ein Überlauf, die ist wie eine Modulo Operation.

MFG
Falk

von FlorianV (Gast)


Lesenswert?

Danke, dann würde bei höherer PWM-Frequenz ja auch ein 8-Bit Timer 
tun...

Gruss,
Flo

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.