mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Problem mit Z-Pointer


Autor: Bohb (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Bohb (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kann ich das evtl. auch über die Adressierung mit dem Z-Pointer lösen?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Bohb (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also irgendwie häng ich da jetz, wär des großer Aufwand des schnell in 
den code reinzuschreiben, wie das funktionieren soll?

mfg Bohb

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hinweis: Stackpointer erst das SPH Register beschreiben, danach das SPL

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Martin wrote:
> Hinweis: Stackpointer erst das SPH Register beschreiben, danach das SPL
Nö, die Reihenfolge ist egal.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.
WorkPWM:
        mov     r18, PWMCount
        ldi     temp, 0b11110000      ; 0 .. Led an, 1 .. Led aus
 
        cp      r18, pulse_width_1       ; Ist der Grenzwert f?s 1 erreicht
        brlt    OneOn
        ori     temp, 0x01
 
OneOn:
        subi    r18, -32               ; PWMCounter + 32
        andi    r18, 0x7F              ; Modulo 128
        cp      r18, pulse_width_2       ; Ist der Grenzwert f?s 2 erreicht
        brlt    TwoOn
        ori     temp, 0x02
 
TwoOn:
        subi    r18, -32               ; PWMCounter + 64
        andi    r18, 0x7F              ; Modulo 128
        cp      r18, pulse_width_3       ; Ist der Grenzwert f?s 3 erreicht
        brlt    ThreeOn
        ori     temp, 0x04
 
ThreeOn:
        subi    r18, -32              ; PWMCounter + 96
        andi    r18, 0x7F
        cp      r18, pulse_width_4       ; Ist der Grenzwert f?s 4 erreicht
        brlt    SetBits
        ori     temp, 0x08


Autor: Bohb (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke, werd ich mal so versuchen

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.