www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Problem mit PWM beim Atmega8


Autor: Rdlpfrmpft (Gast)
Datum:
Angehängte Dateien:
  • PWM.txt (337 Bytes, 158 Downloads)

Bewertung
0 lesenswert
nicht lesenswert
Ich will über die zwei voneinander unabhängigen PWMs des Timer1 zwei
Servos ansteuern und blicke da irgendwie nicht so ganz durch.

Ich denke, am geschicktesten ist die "Phase and Frequency correct
PWM"

Da bei beiden PWMs die Zykluszeit gleich ist kann ich ja als Top- Wert
das ICR1 Register nehmen,oder?

Woher weiß er dann, wann er das OC1 bzw OC2 setten (beim raufzählen)
bzw resetten (beim runterzählen) soll?
Geschieht das über die Marken OCR1A bzw OCR1B?
Beim Anhang habe ich das so ausprobiert, jedoch hat der Timer dann
nicht rauf- und runtergezählt, sondern ist übers ICR1 hinaus bis $FFFF
und hat dann bei $0000 wieder angefangen.
Außerdem hat das OC1A bzw OC1B nicht umgeschaltet.

Ist das ein Fehler des AVR Studio oder habe ich irgendetwas falsch
gemacht???

Hoffentlich kann mir jemand helfen, da ich schon eine Weile
herumprobiere.

Danke,mfg Rdlpfrmpft

Autor: Aleksej (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Am geschicktesten soll doch Fast-PWM sein ;) ich verwende am meistens
die 14. Funktion von dem Timer. Das Problem könnte auch daran liegen,
dass du deine TCNTs nicht initialisiert hast, vermute ich. Und wenn es
nicht hilft, dann versuche noch mal so was:

...
ldi temp,$2e
out OCR1AL,temp
out OCR1AH,temp2
ldi temp,$59
out OCR1BL,temp
out OCR1BH,temp2
ldi temp,0b11110000
out TCCR1A,temp
ldi temp,0b00010011
out TCCR1B,temp
;!!!!!!!!!
ldi temp,$2e
out OCR1AL,temp
out OCR1AH,temp2
ldi temp,$59
out OCR1BL,temp
out OCR1BH,temp2
;!!!!!!!!!

Ich hab schon ähnliche Probleme bei dem 90s2313 mit soclhem Trick
gelöst...

Autor: Aleksej (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und noch eine Bemerkung - zuerst stellt man die OCR1AH und OCR1BH ein,
dann kommen die low bytes

Autor: Rdlpfrmpft (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke

nachdem ich es heute nochmal mit demselben programm probiert habe,
klappte auf einmal das umschalten der OC1A bzw OC1B bei einem compare
match von TCNT1 mit OCR1A bzw OCR1B,jedoch überging er den wert von
ICR1,wo er eigentlich bei einem compare match mit ICR1 nach unten
tählen sollte....

Brauch ich da spezielle einstellungen in den timer interrupt
registern??

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.