Forum: Mikrocontroller und Digitale Elektronik Problem mit PWM-Routine


von Bernhard Mayer (Gast)


Lesenswert?

Hallo!

Ich hab ein kleines Problem mit einer PWM-Routine die über den
Timer-Overflow-Interrupt gesteuert wird. Der code sieht so aus:

; timer overflow interrupt
tint:  clc
  cp t4, p0
  brlo ipwm1
  cbi PORTD, MOTAPWM
ipwm1:  clc
  cp t4, p1
  brlo ipwm2
  cbi PORTD, MOTBPWM
ipwm2:  inc t4
  brcc iende
  sbi PORTD, MOTAPWM
  sbi PORTD, MOTBPWM
  clc
iende:  reti

t4 ist der schleifenzähler, er wird sonst nirgends in dem programm
verwendet. in p0 und p1 steht der jeweilige wert für die Pulsbreite
(0<x<255). MOTAPWM und MOTBPWM stehen für den jeweiligen Pin.

Das problem ist jetzt, dass es nicht funktioniert, wenn p0 kleiner als
p1 ist und wenn p1 0 oder 255 ist. und ich hab jetzt keinen blassen
schimmer, wo ich da suchen könnte. kann mir da jemand helfen?

Danke
Bernhard

von Bernhard Mayer (Gast)


Lesenswert?

sorry wenn ich euch auf den geist gehe, aber hat keiner ne ahnung was da
falsch laufen könnte?

Danke
Bernhard

von Dennis Brücke (Gast)


Lesenswert?

Hallo Bernhard,

schau doch mal in der Suche, da habe ich vor 2-3 Wochen das gleiche
Problem gehabt, mit Software PWM... dort ist ein Funktionsfähiger Code
mit erklärung...

Gruß Dennis

von Uwe (Gast)


Lesenswert?

Hi!
Kann nicht gehen, weil
<ipwm2:  inc t4> kein C-Flag beeinflusst
<brcc iende> "brne iende" sollte besser gehen.
Übrigens der ganze Ablauf ist etwas ungünstig, besser wäre eventuell:

; timer overflow interrupt
tint: ;S-Reg sichern!
  inc t4
  brne ipwm1
  sbi PORTD, MOTAPWM
  sbi PORTD, MOTBPWM
  rjmp iende
ipwm1:  cp t4, p0
  brlo ipwm2
  cbi PORTD, MOTAPWM
  cp t4, p1
  brlo iende
  cbi PORTD, MOTBPWM
iende: ;S-Reg auf alten Wert!
  reti

S-Register sichern/zurückschreiben nicht vergessen!!

viel Erfolg, Uwe

von Bernhard Mayer (Gast)


Lesenswert?

Danke!

Habs jetzt mit der Methode vom Dennis probiert und das hat super
hingehaun. und so werd ichs jetzt lassen.
das mit dem SREG hab i no ned gewusst, ist jetzt aber auch drin.

Bernhard

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.