Hallo in die breite Masse,
Ich möchte o.g. Rotary Encoder zur Steuerung der Drehrichtung, wie auch der Roationsgschwindigkeit verwenden. Die vorhandene Tasterfunktion soll neben einem Übergang bei der Rotationsgeschwindigkeit zum Starten und Stoppen der Drehbewegung genutzt werden.
Vom angedachten Programmlauf folgender:
- über einen weiteren Schalter wird nur für den Programmstart die Drehrichtung vorbestimmt, und hat dann keine weitere Funktion mehr.
- die Rotation wir dadurch erzeugt, das in einer festen Folge die Steuerpins über ein Array nacheinander angesprochen werden. Je nach vorgegebener Drehrichtung läuft die Zählschleife entweder vorwärts oder rückwärts. Soweit alles noch kein Problem
- Die Startgeschwindigkeit ist ein fester Wert im Programm, muss aber ggf durch Anderung im Programm anpassbar sein.
- durch drehen an diesem Geber soll immer und unabhängig der Startdrehrichtung bei einer Linksdrehung oder Rastung bei einem Drehsinn entgegen des Uhrzeigers die Geschwindigkeit bis zu einem Grenzwert erhöht werden, ist die Startdrehrichtung im Uhrzegersinn, dann Verlangsamt werden, auch wieder bis zu einem Grenzwert und dann aufhören. Beim weiterdrehen des Gebers in die gleiche Richtung soll dann auch die Drehrichtung gändert werden. Ein darüberhinausdrehen des Rot-Gebers über die Maximalgeschwindigket soll das Programm ignorieren. Im Stopp Falll müssen die Steuerpins jedoch aktiv bleiben, oder weiterhin auf High bleiben. Wird zwischenzeitlich die Taste des Rot-Gebers gedrückt, soll die resultierend Drehbewegung schlagartig aufhören, und bei erneutem Tasterdruck fortgesetzt werden.
Nun habe ich folgendes Problem, wo mir der richtige Umsetzungsgedanke fehlt.
Beide Ereignisse Drehen am Rot-Geber, oder die Tasterbetätigung auch am Rot-Geber müssen über einen Interrupt abgefangen werden.
Versuche ich nun das Durchzählen der For-Schleife mit einem Delay auszubremsen, um die gewünsche Geschwindigkeit einzustellen, müsste der Delay Wert im Falll das die Roation gestoppt werden soll, theoretisch unendlich sein.
Der Versuch die Weiterschaltung im Array über einen Timerinterrupt durchzuführen scheitert bei mir n der Tatsache, dass die Timerlaufzeit über einen Parameter bestimmt werden müsste.
Weiterhin fehlt mir auch ein Lösungsansatz, wie ich verhindern kann, das die Pin Umschaltung unvollständig abläuft. Dazu noch folgendes. Es sind und müssen, zumindest fast in Echtzeit immer 3 der Pins aus dem Array auf High geschaltet sein.
Das heißt doch wohl, wenn jetzt meine Gedanken Richtig sind, dass während des Umschaltprozesses der Interrupt zwar bemerkt weden darf und soll, aber erst nachdem der Umschaltvorgang stattgefunden hat zur Ausführung kommen darf ?
Ich bedanke mich für jeden Input, und wüsche ein schönes WE
Gru0 Andy
