Zitat Zitat von inka Beitrag anzeigen
natürlich weiss ich um die vorteile der ISR routinen,
Es geht nicht um Vorteile. Es geht eigentlich nicht anders. Beispiel Stepper: wenn du ihn mit 1kHz (1ms) taktest, musst du dich (oder eher der µC) alle Millisekunde um ihn kümmern. Kein anderer Programmteil darf dich länger als eine knappe Millisekunde davon ablenken. In der AccelStepper wird das so gemacht und in der Beschreibung heisst das dann so:

The run() function must be called frequently until the motor is in the desired position, after which time run() will do nothing.
Und hier nachmal etwas zu "called frequently":

The fastest motor speed that can be reliably supported is about 4000 steps per second at a clock frequency of 16 MHz on Arduino such as Uno etc.
4000 Schritte heißt 250µs pro Schritt. Wenn der Stepper so schnell laufen soll, darf in loop() nichts gemacht werden, was länger als diese 250µs dauert. Mit Sicherheit darf also kein "dummer" US-Sensor ausgelesen oder ein delay() verwendet werden. Aber auch jede andere Funktion Funktion ist problematisch. Und weil ich gerade die AccelStepper Doku offen habe:

Calling setAcceleration() is expensive, since it requires a square root to be calculated.
Hier wird darauf hingewiesen, daß schon das Berechnen der Quadratwurzel zeitlich ein Problem ist. Das wird man zwar nicht oft machen, so daß es einem menschlichen Beobachter nicht auffällt, für die Stepper stellt aber schon die einmalige Benutzung ein Problem dar. Es gibt natürlich handgefeilte Systeme, die mit diesen Bedingungen leben können wie 3D Drucker oder CNC-Systeme mit grbl. Da kann man dann nachträglich kaum noch etwas hinzufügen.

Nun kann man natürlich sagen, für deinen Outdoor muß alles nicht so schnell gehen. Das ist sicher richtig, verschleiert aber das grundsätzliche Problem. Wenn jetzt zu den Steppern, US-Sensoren noch weitere wie Lidar und GPS etc. hinzukommen und weitere Aufgaben wie die Kommunikation mit z.B. einer Fernbedienung, Telemetrie usw. zu erledigen sind, ist es wieder da.

Die Lösung, die üblich ist und für die Unterstützung in die µC eingebaut sind heißt Interrupt. Alle anderen Konzepte, wie z.B. bei den Transputern haben sich nicht durchgesetzt. Die "alten" Prozessoren wie Z80 oder 8088 brauchten noch einen externen Baustein zur Unterstützung, den fand man auf fast jedem Prozessorboard.

Zitat Zitat von inka Beitrag anzeigen
habe auch versucht mich in die problematik in verschiedenen tutorials und anderen webseiten einzulesen, bin dabei aber nicht wirklich weitergekommen ...
Es wäre vielleicht ein versuch wert, wenn jemand mit mir zusammen versuchen würde, die problematik schritt für schritt durchzuarbeiten, an codebeispielen, fragen und erklärungen...
Insofern sollte mein letzte äusserung hier im thread keine rigorose ablehnung in richtung ISR sein. Den thread würde das sicher bereichern...
Die Idee finde ich gut. Nur kann ich mit Codebeispielen schlecht dienen. Ich habe keine AVR und keine Arduinos sonder PIC, vorzugsweise PIC24 und programmiere die in C. Das Konzept "Interrupt" ist zwar auf allen gleich, aber in C kommt es nicht vor. Um es trotzdem aus C nutzen zu können, hat da jeder Compiler seine Sonderlocken gestrikt. Die erledigen zwar alle das Gleiche, aber mit unterschiedlichen Formulierungen. So kann ich also keine fehlerfreien Beispiele für einen Arduino liefern, da ich sie nicht testen kann. Das betrifft aber eigentlich nur zwei-drei Zeilen am Anfang des Handlers. Im übrigen kann ich aber meinen Beitrag zum Einsatz von Interrupten liefern. Es ist am Ende nicht wirklich kompliziert.

MfG Klebwax