Ist schon einige Zeit her, aber das Thema war ja noch nicht vom Tisch.

Den Kabelsalat habe ich durch Platinen ersetzt. Es gibt jetzt nur noch längere an den Tastern und Servos, weil sie ja weiter weg sind.
Last- und Steuerkreis sind getrennt und Massen habe ich auch sauber zusammengeführt.

Danke für eure Tips und Infos !
Was auch immer es am Ende war es hat sich erledigt, jetzt läuft es !!

Zur Programmierung von zeitkritischen Sachen habe ich noch Fragen, bei denen ihr mir vielleicht noch mal Tips geben könnt:
Kann man eigentlich irgendwie messen wie lange bestimmte Anweisungen brauchen, oder bleibt da nur testen ?

Viele Anweisungen, die in der ISR ausgeführt werden sollen, habe ich ja eigentlich nicht (gefühlt):
Timer 1
  1. Servo-Laufvariable resetten wenn > Anzahl Servos
  2. 3 einfache Berechnungen um am MUX-Shield den richtigen Pin auszulesen
  3. je nach Taster-Status Werte in zwei Arrays schreiben
  4. über eine for() jeweils 1x shiftOut() an insgesamt 3 Register senden
  5. Länge für OCR1B aus dem Array lesen, dem Timer zuweisen und ihn starten


Timer 2
  1. Timer interrupt abschalten
  2. per shiftOut() das Steuersignal wieder abschalten


Anfangs hatte ich den Ablauf noch etwas anders, aufgeblähter, und ich musste die Routinen auf das obige reduzieren sonst war der Zeitablauf gestört und es lief natürlich nicht.
Am schlimmsten waren
Code:
Serial.print()
Serial.println()
die ich Anfangs einfach brauchte um meinen Code zu kontrollieren.

Die kürzeste Zeit, die der Arduino in meinem Programm zum Ausführen bis zum nächsten Interrupt hat, sind 0,6 ms - und mich wundert jetzt, dass bei einem Takt von 16 MHz, den der Arduino UNO ja hat, so wenige Zeilen da schon was ausmachen.
Also dass das ein Tick nicht genügt um eine Anweisung auszuführen ist mir klar, aber gibt es Anhaltswerte wonach ich gehen kann? Dass ich abschätzen kann wie viele Anweisungen in eine Zeit x passen?
Wie macht ihr das?


Viele Grüße, Radom