Problem mit Z-Pointer

#729525
Lesenswert?

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.
#729572
Lesenswert?

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.
#729631
Lesenswert?

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
27
        brlt    SetBits
28
        ori     temp, 0x08

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren