www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik PWM in Assembler


Autor: Marc (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

versuche gerade verzweifelt ein PWM-Signal aus meinem 8515 zu bekommen. 
Aber ich scheitere kläglich. Aus dem Datenblatt kann ich nicht wirklich 
herauslesen wie das funktioniert (wahrscheinlich ist mein Englisch zu 
mies), im Internet habe ich noch kein Beispielprogramm gefunden.
Zumindest nicht in Assembler.
Kann mir jemand mit einem (dokumentierten) Beispiel helfen?

Autor: Jörg (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Marc,
ich hab grad beim Stöbern hier im Board dashier entdeckt:
http://www.mino-elektronik.de/soft-pwm/pwm_software.htm

CU

Autor: Marc (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für den Tip, aber ich suche keine Softwarelösung.
Beim 8515 kann man ja den Timer für sowas verwenden, ich weiss nur nicht 
welche Register ich mit welchen Werten laden muss damit das 
funktioniert.

Autor: Denis (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo, im Anhang etwas Spagetticode ;)
es ist eine softanlauf für einen dc motor,
durchforsten und vieleicht hilft es ja, geschrieben für einen 4433



PWMHA:

  ;PWM Routine zum Anfahren des Motors (enable Pin)
        ;enable pin ist noch aus

  LDI mp,$00    ;lade 0 in mp
  OUT OCR1H,mp  ;mp in register PWM Value HighByte
  LDI mp,$FF    ;lade 255 in mp
  OUT OCR1L,mp  ;mp in register PWM Value LowByte

  ldi  mp, $01    ; Timer Start CK (höchste frequenz)
  out TCCR1B, mp    ;

  ldi zaehler,$FF  ;lade 255 in Zähler (zur sicherheit)
  ldi zaehler2,$08  ;lade 16 in Zähler( zeitdauerregulierung)achtung 
unten nochmal!
  ldi mp,0b11000001  ;Einschalten des PWM Modus(non invert, 8 bit)
  out TCCR1A,mp    ;mp in register
  LDI Step,$96    ;fülle step mit 150

PWMLoopHA:
  DEC   Zaehler       ;Verringere Zähler um eins
  BRNE PWMLoopHA  ; Springe zu Delay wenn Z = 0 (oder gehe weiter wenn 
überlauf!
  DEC  Zaehler2  ;Verringere Zähler um eins
  BRNE  PWMLoopHA  ;Springe nach PWMLoop wenn Z = 0
  DEC     Step     ;verringere step um 1
  OUT OCR1L,Step    ;schreibe step in OCR1AL Register
  BREQ PWMLoopOutHA    ;Springe zu Stepset wenn Z=1 also Überlauf
  ldi zaehler2,$08  ;lade den 2. Zähler,muss sein weil sonst von 0 auf 
255 wechselt
  SBIS Pind,2    ;springe wenn Verrauf schalter an ist
  RJMP PWMLoopHA           ;springe zu PWMLoop
  RJMP PWMAbbruchbeiEndsAUF

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Marc,
Schau mal im Datenblatt des 8515 auf Seite 40 nach. Da steht sehr genau 
welche regiester für welchen PWM-Modus gesetzt werden müssen. Hoffe das 
hilft dir weiter.

Gruß Matthias

Autor: Marc (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Leider klappt das bei mir irgendwie alles nicht.
Vielleicht weiss jemand was an meinem Programm falsch ist.
Ich messe an PD5 (OC1A), aber da is nix...

.include"8515def.inc"
.def  temp  =r20

    ldi  temp,0x00
    out  OCR1AH,temp
    ldi  temp,0xFF
    out  OCR1AL,temp
    ldi  temp,0x81
    out  TCCR1A,temp
    ldi  temp,0x01
    out  TCCR1B,temp

loop:    rjmp   loop

Autor: Denis (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hast du den port auch als ausgang definiert?

mittels ddr   register?

Autor: Marc (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
...inzwischen ja, jetzt funktioniert das auch, aber das Signal ist nicht 
wirklich sauber, der Highpegel gleicht der Silhouette einer 
Gebirgskette. Wofür ist eigentlich der OC1B (Pin 32), da kommt nix raus?

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Signal sollte auf jeden Fall sauber sein, wenn die Betriebsspannung 
des Prozessors ok ist.

OC1B ist für den zweiten PWM-Ausgang (Register OCR1B).

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.