Wenn du die einzelnen Routinen über einen Timer aufrufst, kannst du erreichen, dass er nach eine von dir definierten Zeit zur nächsten Routine springt und nicht erst wenn er mit der einen fertig ist.Technisch kann ich mir des leider net vorstellen da ich mit Basic nur springen kann und ja dann der Code ausgeführt wird und er erst wieder
zurückspringt wenn er fertig ist und nicht nach Maschienenzyklen?!
Das ergibt natürlich noch lange kein richtiges Multithreading, aber oft reicht es, wenn man nur wenige wirklich zeitkritische Routinen über einen Timer aufruft und den Rest in einer Schleife (so wie deine Sprungliste oben) nacheinander abarbeiten lässt.
So ein µC ist ja ziemlich flott und bei der Abfrage von Sensoren und vielen anderen Dingen kommt es meist nicht auf ein paar mS an.
Wenn der Controller da per Timer regelmässig zwischendurch rausspringt um einen Radencoder abzufragen oder einen Schritt auf den Schrittmotor zu geben stört das meist nicht.
Radencoder würde ich an einen externen Interrupt anschliessen und in der entsprechenden Interrupt-Routine jedesmal eine Zählervariable um 1 hochzählen, wenn ein neuer Interrupt kommt.Radimpulse aus 0 --> 200ms.
Das bremst natürlich mein Programm
Auf diese Zählkervariable kannst du dann in deiner normalen Routine zugreifen und hast (mehr oder weniger) automatisch immer den aktuellen Stand.
PS: ich sehe gerade, BlueNature war schneller und hat deine Frage schon beantwortet.
Lesezeichen