Zitat Zitat von MOLE
Schade eigentlich. Denn erstens hab ich mich inzwischen auf Bascom eingeschossen, und Großteil vom restlichen Programm schon darin implementiert
Hallo MOLE!

1.) Lass dir nichts einreden. Alles was du mit C machen kannst, kannst du auch mit Bascom machen. Nur eben meist ein wenig komfortabler.

2.) Die Hardware PWM kannst du in der Frequenz nur über den Quarz, den Prescaler und die verwendeten Bits für PWM (8 | 9 | 10) einstellen. Dafür belastet PWM den Controller nicht und du kannst auch sehr hohe Frequenzen damit erzeugen.

3.) Wenn du mehr Einfluss auf die Frequenz das Tastverhältnis nehmen möchtest, dann kannst du die PWM selber programmieren. Das ist umständlicher und belastet den µController sehr. Für andere Aufgaben ist dann nicht mehr viel Spielraum.

Für Software-PWM gibt es mehrere Möglichkeiten.

Wenn du dich in der MainLoop um die PWM kümmerst, dann kann es sein, dass die Frequenz oder das Tastverhältnich nicht exakt eingehalten wird, da entweder Interrupts die MainLoop unterbrechen oder du im Programm mal kurz irgendwo warten musst.

Du kannst PWM aber auch in einem Timer-Interrupt durchführen lassen. Aber Vorsicht! Der Interrupt-Handler sollte nicht zu viel Zeit in Anspruch nehmen. Das ist kein Problem, wenn du nur einen oder zwei PWM-Kanäle brauchst. Es wird aber zu einem Problem, wenn du mehr willst.

Alle Varianten haben ihre Vor- und Nachteile. Deshalb ist es wichtig, zu wissen, was du überhaupt damit machen möchtest. Warum willst du überhaupt dynamisch Einfluss auf die Frequenz nehmen? Was bringt dir das? Normalerweise nimmt man die Frequenz, die für die Aufgabe die Richtige ist und kümmert sich nicht mehr darum.

Willst du hohe und genaue Frequenzen, dann nimm Hardware-PWM.

mfg
Gerold
:-)