Problem mit Z-Pointer

Gast #729513
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
Angehängte Dateien:
#729525
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
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
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

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.