Hallo,
ich will gern mit Meag8 per Software PWM 4 langsame (ca. 2-10Hz) Signale
ausgeben, die sollten Phasenverschoben ausgegeben werden, im Moment
laufen alle synchron, wie krieg ich die Phasenverschiebung rein???
Danke
indem du die PWM versetzt auf die einzelnen Kanäle
anwendest.
Dein PWM Counter läuft von 0 bis 127.
Ob du einen PWM Ausgang einschaltest, wenn der
PWMCounter im Bereich 0 bis 30 liegt, oder ob du
ihn einschaltest, wenn der PWMCounter im Bereich 30
bis 60 liegt, ändert nichts am Puls/Pause Verhältnis.
Aber die Phase verschiebt sich.
Ich wüsste nicht, was der Z-Pointer damit zu tun haben soll
(Übrigens hast du einen Fehler in deiner Z-Pointer Verwendung)
Der Z-Pointer wird doch nur dazu benutzt um aus dem Speicher
den korrekten Grenzwert zu holen. Das hat doch nichts damit
zu tun, ab welchem PWMCounter Wert der Ausgang auf 0 oder 1
geschaltet wird.
So wie es momentan läuft, schaltest du die Eingänge immer bei
einem Counter Wert von 0 auf 1. Das kann dann nicht mehr so
bleiben.
Der Aufwand ist gar nicht mal so gross.
Ich würde das so machen, dass ich den PWMCounter für
die Vergleiche manipuliere.
Im Grunde läuft es darauf hinaus, 4 PWMCounter zu haben, die
jeweils um 32 versetzt laufen. Dadurch hat jede PWM einen
anderen 0-Durchgang und damit eine andere Phase.
32 deshalb, weil der PWM Counter bis 127 läuft, also 128
Stufen hat. Dividiert durch 4 macht also einen Versatz von
32 für jeden Kanal.
1
WorkPWM:
2
mov r18, PWMCount
3
ldi temp, 0b11110000 ; 0 .. Led an, 1 .. Led aus
4
5
cp r18, pulse_width_1 ; Ist der Grenzwert f?s 1 erreicht
6
brlt OneOn
7
ori temp, 0x01
8
9
OneOn:
10
subi r18, -32 ; PWMCounter + 32
11
andi r18, 0x7F ; Modulo 128
12
cp r18, pulse_width_2 ; Ist der Grenzwert f?s 2 erreicht
13
brlt TwoOn
14
ori temp, 0x02
15
16
TwoOn:
17
subi r18, -32 ; PWMCounter + 64
18
andi r18, 0x7F ; Modulo 128
19
cp r18, pulse_width_3 ; Ist der Grenzwert f?s 3 erreicht
20
brlt ThreeOn
21
ori temp, 0x04
22
23
ThreeOn:
24
subi r18, -32 ; PWMCounter + 96
25
andi r18, 0x7F
26
cp r18, pulse_width_4 ; Ist der Grenzwert f?s 4 erreicht