-         

Ergebnis 1 bis 3 von 3

Thema: Drehencoder Code - Hilfe bei Übersetzung

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    12.01.2007
    Ort
    westliches Pannonien
    Beiträge
    123

    Drehencoder Code - Hilfe bei Übersetzung

    Anzeige

    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/artic...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

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    29
    Beiträge
    4.544
    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"

  3. #3
    Erfahrener Benutzer Roboter-Spezialist Avatar von sast
    Registriert seit
    30.11.2004
    Alter
    47
    Beiträge
    497
    #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.

    雅思特史特芬
    开发及研究

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •