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
sorry wenn ich euch auf den geist gehe, aber hat keiner ne ahnung was da falsch laufen könnte? Danke Bernhard
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.