Da man meist nur 1 oder 2 PWM-Kanäle hat , zeige ich hier mal wie man mittels Soft-PWM quasi jeden Pin oder alle als PWM nutzen kann.
PWM - was heißt das eigentlich ?
PulsWeitenModulation
Das heiß , in einem festgelegtem Takt , definiert man also die Weite des Pulses wie lang etwas an ist.
Sagen wir mal , der Takt ist 255ms lang.
Dann wird also immer von 0-255 gezählt.
Wenn denn dann die 255 erreicht sind , schalte ich einen festgelegten Pin AUS !
Jetzt stell ich z.B. meinen Pulsweitenbeginn auf 200.
Das bedeutet , wenn der Takt beim Zählen die 200 erreicht hat , schalte ich einen festgelegten Pin an.
Dieser bleibt solange an , bis der Takt zuende gezählt hat, und dann schaltet er den festgelegten Pin wieder aus.
Von 200 bis 255 ist nicht sehr viel , also wird der festgelegte Pin , in diesem Fall eine LED , nur sehr kurz aufleuchten .
Stelle ich aber meinen Pulsweitenbeginn auf 10 , dann bleibt die LED natürlich länger an bis der Takt die 255 erreicht hat.
Dazu mal der Code :
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
$regfile = "m8def.dat"
$crystal = 8000000
$hwstack = 40
$swstack = 40
$framesize = 40
config portc = output
dim Takt as byte
dim Puls_weiten_anfang as byte
dim Check as byte
Puls_weiten_anfang=255
do
for Takt = 0 to 255
if Takt=Puls_weiten_anfang then
portc=31
endif
waitus 10
next takt
portc=0
if Puls_weiten_anfang>1 and check=0 then
decr Puls_weiten_anfang
else
check=1
waitms 1
endif
if Puls_weiten_anfang>=1 and Puls_weiten_anfang<255 and check=1 then
incr Puls_weiten_anfang
else
check=0
waitms
endif
loop
end