Danke euch für die Antworten
Ich entnehm dem, das ich es durchaus mal so probierne kann, wie angedacht
Es sind nur 1 Encoder und zwei Sensoren (das 3 ist ein Tippfehler). Der Encoder gehört zum Antrieb und dieser Antrieb ist ein Förderantrieb und transportiert viele kleine Objekte. Ich möchte mit zwei Lichtschranken feststellen, wie breit die Teilchen an zwei Stellen sind, damit ich weiss, was grad unter den Sensoren liegt und damit entscheiden kann, wohin das Objekt soll.Du schreibst von zwei Encodern und drei Sensoren; das stellt sich für mich die Frage ob die Sensoren 1 bis 3 mit den Motoren/Encodern verbunden sind? Hier wäre eine ausführliche Beschreibung von Aufbau und geplanter Aufgabe von Nutzen.
Passiert das "von alleine". Ich brauche da manuell nichts tun, ausser die ISR Variablen als volatile zu deklarieren, oder?Wichtig ist in allen Interrupt-Service-Routinen grundsätzlich, dass man veränderte CPU-Register sichert und beim Beenden der ISR wieder herstellt.
macht SinnAuf diese Weise wird Richtung auch beobachtet. Auch den Fall das ein Spur "ruckelt" wird damit sicher gestellt das nicht gezaehlt wird !
Macht irgendwo auch Sinn. Danke fürs Beispiel.man braucht beim Due keine pinchange-Interrupts, es reicht, die Encoderpins alle 100-1000µs über DueTimer auszulesen (je nach max. Drehgeschwindigkeit und Motorenzahl mehr oder weniger) und daraus die neue Encoderstellung zu berechnen.
Was würdest du bei einem Motor auch über die Zeit lösen? Oder doch über Pin-Change?
Mein "Problem" ist ja, dass die Geschwindigkeit sehr verschieden sein kann und ich daher wohl die Zeitabstände so setzen müsste, dass es für "Motor auf Vollgas" reichen muss. Das macht dann bei viel langsameren Geschwindigkeiten viel mehr Interrupts als nötig, was aber egal sein dürfte.
Liebe Grüsse
Getorix
Lesezeichen