Problem mit PWM-Routine

Gast #130064
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
Gast #130066
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
Gast #130067
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
Gast #130068
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 21 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.