Timerproblem bei PWM?

Gast #60985
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
#60988
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
Gast #60989
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
Gast #60991
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren