Hallo Ikarus

sorry dass ich nicht auf deine PM geantwortet habe, ich hatte sie gelesen und dachte ich antworte dir später, aber ich habe es dann voll vergessen und jetzt habe ich deinen tread entdeckt und da ist es mir wieder in den sinn gekommen

Ich habe kurz deinen Code überflogen und habe etwas entdeckt was auch bei mir zu problemen geführt hat... Ich versuche es mal zu erklären...

für die Servoposition verwendest du ja word variablen (servo(x)...) dein prozessor kann aber pro takt nur 8bit verarbeiten. dass heisst wenn der timer interrupt während den folgenden zeilen auftritt:

Servo(2) = Servo2buffer
Servo(3) = Servo3buffer

kann es sein das erst die ersten 8bit der variable beschrieben sind und so der wert der word variable nicht stimmt und so das servo eine völlig falsche position erhält... ich würde mal folgendes probieren:

disable interrupts
Servo(2) = Servo2buffer
Servo(3) = Servo3buffer
enable interrupts

damit die variablen sauber beschrieben werden können bevor sie in der timer routine verwendet werden.

zusatz:
ich sehe gerade das du die servo() varibeln an verschiedenen orten verwendest, ich würde nochmals zusätzliche variabeln hinzufügen welche du nur einmal beschreiben musst und in der timer isr verwenden kannst z.B. so am ende deiner berechnung:

disable interrupts
servo_pos(1)=servo(1)
servo_pos(2)=serv0(2)
enable interrupts

und dann die servo_pos() variabeln in deiner timer isr vewenden!


Den Stack vergrössern schadet auf jedenfall auch nicht! die standarteinstellung ist auf jedenfall zu wenig, ich würde ihn mindestens vervierfachen solange genug SRam zur verfügung steht!

gruss Bluesmash