ed schrieb:
> Danke für die schnelle Antwort.
>
> Die Wandler werden aber auf einem anderen Controller gelesen. Dieser
> gibt die Daten dann via TWI an den Controller weiter welcher den Timer
> und die Motorbefehle verarbeitet.
D.h. dein ADC läuft gar nicht auf dem selben Controller?
Sauber. Wozu erzählst du das dann? INteressiert keinen. Wichtig ist wo
der Motor-Steuerungscontroller seine Werte herkriegt. Und wenn das per
berittenem Boten ist, dann ist das eben berittener Bote. D.h. mich
interessiert der Stall in dem der Bote sein Pferd abstellt und wie die
Botschaft im SChloss weiterverteilt wird. Wo der Bote herkommt, welche
Prinzessin ihn geschickt hat, ist mir hingegen wieder sowas von egal,
solange die Botschaft den richtigen Inhalt hat.
In der Funktion
1 | Durch einen Timer gesteuert wird jede ms folgende Funktion aufgerufen:
|
2 | {
|
3 | if (m1==0) { PORTB = 0b00000011; _delay_us(1); }
|
4 | m1++;
|
5 | m2=(joysticky*joystickx);
|
6 | if (m1>m2) {PORTB = 0b00000111; m1=0;}
|
7 | }
|
greifst offenbar in einem Interrupt auf joysticky bzw. joystickx zu.
Und wenn die 2 Byte Variablen sind (int, uint16_t, int16_t) oder noch
größer, dann muss das Beschreiben dieser Variablen (wo auch immer das
passiert) unter Interruptsperre erfolgen.
> Ich habe nun ein Testprogramm laufen, welches im Sekundentakt die
> Ausgangswerte der Regler um einen Wert vergrößert.
> Ich kann das selbe Phänomen beobachten.
> Wenn ich den Motor im Halbschrittbetrieb habe, dann sind die Probleme
> auch noch vorhanden.
Schön.
Ich mag nicht mehr.
In unvollständigem Code, mit unvollständiger Beschreibung, ohne Ahnung
vom Gesamtsystem dubiose Fehler suchen bzw. erraten ... sorry. Heut hab
ich einfach den Nerv nicht mehr dafür. Meine Kristallkugel bleibt für
heute dunkel.