mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Timerproblem bei PWM?


Autor: Helmut Hofmann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
kann es sein, daß beim Programmieren der PWM (ATMega8) Probleme mit dem
Timing auftreten können?. Als Einzelanwendung läßt sich PWM
(Timer1,10bit,ohne Prescaler,8MHZ) problemlos aktivieren. Wenn PWM
jedoch in eine etwas umfangreichere Schleife zur Abfrage mehrerer
ADC-Ports zusammen mit einer Stoppuhr(Timer0)eingebaut
wird,funktioniert zwar die Stoppuhr, jedoch nicht mehr PWM. Erst wenn
viele Abfragen wieder gelöscht werden, die Stoppuhr jedoch belassen
wird,funktioniert der PWM wieder.
Kann mir jemand Tips geben??

mfg Helmut

Autor: Frank Linde (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn Du Deinen Quellcode zeigst, vielleicht. So ist das Fischen im
Trüben...

Gruß, Frank

Autor: Helmut Hofmann (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
hier ein Auszug des Quellcodes

mfg Helmut

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Timer:
  in temp,sreg      ; Statusregister sichern
  push temp
  ldi temp, 150      ; Timer 0 auf 150 einstellen
...
  out sreg,temp
  pop temp
  reti


Kein Wunder, das da nichts mehr geht.

Du lädst temp mit sreg, ohne es vorher zu sichern.
Dafür lädst Du am Ende sreg mit 150 und temp mit sreg.

Und dann noch ein "rjmp Hauptlcd" mitten ausm Interrupt ist ein ganz
böses Foul.


Peter

Autor: Helmut Hofmann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Peter,
wie sollte ich es denn deiner Meinung nach besser machen. Komisch ist,
daß genau mit diesem Timercode ein anederes Ladegerät seit 2 Jahren
einwandfrei funktioniert.

gruß Helmut

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"wie sollte ich es denn deiner Meinung nach besser machen."

Erstmal das Tutorial lesen, mindestens aber das hier:

http://www.mikrocontroller.net/tutorial/stack.htm

http://www.mikrocontroller.net/attachment.php/677/...


Peter

Autor: Helmut Hofmann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Peter,
vielen Dank für den Tipp. Ich habe das Programm Timer.asm hier aus dem
Forum (Codesammlung) verwendet und modifiziert. Vermutlich ist mir
dabei ein Fehler unterlaufen. Wenn ich alles richtig verstanden
habe, muß die Interruptroutine etwa so aussehen:

in temp, sreg
push temp
   .
   .
   .
pop temp
out sreg,temp

Wäre das so richtig, um das Statusregister zu sichern?


gruß Helmut

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Damit hast Du nur das sreg gesichert, das temp zerstörst Du aber immer
noch.

Kleiner Tip:
Ich nehme für Interrupts und das Mainprogramm verschiedene Register,
dann braucht man nur noch das sreg zu sichern und nichts weiter.


Peter

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.