Hier möchte ich meine Version der Drehgeber-Auswertung vorstellen.
Kritik ist ausdrücklich erwünscht!
Die Idee:
Der Drehgeber liefert je nach Drehrichtung die bekannte Abfolgen:
A B
---
0 0
0 1
1 1
1 0
oder
A B
---
0 0
1 0
1 1
0 1
Um die Abfolgen zu unterscheiden, kann man jeweils eine "alte" mit einer
"neuen" Zeile über Kreuz mit EXOR verwerten. Also immer das alte A mit
dem neuen B und das alte B mit dem neuen A. Im Programm wird dazu der
alte Zustand zunächst in den Akku geladen und dann wird das Akkubit0 mit
dem Akkubit1 vertauscht. Dann kann man den byteweisen Hardware-EXOR
anwenden.
Von diesen EXOR-Ergebnissen ist (bei korrekter Funktion) immer eines 1
und das andere 0.
Jetzt werden die beiden EXOR-Ergebnisse miteinander verUNDet (EXOR1 UND
NICHT EXOR2 für die Erkennung der einen Richtung sowie EXOR2 UND NICHT
EXOR1 für die andere).
Am gesetzten Carry kann man ablesen, ob die jeweils abgefragte Richtung
vorliegt.
Zwar kann man die EXOR auch bitweise in Software nachbilden, aber die
byteweise Ausführung in Hardware dürfte doch schneller sein.
Es steht hier nur das Skelett, das je nach erkannter Drehrichtung in
Unterprogramme verzweigt. Wer zählen will, muss entsprechende
Zählvariablen einführen und (da die meisten Drehgeber alle 4 Schritte
einrastem) den Wert auf beliebige Weise durch 4 teilen.
In diesem Beispiel ist der Drehgeber an P1.0 und P1.1 angeschlossen. Die
Variable "Portspeicher" ist ein Byte im RAM.
Die Idee es so zu machen ist nicht schlecht !
Die Auswertung könnte auch so aussehen
XOR MACRO A,B
Mov C,A
Anl C,/B
Mov F0,C ;F0 = freies Bit in PSW
Mov C,B
Anl C,/A
Orl C,F0 ;Ergebnis in C
ENDM
XOR A1,B2
Mov F1,C ;F1 freies Bit in PSW
XOR B1,A2
Cpl C
Anl C,F0 ;Drehrichtung in C
Heimo
Hallo,
ich wüsste gerne, ob man dieses Programm auch verwenden kann, um eine
Schrittmotor auszulesen, wenn dieser als Drehgeber verwendet wird.
Gruss
Robert
Eine eigene Frage?
Dieser Thread ist über 19 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.