PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Drehencoder Code - Hilfe bei Übersetzung



Rone
09.06.2009, 20:39
Hallo zusammen!

Vorweg: Bin Hobbyist und in meiner Freizeit beschfätige ich mich ein wennig
mit µC und Bascom.
Vorhaben:Habe mir einen Servotester mit 3 Tasten und Bascom gebastelt.
Funktioniert sehr gut. Nun möchte ich die drei Tasten durch einen Drehgeber
ersetzen. Der Bascom interne Encoder Befehl ist so nicht das Wahre, obendrein möchte ich auch immer ein wenig mehr dazulernen.
Habe imµC-net Forum einen Code gefunden der im 1ms Timerinterrupt
läuft, den ich nach Bascom transportieren möchte.
Link:http://www.mikrocontroller.net/articles/Drehgeber#Differenzierung_von_Drehgebern

Da man dort als Anfänger oft blöd angemacht wird stelle ich meine Fragen
lieber hier.

Also 1.) #define PHASE_A (PINA & 1<<PA1)
PinA wird eingelesen, das Bit1 wird um 1 Stelle nach links geshifted
und dann beides Bitweise ver_und_et. Soweit meine Eigendefinition.
Wenn ich die Pegelzustände durcharbeite kommt bei mir immer
Null raus!

2.) if( PHASE_A )
new = 3;
Wenn Bedingung ist true dann new =3. Aber dazu kommst bei
mir ja nicht da PHASE_A immer 0 ist.
Das kann ja so nicht stimmen!

Kann mir jemand der C-Cracks hier bitte helfen?

MfG
Rone

021aet04
09.06.2009, 22:07
Hallo Rone, das mit dem Encoder ist nicht so schwer. Du legst z.B. Phase A auf einen Int Eingang. Phase B legst du auf einen normalen Eingang. Jedesmal, wenn ein Int ausgelöst wird pberprüfst du Phase B. Je nach dem in welche Richtung du drehst ist Phase B "1" oder "0"

sast
09.06.2009, 23:29
#define PHASE_A (PINA & 1<<PA1)
if( PHASE_A )

bedeutet, dass das Controllerbeinchen PA1 auf 0 oder 1 getestet wird. Liegt an PA1 eine 1 dann ist die IF Abfrage wahr bei 0 ist sie falsch.

Und bevor als nächstes die Frage nach new ^= 1; kommt.
Das bedeutet new = new^1; Wobei ^ ein bitweises Exclusivoder ist.

0 ^ 0 = 0
0 ^ 1 = 1
1 ^ 0 = 1
1 ^ 1 = 0

sast

PS: zu PINA & 1<<PA1

1<<PA1 heißt, dass eine 1 um PA1 Stellen nach links geschoben wird. Nehmen wir an, das PA1 mit 5 definiert wurde (nur zum Verständnis), dann wird die 1 also um 5 Stellen nach links verschoben. Nun wird 00100000 mit PINA bitweise verundet und wenn da bei Bitposition 5 auch eine 1 steht ist PHASE_A == 1. Das ist eigentlich schon alles.