Eine PWM ist doch im Grunde nichts anderes als
eine bestimmte Rechteckschwingung an einem Ausgang.
+--------+ +--------+
| | | |
| | | |
| | | |
----+ +--------+ +------
Entscheidend ist dabei das zeitliche Verhältnis von High-Pegel
zu Low-Pegel. Warum? Weil die dadurch übertragene Energie
proportional zur Fläche unter der Kurve ist. Sind die High-
Pegel jetzt aber schmal
+---+ +---+
| | | |
| | | |
| | | |
----+ +-------------+ +----------
so ist die Fläche und damit die übertragene Energie kleiner,
als wenn die High-Pegel breit sind.
+--------------+ +--------------+
| | | |
| | | |
| | | |
----+ +--+ +--
So weit klar?
Gut.
Nun, wie kann man sowas erzeugen?
Letztendlich läuft es doch immer darauf hinaus, dass der
Ausgabe-Pin eine bestimmte Zeit lang eingeschaltet ist
(der High-Puls) und dann eine bestimmte Zeit lang aus-
geschaltet wird (der Low-Puls). Das kann zb ein Timer
übernehmen, muss er aber nicht. Das kannst du auch selbst
machen. Du musst nur dafür sorgen, dass ein Pin in regelmässigen
Abständen High-Low toggelt und dass du das Verhältnis von
High zu Low Zeit einstellen kannst.
Sagen wir mal du gibst in einer Schleife immer wieder ein sich
wiederholendes Muster von 8 Werten (0 oder 1) auf einen Pin aus.
Sagen wir mal weiter, dass ein Durchlauf durch die Schleife genau
1 ms dauert.
Das Muster könnte zb sein:
0 0 0 0 0 0 0 0
das heist dann: der Ausgane-Pin ist ständig low. Oder in Zeiten
ausgedrückt: der Ausgabe-Pin ist 8ms low und überhaupt nie high.
Oder das Muster könnte sein
1 1 1 1 0 0 0 0
das heist dann: der Ausgabe-Pin ist 4 ms high und dann 4 ms low
(dann wiederholt sich das Spielchen, denn die Schleife läuft immer
wieder und immer wieder und gibt immer dieselbe Abfolge dieser
8 Werte aus).
Oder das Muster könnte sein:
1 1 1 1 1 1 0 0
das heist dann: der Ausgabe-Pin ist 6 ms high und 2 ms low.
Durch die Anzahl der 1-en die da hintereinander am selben Pin
ausgegeben werden, steuere ich das Verhältnis (zeitlich gesehen)
von High-Zeit zu Low-Zeit. Und genau das ist ja das Wesen einer
PWM.
Für eine Mehrkanal-PWM machst du jetzt das selbe Spielchen
an mehreren Output-Pins gleichzeitig. Anstatt also nur einen
Pin in der Schleife auf 0 oder 1 zu setzen, macht man das halt
zb mit einem kompletten Port an allen Pins.
Bei dir kommt jetzt natuerlich noch hinzu, dass du die
eigentlichen Output-Pins nicht am µC hast, sondern dass die
am Schieberegister abgegriffen werden. Aber das Prinzip
ist das gleiche: Du musst nur dafür sorgen, dass ein Schieberegister
Output Pin im richtigen High-Low Verhältnis umgeschaltet wird.
Du lädst also das Schieberegister ständig neu. Immer und immer
wieder und sorgst mit obiger Technik dafür, dass das Puls/Pausen
Verhältnis dem entspricht was du haben möchtest.
Wenn man das mal verstanden hat, dann ist das mit Schieberegistern
auch nicht schwer zu realisieren. Ich bin allerdings ein starker
Verfechter der 'zum Lernen so einfach wie möglich'-Technik. Daher
würde ich Dir mal empfehlen eine LED mal direkt am µC anzu-
schliessen und diese LED durch gezieltes 'Wackeln' am Pin in
der Helligkeit zu regeln. Wenn du das erst mal durchschaut hast,
dann sollte die Verkomplizierung durch das SR auch keine
Rolle mehr spielen.
Und genau das will ich ja: das ist eine