Basti schrieb:
> Zurück zur Ausgangsfrage:
> Weiß jemand, ob es schon einen fertigen (!) Algorithmus hierfür gibt,
> bei dem man nur noch die Frequenzen eingeben muss?
Ja, der Algorithmus nennt sich DDS
http://de.wikipedia.org/wiki/Direct_Digital_Synthesis wie schon oben
erwähnt wurde. In Microcomputern kannst du den so implementieren:
1 | x:=0
|
2 | WIEDERHOLE
|
3 | x:=(x+f) MODULO Tabellenlänge
|
4 | GibaufPWMaus(tabelle[x])
|
5 | BIS Endbedingung
|
Wobei f proportional zu Deiner gewünschten Frequenz ist, und
Tabellenlänge die Länge Deiner Tabelle ist. Wenn Du Deine Tabelle mit
256 Einträgen machst, dann wird die Modulodivision automatisch vom
Controller als Inteberüberlauf gemacht und Du sparst Dir Arbeit. In der
Tabelle wird Deine gewünschte Wellenform abgespeichert. Alternativ zur
Tabelle kannst Du Deinen Dreieck allerdings auch berechnen,
beispielsweise mit Hilfe der Betragsfunktion.
Als Unterbrechungsdienstroutine wird das noch eleganter:
1 | Hauptprogramm:
|
2 | x:=0
|
3 |
|
4 | Unterbrechungsdienstroutine:
|
5 | x:=(x+f) MODULO Tabellenlänge
|
6 | GibaufPWMaus(tabelle[x])
|
Und Du kannst im Hauptprogramm auch noch andere Dinge tun.